Как в отладчике посмотреть векторы прерываний? - 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

Объяснение кода листинга программы

  1. CSEG segment - сегмент кода
  2. assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG - задаем сегменты для работы
  3. org 100h - указываем точку входа в программу
  4. Start: - точка входа в программу
  5. jmp Init - переход на процедуру инициализации
  6. Int_21h_proc proc - объявление процедуры обработки прерывания 21h
  7. cmp ah,9 - сравнение байта в регистре AH с 9
  8. je Ok_09 - если AH равно 9, то переход на процедуру Ok_09
  9. jmp dword ptr cs:[Int_21h_vect] - переход на адрес, указанный в векторе прерывания 21h
  10. Ok_09: - точка обработки прерывания 21h
  11. push ds - сохранение сегмента данных
  12. push dx - сохранение регистра DX
  13. push cs - сохранение сегмента кода
  14. pop ds - восстановление сегмента данных
  15. mov dx,offset My_string - установка регистра DX на смещение строки 'My string$'
  16. pushf - сохранение флагов
  17. call dword ptr cs:[Int_21h_vect] - вызов процедуры, указанной в векторе прерывания 21h
  18. pop dx - восстановление регистра DX
  19. pop ds - восстановление сегмента данных
  20. iret - возврат из процедуры обработки прерывания

Оцени полезность:

11   голосов , оценка 3.818 из 5
Похожие ответы