汇编语言(王爽第三版)检测点15
(2017-04-27 16:42:21)
标签:
汇编王爽it教育 |
分类: 汇编语言(王爽第三版)检测点 |
检测点 15.1
(1)仔细分析一下上面的int 9中断例程,看看是否可以精简一下?
可以精简为:
pushf
call word ptr ds:[0]
两条指令。
【1】由于我们无论是调用那个中断处理例程,CPU都干如下的活:
【2】为什么还有个pushf呢,这个pushf指令压栈标志寄存器,确实是保护标志寄存器的值,也是为了与中断程序中的iret(它内部CPU操作步骤有popf)相呼应。如果没有这个pushf,那么iret指令执行中出栈到标准寄存器的值可能不正确了。
(2)仔细分析上面程序中的主程序,看看有什么潜在的问题?
程序分析:
【1】关于设置中断向量表的指令,在程序中就2段。
mov word ptr es:[9*4], offset int9
mov es:[9*4+2],
cs
-----------
; 将中断向量回写回中断向量表中
【2】sti和cli指令的用法:
【3】这二段代码前后加上cli和sti指令即可:
;在中断向量表中设置新的中断入口地址的时候不让其发生中断
cli
mov word ptr es:[9*4],offset int9
mov word ptr es:[9*4+2],cs
sti
-------------
恢复中断向量表int9的源地址时:
cli
push ds:[0]
pop es:[9*4]
push ds:[2]
pop es:[9*4+2]
sti