1625-5 王子昂 总结《2017年4月27日》 【连续第208天总结】
A. 汇编语言 第十二章 100%
B. CPU的中断过程为:
取得中断类型码
flag的值入栈
设置flag的第八位TF和第九位IF的值为0
CS的内容入栈
IP的内容入栈
从中断向量表中读取中断处理程序的入口地址,设置IP和CS
返回中断的指令是iret,与ret类似,从栈中读出IP、CS的值送回,不同点在于flag的值最后也从栈中送回
自己编写中断处理程序时,由于需要把程序代码以字节形式送入特定位置,因此需要使用rep movab(从ds:si送至es:di处)。而数据长度则由两个标号相减,让编译器算出长度:mov cx,offset do0end-offset do0
中断编码0的处理程序为显示div overflow,这个字符串应该与程序一同被送入特定位置(不会被覆盖、能够长期留置),否则使用data数据段,当安装程序结束后data段即被释放,此字符串将无法获得
单步中断:CPU在执行完一条指令之后,如果检测到flag的TF位为1,则产生单步中断,引发中断过程
单步中断的中断类型码为1
注意:由于当TF位为1时,CPU就将执行单步中断。因此为了避免无限循环,进入单步中断处理程序之前需要把TF位设置成0。
响应中断的特殊情况:
一般情况下,CPU在执行完当前指令后,如果检测到中断信息,就响应中断。
可是有一种特殊情况:SS:SP的赋值。如果向SS传入栈的段地址后中断,而未向SP传入栈的偏移地址,那么将产生与预想情况不同的错误。因此CPU判定,在执行完设置ss的指令后不响应中断。
C. 明日计划
汇编语言 第十三章