ex_int9_start: push ax
push bx
push es
mov al,60H
pushf
pushf
pop bx
and bh,11111100B
push bx
popf ;tf = 0 if = 0
call dword ptr ds:[0] ;push cs push ip
cmp al,1 ;is ESC
jne int9_ret
mov ax,0B800H
mov es,ax
inc byte ptr es:[160*12+1]
ex_int9_ret: pop es
pop bx
pop ax
iret
call dword ptr ds:[0] 这个方法如何返回?iret ?
我们编写过int 程序 都知道 要么 iret 要么直接整个程序返回
例如 mov ax,4c00h int 21H
ex_int9_ret: pop es
pop bx
pop ax
iret
但是程序结尾 也有 一个iret
根据 P 276的 说法 每次输入 就会产生 一个 可屏蔽中断int9
那么这里的理解应该是 + 检测点 15.1的说法 + 实验13.1
实验13.1 最后调用 int7CH 调用的时候 就进行了 pushf push cs push ip 操作
我的理解是这里进行了 2层 pushf push cs push ip 而且进行了 TF=0 if=0的设置
所以 15.1的检测点说 可以简化 这部分 call的目的是 为了将 cs ip 入栈
然后 方法结尾 iret 我们模拟的 pushf push cs push ip 操作
最后的 iret 是 针对 中断调用的 入栈 操作
因为我不知道怎么 调试这样带 输入的 debug 只能进行推理 请大家指教 |