Учебник по ассемблеру (ASM)
 

Ассемблер в примерах - Как проверить работу программы

Вопрос:
У меня вопрос по главе 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
и сделайте трасировку


   Вперёд
   Содержание