|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 11, 2004 19:59:23 · Поправил: atos Я вот не пойму никак, начал изучать асм недавно, тащусь просто, но есть множество моментов, на которые немогу найти ответы. Вот например надо ввести строку и сразу ее вывести:
CSEG segment
org 100h
assume CS:CSEG,DS:CSEG,SS:CSEG,
;-------------------------------------
start:
mov dx,offset mess1
mov ah,09h
int 21h ; приглашение
mov dx,offset buf1
mov ah,0Ah
int 21h ; считываем строку в буфер
mov dx,offset buf1
mov ah,09h
int 21h ; выводим введенную строку
;-------------------------------------
mov dx,offset mess2
mov ah,09h
int 21h ; выводим mess2
mov ax,10h
int 16h ; ждем нажатия любой клавиши
mov ah,4ch
int 21h ; выход из программы
;-------------------------------------
mess1 db 'Enter string: ',24h
mess2 db 'Press any key to continue...',24h
buf1 db 128 dup ('$')
CSEG ends
end start
Но чувствуется, что-то здесь не так. :( Подскажите плз. Спасибо. |
|
|
Дата: Июн 11, 2004 20:19:25 Не так - разве что ввести могут больше 127 символов. Больше багов нет - почти идеальная программа :) |
|
|
Дата: Июн 11, 2004 20:21:46 hGoblin Не бывает программ без багов - бывает плохо искали :) А если написал программу без багов - зови системного программиста - он поправит баг в компиляторе :) |
|
|
Дата: Июн 11, 2004 20:30:00 Вроде функция 0A принимает указатель на буфур первым байтом которого является его размер. |
|
|
Дата: Июн 11, 2004 21:14:21 Не так - разве что ввести могут больше 127 символов. Больше багов нет - почти идеальная программа :) Вот именно, что почти :) Ну неработает она! :( Как только не извращался - либо ничего не выдает, либо мусор кидает, либо на принтер печать посылает, либо просто подвисает. Вроде функция 0A принимает указатель на буфур первым байтом которого является его размер. А как же тогда надо? Полдня сижу туплю... хоть бы примерчик кто чирканул как с функцией етой (0Ah т.е.) работать... |
|
|
Дата: Июн 11, 2004 22:38:17mov dx,offset buf1 + 2 mov ah,09h int 21h ; выводим введенную строку ;------------------------------------- просто первый байт буфера, нга скока я помню, -- это максимальный размер строки, которую ты будешь вводить, второй байт заполняется системой уже после ввода, он показывает размер введенной строки -- а дальше уже сама строка |
|
|
Дата: Июн 12, 2004 00:12:14 И все равно не помогает :(( Вываливается мусор. |
|
|
Дата: Июн 12, 2004 00:25:33 atos >Вываливается мусор. а на какой стадии? ) Когда выводишь предварительно введенную строку? Или раньше? |
|
|
Дата: Июн 12, 2004 06:31:45 atos все равно не помогает Покажи, какие изменения ты внес. |
|
|
Дата: Июн 12, 2004 07:26:39 atos поробуй после распечатки введенной строки переводить строку (распечатать db 13, 10, '$' например) у меня без этого строки записываются поверх друг друга |
|
|
Дата: Июн 12, 2004 09:54:18 попробуй считать строку так xor bx,bx mov cx,127 lea dx,buf1 mov ah,3fh int 21h и ожидание нажатия клавиши mov ah,7h int 21h |
|
|
Дата: Июн 13, 2004 15:35:20 Спасибо, функция 3Fh помогла! Значить дело было так: Вводил строку, нажимал интер - строка пропадала и вываливался мусор одновременно с писком спикера. Spiteful, ксорить bx вроде ненадо. А в cx зачем пересылать 127? Пробовал и так и так - ничего неизменилось. Объясни плз. Значит получился вот такой окончательный листинг:
CSEG segment
org 100h
assume CS:CSEG,DS:CSEG,SS:CSEG,
;-------------------------------------
start:
mov dx,offset mess1
mov ah,09h
int 21h ; приглашение
lea dx,buf1
mov ah,3fh
int 21h ; считываем строку в буфер
mov dx,offset buf1
mov ah,09h
int 21h ; выводим введенную строку
;-------------------------------------
mov dx,offset mess2
mov ah,09h
int 21h ; выводим mess2
mov ax,10h
int 16h ; ждем нажатия любой клавиши
mov ah,4ch
int 21h ; выход из программы
;-------------------------------------
mess1 db 'Enter string: ',24h
mess2 db 'Press any key to continue...',24h
buf1 db 128 dup('$')
CSEG ends
end start
Кстати, еще вопрос: чем отличается lea от mov dx,offset buf1 ? Пробовал и так и так - ничего неизменилось - .com файлы ни на байт неотличаются. |
|
|
Дата: Июн 13, 2004 18:27:34 3fh - функция чтения из файла;просто в bx может быть некий мусор и функия может запросто проглючить. В cx - сколько байт надо прочитать, попробуй обнулить cx. Кстати, еще вопрос: чем отличается lea от mov dx,offset buf1 ? Писать короче :)) |
|
|
Дата: Июн 14, 2004 16:25:35 А 3Fh - чтение из файла, а почему она работает на ввод строки??? |
|
|
Дата: Июн 14, 2004 16:46:54 · Поправил: Spiteful А 3Fh - чтение из файла, а почему она работает на ввод строки??? потому как если в bx(дескриптор файла) 0, то функция читает с клавиатуры. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.051 |