Как в отладчике посмотреть векторы прерываний? - Assembler
Формулировка задачи:
Как в отладчике посмотреть векторы прерываний в AFDPro или Turbo Debagger
Решение задачи: «Как в отладчике посмотреть векторы прерываний?»
textual
Листинг программы
CSEG segment assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG 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 'My string$' 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 CSEG ends end Start
Объяснение кода листинга программы
- CSEG segment - сегмент кода
- assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG - задаем сегменты для работы
- org 100h - указываем точку входа в программу
- Start: - точка входа в программу
- jmp Init - переход на процедуру инициализации
- Int_21h_proc proc - объявление процедуры обработки прерывания 21h
- cmp ah,9 - сравнение байта в регистре AH с 9
- je Ok_09 - если AH равно 9, то переход на процедуру Ok_09
- jmp dword ptr cs:[Int_21h_vect] - переход на адрес, указанный в векторе прерывания 21h
- Ok_09: - точка обработки прерывания 21h
- push ds - сохранение сегмента данных
- push dx - сохранение регистра DX
- push cs - сохранение сегмента кода
- pop ds - восстановление сегмента данных
- mov dx,offset My_string - установка регистра DX на смещение строки 'My string$'
- pushf - сохранение флагов
- call dword ptr cs:[Int_21h_vect] - вызов процедуры, указанной в векторе прерывания 21h
- pop dx - восстановление регистра DX
- pop ds - восстановление сегмента данных
- iret - возврат из процедуры обработки прерывания