[065][x86汇编语言]第17章 中断门、陷阱门描述符格式, IDTR 中断描述符表寄存器格式,错误代码格式

一、实模式,端口读写相关,复习

《汇编语言(第三版)》

  • [066][汇编语言]端口读写 in out CMOS RAM 检测点14.1
    https://www.jianshu.com/p/3be286c1b4a8
  • [069][汇编语言]外中断:CPU 端口(芯片) 外设
    https://www.jianshu.com/p/84f165899625
    [065][x86汇编语言]第17章 中断门、陷阱门描述符格式, IDTR 中断描述符表寄存器格式,错误代码格式_第1张图片
    CPU 端口(芯片) 外设.png

二、学习笔记

《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
    [065][x86汇编语言]第17章 中断门、陷阱门描述符格式, IDTR 中断描述符表寄存器格式,错误代码格式_第2张图片
    中断类型:硬件中断、内部中断 、软中断
  • [016][x86汇编语言]习题9-2:采用周期性中断,500ms(1秒2次中断),动态时钟
    https://www.jianshu.com/p/38d504f1aa12

四、格式相关,复习回顾

[019][x86汇编语言]段描述符、段选择子格式(检测点11.1)

https://www.jianshu.com/p/0ec493a0287c

[065][x86汇编语言]第17章 中断门、陷阱门描述符格式, IDTR 中断描述符表寄存器格式,错误代码格式_第3张图片
存储器段描述符格式(Segment Descriptor)

[065][x86汇编语言]第17章 中断门、陷阱门描述符格式, IDTR 中断描述符表寄存器格式,错误代码格式_第4张图片
段选择子格式(Segment Selector)

[030][x86汇编语言]第十四章 调用门描述符的格式

https://www.jianshu.com/p/268fa4fd21a0

[065][x86汇编语言]第17章 中断门、陷阱门描述符格式, IDTR 中断描述符表寄存器格式,错误代码格式_第5张图片
调用门描述符的格式

[038][x86汇编语言]第十五章 中断描述符表 任务门描述符格式

https://www.jianshu.com/p/2464542aef84

[065][x86汇编语言]第17章 中断门、陷阱门描述符格式, IDTR 中断描述符表寄存器格式,错误代码格式_第6张图片
任务门(Task-Gate)描述符格式

五、中断门与陷阱门

中断门描述符格式

[065][x86汇编语言]第17章 中断门、陷阱门描述符格式, IDTR 中断描述符表寄存器格式,错误代码格式_第7张图片
中断门描述符的格式.png

陷阱门描述符格式

[065][x86汇编语言]第17章 中断门、陷阱门描述符格式, IDTR 中断描述符表寄存器格式,错误代码格式_第8张图片
陷阱门描述符的格式.png

IDTR与GDTR

  • IDTR(Interrupt Descriptor Table Register):位于处理器内部的48位中断描述符表寄存器,保存中断描述符表(IVT)在内存中的线性基地址界限
    [065][x86汇编语言]第17章 中断门、陷阱门描述符格式, IDTR 中断描述符表寄存器格式,错误代码格式_第9张图片
    中断描述符表寄存器.png

保护模式下的中断处理过程示意图

[065][x86汇编语言]第17章 中断门、陷阱门描述符格式, IDTR 中断描述符表寄存器格式,错误代码格式_第10张图片
图17-3 保护模式下的中断处理过程示意图.png

《x86汇编语言:从实模式到保护模式》 第345页

  • 1、中断门和陷阱门中有目标代码段描述符的选择子,以及段内偏移量
  • 2、根据选择子的TI位,处理器访问GDT或者LDT,取出目标代码段的描述符;
  • 3、从目标代码段的描述符中取得目标代码段所在基地址,再同中断门和陷阱门描述符中的段内偏移量相加,就得到了中断处理程序的32位线性地址;
  • 4、如果没有开启分页功能,该线性地址就是物理地址;否则,送页部件转换成物理地址.

控制转移到中断/异常处理程序时的两种栈使用情况

[065][x86汇编语言]第17章 中断门、陷阱门描述符格式, IDTR 中断描述符表寄存器格式,错误代码格式_第11张图片
图17-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

六、错误代码

错误代码格式

[065][x86汇编语言]第17章 中断门、陷阱门描述符格式, IDTR 中断描述符表寄存器格式,错误代码格式_第12张图片
错误代码的格式.png
  • EXT:表示异常是由外部事件引发(external event)的,EXT=1,表示异常是由NMI、硬件中断等引发的;

  • IDTIDT=1,表示段选择子的索引部分(错误代码的位15~3)是指向中断描述符表IDT的;IDT=1,表示段选择子的索引部分(错误代码的位15~3)指向GDT或者LDT;

  • TIIDT=0时有效;TI=0,指向GDT;TI=1,指向LDT;

  • 段选择子的索引部分:用于指示GDT/LDT内的段描述符,或者IDT内的门描述符,它就是我们平时所用的段选择子的高13位;

错误代码的弹出

  • 当通过iret/ireted指令从中断处理程序返回时,处理器并不会自动弹出错误代码,对那些压入过错误代码的过程来说,在执行iret/ireted指令前,需要手动从栈中移除错误代码;

不会压入错误代码的情况

  • 外部异常(通过处理器引脚触发);
  • 软中断指令int n引发的异常;

你可能感兴趣的:([065][x86汇编语言]第17章 中断门、陷阱门描述符格式, IDTR 中断描述符表寄存器格式,错误代码格式)