;测试int 9h中断
;其实我就是想看了书以后自己想写个小东西
;自定义int9 输出一个'h'
data segment
str dw 1,1
data ends
code segment
assume cs:code
start:
mov ax,cs
;-------------------传送0000:200h------------------
mov ds,ax
;源
mov si,offset mycode
;目的
mov ax,0
mov es,ax
mov di,200h
mov cx,offset mycodeEnd - offset mycode
cld
rep movsb
;------------------传送结束---------------
;------------------保存源int 9h地址---------------
mov ax,data
mov ds,ax
mov ax,es:[9*4] ;偏移;0045h
mov ds:[0],ax
mov ax,es:[9*4+2] ;段;1824h
mov ds:[2],ax
;------------------保存结束---------------
;----------设置自定义中断向量int 9地址---------------
mov word ptr es:[9*4],200h
mov word ptr es:[9*4+2],0000h
;----------设置自定义中断向量int 9地址结束-----------
mov ah,01h
int 21h
mov ax,4c00h
int 21h
mycode:
push ax
push bx
push es
mov dl,'h'
mov ah,02h
int 21h
;模拟int 9h
pushf
pushf
pop bx
and bh,11111100b
push bx
popf
;在这里执行调用时候是个错误的地址,我郁闷了
;程序里上面的程序我调试了N久也没发现什么问题,
;说实在话真的不好调试,只要一出错和死机了没区别
call dword ptr ds:[0]
pop es
pop bx
pop ax
iret
mycodeEnd:nop
code ends
end start |