汇编语言(第三版,王爽)读书笔记
内中断
cpu都具备一种能力,检测到从cpu外部发送过来的或内部产生的一种特殊信息,并可以立即对所接受的信息进行处理。称其为中断信息,中断的意思就是,cpu不在接着向下执行,而是转去处理这个特殊信息。
内中断的产生
cpu内部有下面的情况发生的时候,将产生相应的中断信息:
(1)除法错误,执行div指令产生的除法溢出
(2)单步执行
(3)执行int指令
(4)执行into指令
中断处理程序
cpu收到中断信息后,应该转去执行该中断信息的处理程序。就要将cs:ip指向它的入口。
cpu的设计者必须在中断信息和其处理程序的入口地址之间建立某种联系,使得cpu根据中断信息找到要执行的处理程序。
中断信息中包含标识中断源的类型码,根据cpu的设计,中断类型码的作用就是用来定位中断处理程序。
中断向量表
cpu用8位的中断类型码通过中断向量表找到相应的中断处理程序的入口地址。
中断向量表就是中断处理程序入口地址的列表。
中断向量表在内存中存放,对于8086pc,中断向量表指定放在内存地址0处(内存0000:0000-0000:03ff的1024个单元中)一个表项存放一个中断向量,占2个字(4字节),1024个内存单元存放了256个表项。
中断过程
8086cpu在收到中断信息后,所引发的中断过程。
- (从中断信息中)取得中断类型码;
- 标志寄存器的值入栈(在中断过程中要改变标志寄存器的值,所以先将其保存在栈中)
- 设置标志寄存器的第8位tf和第9位if为0
- cs的内容入栈
- ip的内容入栈
- 从内存地址为中断类型码* 4和中断类型码* 4+2的两个字节中读取中断处理程序设置的ip和cs
中断处理程序iret指令
中断处理程序的编写方式和子程序比较相似:
- 保存到用到的寄存器
- 处理中断
- 恢复用到的寄存器
- 用iret指令返回
iret指令的功能用汇编语法描述为:
pop ip
pop cs
popf
iret通常和硬件自动完成的中断过程配合,iret指令执行后,cpu回到执行中断前处继续执行
单步中断
基本上,cpu执行完一条指令后,如果检测到标志寄存器tf为1,则产生单步中断。单步中断类型码为1。
cpu提供单步中断功能的原因就是,为单步跟踪程序的执行过程提供了实现机制。