. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->外中断
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  15.4例程的不解,求那位能帮我解释下!  [已解决] 回复[ 2次 ]   点击[ 463次 ]  
yc2010
[帖 主]   [ 发表时间:2010-08-26 09:53 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-03-03 23:27
15.4例程中的部分代码:
........
push es:[9*4]
pop ds:[0]
push es:[9*4+2]
pop ds:[2]              1:这里是将原来的int 9中断例程的入口地址保存在ds:0,ds:2单元中

mov word ptr es:[9*4],offset int 9
mov es:[9*4+2],cs       2:这里是在中断向量表中设置新的int 9中断例程的入口地址  
........
push ds:[0]
pop es:[9*4]
push ds:[2]
pop es:[9*4+2]          3:这里是将中断向量表中int 9中断例程的入口恢复为原来的地址
........
pushf
pushf
pop bx
and bh,11111100b
push bx
popf 
call dword ptr ds:[0]   4:这里是对int指令进行模拟
                        ----->这一句的作用是:push ds:[2],push ds:[0]

cmp al,1
........
以下是我的理解:1,2执行后,就执行4,4将原来的int 9中断例程的入口地址压进栈,那此时到底是
调用的原来的int 9中断例程,还是新写的int 9中断例程?有点迷惑求人给解。
yc2010
[第1楼]   [ 回复时间:2010-08-26 15:22 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-03-03 23:27
以下是我的理解:1,2执行后,就执行4,4保存cs和ip后,转移到ds:[0]和ds:[2],ds:[0]和ds:[2]中存放的是原来的int 9中断例程的入口地址,那此时到底是调用的原来的int 9中断例程,还是新写的int 9中断例程?
call dword ptr ds:[0] 
   ------->后面的改变颜色的功能会加到原来的int 9中断例程吗?
cmp al,1 
jne int9ret
mov ax,0b800h
mov es,ax
inc byte ptr es:[160*12+40*2+1]
int9ret:pop es
pop bx
pop ax
iret
code ends
end start
有点迷惑求人给解。
yc2010
[第2楼]   [ 回复时间:2010-08-26 21:53 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-03-03 23:27
此贴由 贴主 于 [ 2010-08-26 21:53 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved