. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->外中断
主题 : :  检测点15.1的一个疑问  [待解决] 回复[ 13次 ]   点击[ 784次 ]  
lj9766
[帖 主] [ 发表时间:2009-08-10 23:01 ] 
荣誉值:0
信誉值:0
注册日期:2009-07-30 00:44
对于15.1的答案精简为
pushf
call dword ptr ds:[0]
我觉得似乎不用pushf了吧,因为这是中断例程,占用的是中断类型码9的中断向量,
那在中断发生时,中断过程中,标志寄存器入栈是cpu硬件完成的啊,而且IF和TF也都由硬件置0,干嘛还需要再次pushf呢?
不明白!
tsembrace
[第7楼] [ 回复时间:2011-09-05 21:46 ] 
荣誉值:31
信誉值:3
注册日期:2009-06-15 19:20
必须要~
整个模拟中断例程的顺序结构如下:
1、调用原9号中断例程
2、程序
3、恢复及返回
如果没有pushf而直接用call的话,那么细化下上面的步骤就是:
(1)pushf,TF=IF=0,push cs\push ip
(2)原例程处理代码
(3)pop ip,pop cs,popf
以上三步即为上述1中的分步
(4)同上2
(5)同上3
说到这儿应该就可以看出来了,如果没有pushf的话在call的时候已经完成popf这个步骤了,那你后面的程序如果涉及到flag的改动你根本没辙处理。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved