. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->外中断
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于检测点15.1  (2)的疑问  [待解决] 回复[ 2次 ]   点击[ 442次 ]  
ycxdtdz
[帖 主]   [ 发表时间:2014-02-13 09:22 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-12-11 10:36
在主程序中,如果在设置执行设置int 9中断例程的段地址和偏移地址的指令之间发生了键盘中断,则CPU将转去一个错误的地址执行,将发生错误。

     请问高手这个CPU如何转到错误地址运行,我怎么想都不明白
hky987654321
[第1楼]   [ 回复时间:2014-02-13 16:13 ]   [引用]   [回复]   [ top ] 
荣誉值:26
信誉值:0
注册日期:2013-07-15 09:25
检测点15.1(2)可从三方面考虑:
    一、该主程序有两处修改了中断向量表。第1处是用新编int 9的入口地址替换掉系统int 9的入口地址,第2处则是将该表中的入口地址重新还原为系统int 9的值。
    二、该主程序中每处修改都是分两步完成,第1步改ip,第2步改cs 。如果在第1步与第2步之间发生键盘中断,也就是说,此时中断向量表只完成了ip的修改,表中的cs:ip是前述两种int 9的入口地址的混合值,这时引用该值必然发生错误。
    三、既然我们随时都可以通过键盘输入数据,即表明随时都可以发生键盘中断——这暗示CPU的常态设置是标志位IF=1。为避免上述错误,应当在修改中断向量表之前设置IF=0,完成修改后再置常态IF=1,即要用cli和sti将修改过程括起来。
jzy456789
[第2楼]   [ 回复时间:2018-03-28 18:09 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2018-03-25 20:26
cli
       push es:[9*4]
       pop ds:[0]
       push es:[9*4+2]
       pop ds:[2] ;
       sti
是这个意思吗?
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved