. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->外中断
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第15章问题  [待解决] 回复[ 1次 ]   点击[ 451次 ]  
16141602
[帖 主]   [ 发表时间:2015-05-06 21:31 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-12-04 23:43
本人对第15章有些内容不够理解,反复看书也是不明白
不明白的地方;
① 编写了新的int9 模拟int 9 中断程序
   pushf
   call dword ptr 内存单元 书中这里指向了原来的int 9 中断对么?
   那么我们自己的int 9 中断 他是什么时候执行?
② 为什么在:
   cli 
   mov word ptr es:[9*4],200h
   mov word ptr es:[9*4+2],0
   sti
   中加入 cli  
好像就这里不懂, 如果懂了,写代码也就有目标了,
   请大神解答, 并且写上您对15章 编写新的int 9 例程的理解,感激不尽
asm0101
[第1楼]   [ 回复时间:2015-05-13 01:30 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2015-02-17 23:21
一起学习。
①那个call指令就是将程序jmp到指定的地址,原int 9的新入口地址。在call的这个时候,已经在执行新int 9了。书上说,当有键盘输入并到达60h端口时,引发int 9。在中断向量表已改为自己的int 9的入口地址后,就可开始执行自己的int 9中断例程。虽然修改中断向量表之后的任何时刻都可能执行新int 9,但更多时候是在delay子程序的循环中执行新int 9。
     过程大致为:(主程序—子程序执行体)按下按键—>引发新int 9 —>调用旧int 9 —>iret—>返回新int 9—>iret—>返回(主程序—子程序执行体)
②cli指令就是使IF标志位设置为0,这样,之后的代码段就不会受到可屏蔽中断的干扰,直至sti指令使IF复位为1。
    如果不加入cli,而恰好在执行“mov word ptr es:[9*4],200h”时引发了中断,ip已改为新值,但“mov word ptr es:[9*4+2],0”没有接着执行,cs没有被改为新值0,cs:ip被扭曲成不匹配的地址对,cpu就转到错误的地方去执行了。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved