Консультация № 193890
12.11.2018, 18:38
0.00 руб.
0 1 0
Здравствуйте! У меня возникли сложности с таким вопросом:
windows xp 32
masm 6.15
по книге Рудакова Финогенова "Программирование на языке ассемблера IBM PC"
по книжке написал программу по чтению файла, и вывода прочтённого из этого файла на экран
Код:

....
открываем файл
mov ah,3dh
mov al,2
mov dx,offset filename
int 21h
mov handle,ax

чтение открытого файла в buffin, в cx сохраняем количество прочтённых байт
mov ah,3fh
mov bx,handle
mov cx,65535
mov dx,offset buffin
int 21h
mov cx,ax

вывод содержимого buffin yна экран
mov ah,40h
mov bx,1
mov dx,offset bufin
int 21h
.......
exit...


Сам код работает безупречно с небольшим текстом, по крайней мере с однострочным точно без проблем. но решил я вывести через программу сам исходный файл текста или obj или lst этого же файла и программа завершается без сообщения, или же с сообщением что процессор NTVDM обнаружил недопустимую инструкцию. через td скакал по инструкциям и каждый раз на:
Код:

mov ah,4fh
mov bx,handle
mov cx,65535
mov dx,offset buffin
int 21h <----- вот тут

при отработке прерывания то просто выходит из программы, то перескакивает на случайную инструкцию, изменяются все регистры, кроме стэк сегмента.
Обычно если программа работает не так как я думаю, то пробегаюсь через дебагер, и всё становится ясно, но тут же ничего не понятно. поэтому подробно и описал вам что происходит в td. Если есть возможность решаема ли эта проблема, или, или эта какая либо фича, которая может быть для Вас естественное а для Меня ещё не известной. спасибо.

Обсуждение

давно
Посетитель
402218
66
12.11.2018, 18:43
общий
забыл дописать
Код:

text segment
assume....
.... то что выше
text ends
data segment
bufin db 80 dup (' ') <<- в этом месте изменял значения большее что бы смог вместиться данный файл, ни как не помогло. хотя по сути затирание сегмента неиспользуемого, случайного кода, ни как не повлияло бы на прогу.
handle dw ?
filename db 'D:\myprog.asm'
data ends
Форма ответа