汇编笔记9

整合:第十二章和十三章 关于内中断

内中断的一些概念

当cpu内部发生一些情况时,会产生一些需要处理的中断信息,会对应有相应的处理

对于8086cpu,有下四种中断情况:

  • 除法错误,如div指令产生的除法溢出:中断类型码(下同)0
  • 单步执行:1
  • 执行into指令:4
  • 执行int指令: int n就是n

中断向量表

8086cpu的向量中断表放在0000:0000 ~ 0000:03ff处,一个表项存一个中断的信息

大概长这样:1

每个中断对应的地址共占2个字的大小

高地址字存cs

低地址字存ip

中断过程

  1. 中断类型码为 n 的中断发生
  2. 标志寄存器压栈并置 TF=IF=0
  3. 当前cs 和 ip 压栈(先压cs后ip)
  4. cs:ip指向中断向量表中n号中断的所指向的地址
  5. 执行所指地址的中断程序(也叫中断例程)
  6. *一般中断例程中都有iret指令(作用类似于ret)相当于执行 pop ip , pop cs , popf

自己编写中断例程

  1. 编写中断例程
  2. 利用movsb指令将例程代码送入到合适的内存区(如0000:0200~0000:02ff,中断向量表一般有很多空闲单元,且不会被其他程序占用)
  3. 将 n 号中断里的地址改为上述所选内存的地址

例:编写、安装7ch中断,将data段以0为结尾的字符串转化为大写
2

ps:中断程序中iret指令的妙用:利用压入在栈中中断发生处的cs:ip可以令iret跳转到想跳转的地方去。

例:在屏幕中间显示80个’!’
3
4

Comments