Почему эта программа вешает FreeDOS/QEMU?*Переопределяется вектор INT09, обработчик которого делает JMP FAR (0xEA) на стандартный обработчик, который должен корректно завершать обработку (сбросом соотв. флажков контроллера прерываний).*Сразу же восстанавливается адрес обработчика.test.asm:
Код:
org 100h
jmp lmain
; INT 09h (IRQ1) event handler
eh09:
push ax
in al,60h; get scan code
cmp al,01h
pop ax
db 0eah; jmp far old event handler
a09_old resd 1
lmain:
mov ax,3509h; get old vector
int 21h
mov [a09_old],bx
mov [a09_old+2],es; es:bx
mov dx,eh09; ds:dx
mov ax,2509h; set new vector
int 21h
mov dx,[a09_old+2]
mov ds,dx
mov dx,[a09_old]
mov ax,2509h; restore vector
int 21h
mov ah,4ch; quit
int 21h
yasm -f bin -w -o test.com test.asm