 |
Ассемблер в примерах - Как проверить работу программы
- Вопрос:
-
У меня вопрос по главе 10 книги О.Калашникова "Ассемблер?Это просто!"
В книге, после заголовка "Как проверить работу программы" автор предлагает проверить работу разбираемой в этой главе резидентной программы(в приложении - прога 1) таким образом:
1)запустить вначале прогу1.
2)после того, как прога1 завершит свою работу запустить прогу2(ее я тоже указал в приложении)
посмотреть что происходит, и
3)запустить прогу2 в отладчике(у меня AFD). Сделал все это.
Затем ,когда я захожу внутрь прерывания 21h, код у меня отладчик показывает совсем не тот, который по идее должен быть(как в книге), а именно:
в книге:
(программа прога2 выполнила команду int 21h)
int 21
cmp ah,09
jz 010C и так далее
у меня:
(программа прога2 выполнила команду int 21h)
int21
nop
nop
call 1161
jmp Far cs:[1048]
nop
nop и так далее
Но по идее после перехвата прерывания вариант должен быть первый! почему у меня происходить совсем другое???Делаю все вроде бы верно, кучу раз проверил...В итоге прерывание перехватывается, нужная строка на экран выводится, но вот в отладчике не то, что нужно...почему???
(Прога1)
My segment
assume cs:My, ds:My, es:My, ss:My
org 100h
Start:
jmp Init
Int_21h_proc proc
cmp ah,9
je Ok_09
jmp dword ptr cs:[Int_21h_vect]
Ok_09:
push ds
push dx
push cs
pop ds
mov dx, offset My_string
pushf
call dword ptr cs:[Int_21h_vect]
pop dx
pop ds
iret
Int_21h_vect dd ?
My_string db 'Моя строка! $'
int_21h_proc endp
Init:
mov ah,35h
mov al, 21h
int 21h
mov word ptr Int_21h_vect,bx
mov word ptr Int_21h_vect+2,es
mov ax,2521h
mov dx, offset Int_21h_proc
int 21h
mov dx, offset Init
int 27h
My ends
end Start
(Прога2)
MySegment segment
assume cs:MySegment,ds:MySegment, es:MySegment,ss:MySegment
org 100h
Begin:
mov ah,9
mov dx, offset String
int 21h
int 20h
String db 'My String.$'
MySegment ends
end Begin
- Ответ:
-
В данной ситуации Вы попадаете в родной обработчик DOS, а не в перехваченный, думаю Вы неправильно запускаете программу (проверил и других мыслей просто нет), если работайте под Windows, поробуйте так
На диске "C" сделайте папку "1", туда скопируете исколняемые файлы программы 1, 2 и отладчик.
Затем запустите командную строку "Пуск/Выполнить/cmd.exe"
В консольном окне введите следующие команды
cd
cd 1
1.com
adf 2.com
и сделайте трасировку
|  |