. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->外中断
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  检测点15.1的程序请教?  [待解决] 回复[ 3次 ]   点击[ 673次 ]  
yugong
[帖 主]   [ 发表时间:2008-10-26 19:06 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:8
注册日期:2008-09-15 09:10
为什么上面的int 9中断例程用g命令能成功运行,而用t命令不能跟踪程序呢,到mov word ptr es:[9*4],offset int9处就出错?
lwbfq
[第1楼]   [ 回复时间:2008-10-31 15:50 ]   [引用]   [回复]   [ top ] 
荣誉值:56
信誉值:0
注册日期:2008-01-19 13:58
可能和保护模式下有关,如果把ES换成DS就没问题了。
kildare
[第2楼]   [ 回复时间:2008-11-01 10:21 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-11-01 10:20
我也碰到这个问题,把es改成ds也没用,有没有高手指教?
yp12000
[第3楼]   [ 回复时间:2009-04-19 15:16 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-03-14 20:10
正确设置应该为
cli
mov word ptr es:[9*4],offset int9 
mov es:[9*4+2],cs 
sti
cli的作用是设置if=0,使cli和sti中间的2条指令不响应可屏蔽中断
为什么要这样设置呐?
我们假设你在mov word ptr es:[9*4],offset int9
指令执行后,按下键盘(当然这种几率是很小的,因为CPU运行速度很快.不过仍然是一种隐患)
那么只要按下键盘,就会执行int9中断,使cs和ip指向中断处理程序的入口地址
而cs和ip即不会指向系统原来的INT9中断例程(因为IP已经改变),也不会指向新安装的INT9中断例程(因为目前的CS指向系统原来的INT9中断例程)
所以,这个时候,CS:IP指向的是一个错误的地址
所以 要先cli,使之不响应可屏蔽中断-键盘中断
关键问题是 你在执行单步中断的时候,是按下键盘上的--T,然后按键盘上-回车
你一按键盘 就产生一个键盘中断  所以就。。。。。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved