一、实模式,端口读写相关,复习
《汇编语言(第三版)》
- [066][汇编语言]端口读写 in out CMOS RAM 检测点14.1
https://www.jianshu.com/p/3be286c1b4a8- [069][汇编语言]外中断:CPU 端口(芯片) 外设
https://www.jianshu.com/p/84f165899625
二、学习笔记
《x86汇编语言:从实模式到保护模式》
https://www.jianshu.com/p/d481cb547e9f
三、中断相关,回顾复习
- [014][x86汇编语言]采用更新周期结束中断,动态时钟(Bochs 调试: 在中断向量表IVT中,查看新的0x70号中断程序的入口地址)
https://www.jianshu.com/p/0667a55bafce
- [015][x86汇编语言]习题9-1:对8259芯片编程,屏蔽除RTC外的其他所有中断,观察字符“@”的变化速度,动态时钟
https://www.jianshu.com/p/cec44e9d9bc7
- [016][x86汇编语言]习题9-2:采用周期性中断,500ms(1秒2次中断),动态时钟
https://www.jianshu.com/p/38d504f1aa12
四、格式相关,复习回顾
[019][x86汇编语言]段描述符、段选择子格式(检测点11.1)
[030][x86汇编语言]第十四章 调用门描述符的格式
[038][x86汇编语言]第十五章 中断描述符表 任务门描述符格式
五、中断门与陷阱门
中断门描述符格式
陷阱门描述符格式
IDTR与GDTR
-
IDTR(Interrupt Descriptor Table Register):位于处理器内部的
48位
中断描述符表寄存器,保存中断描述符表(IVT)在内存中的线性基地址和界限;
保护模式下的中断处理过程示意图
《x86汇编语言:从实模式到保护模式》 第345页
- 1、中断门和陷阱门中有目标代码段描述符的选择子,以及段内偏移量;
- 2、根据选择子的TI位,处理器访问GDT或者LDT,取出目标代码段的描述符;
- 3、从目标代码段的描述符中取得目标代码段所在基地址,再同中断门和陷阱门描述符中的段内偏移量相加,就得到了中断处理程序的32位线性地址;
- 4、如果没有开启分页功能,该线性地址就是物理地址;否则,送页部件转换成物理地址.
控制转移到中断/异常处理程序时的两种栈使用情况
《x86汇编语言:从实模式到保护模式》 第346页
中断门
-
进入中断处理程序时,EFLAGS寄存器的IF位被处理器自动清零
(if=0,屏蔽中断)
,以禁止嵌套的中断; - 返回时,将从栈中恢复EFLAGS寄存器的原始状态;
陷阱门
- 陷阱中断的优先级较低,通过陷阱门,进入中断处理程序时,EFLAGS寄存器的IF位不变,以允许其他中断优先处理;
EFLAGS寄存器 的 IF位
- 仅影响硬件中断,对NMI、异常和int n形式的软件中断不起作用;
- 标志寄存器位相关,复习参见
- [017][x86汇编语言]检测点9.1 :观察 cli、 sti 指令执行 后标志位IF的变化
https://www.jianshu.com/p/68399f293bae- [055][汇编语言]DF 标志符与 rep movsb 、rep movsw
https://www.jianshu.com/p/1b17ad3ad51f- [050][汇编语言]flag标志寄存器
https://www.jianshu.com/p/f694df2da5b4
六、错误代码
错误代码格式
EXT:表示异常是由外部事件引发(external event)的,
EXT=1
,表示异常是由NMI、硬件中断等引发的;IDT:
IDT=1
,表示段选择子的索引部分(错误代码的位15~3)是指向中断描述符表IDT的;IDT=1
,表示段选择子的索引部分(错误代码的位15~3)指向GDT或者LDT;TI :
IDT=0
时有效;TI=0
,指向GDT;TI=1
,指向LDT;段选择子的索引部分:用于指示GDT/LDT内的段描述符,或者IDT内的门描述符,它就是我们平时所用的段选择子的高13位;
错误代码的弹出
- 当通过
iret/ireted
指令从中断处理程序返回时,处理器并不会自动弹出错误代码,对那些压入过错误代码的过程来说,在执行iret/ireted
指令前,需要手动从栈中移除错误代码;
不会压入错误代码的情况
- 外部异常(通过处理器引脚触发);
- 软中断指令
int n
引发的异常;