1.内核与应用程序之间的调用
这篇谈论的主要是8086的几个简单的门,分别为中断门,调用门,任务门等。
中断门,故是保护模式下的中断关系,主要是设置中断向量与加载向量地址。这样就能在保护模式下复位中断程序。
中断门有两个重要的内容,一个是idtr,一个是idt表项。
idtr如下图:
![](https://img.haomeiwen.com/i3549048/f5efa71236ce8e52.png)
从这里可以看到,idtr寄存器内容是48位的,低16位表示的idt的限长,也就是中断描述符表的长度(len-1,因为从0开始的),高32位表示idt的基地址
另外一项就是idt的内容了,如下图所示:
![](https://img.haomeiwen.com/i3549048/bd2c40a6911f6f00.png)
中断门就要举一个例子了。入口点其实就是表示函数,段选择符一般是代码段,然后就是TYPE=1110b(14=e),所以可以假设一个描述符=0x00008e00 0008(代码段) fun(函数地址0xxxxx)
接着讲解一下调用门,调用门与中断门有一点区别是eflags的if标志,另外就是描述符中的TYPE字段需要修改为TYPE=15.调用门描述符如下:
![](https://img.haomeiwen.com/i3549048/349cf881114de684.png)
调用门一般使用int 0x80进入,当然是自己写的操作系统,则可以自定义。
任务门,则比较特殊,基本的寄存器和ldt与gdt类似,不过一般不使用它,我就不写了。
对应的,可以使用另外一种描述符方式,将其描述符放在gdt描述符中,它是属于系统段的。
这里面会涉及到TR,TSS等内容。
系统段描述符对应图如下:
![](https://img.haomeiwen.com/i3549048/cc1bf4123d10611f.png)
TYPE字段对应含义如下:
![](https://img.haomeiwen.com/i3549048/4c53533a139b3302.png)
tss包含的内容如下:
![](https://img.haomeiwen.com/i3549048/a51e35e698aae440.png)
tss描述符如下:
![](https://img.haomeiwen.com/i3549048/b1b07fa6783ca987.png)
另外要留意一下段描述符:
![](https://img.haomeiwen.com/i3549048/f250be8ff64b0447.png)
另外则是局部描述符表与全局描述符表:
![](https://img.haomeiwen.com/i3549048/a2e323d318e28b4c.png)
还有一个很重要的点是特权级发生变化前后的寄存器内容处理:
![](https://img.haomeiwen.com/i3549048/0e9d4025414b05a3.png)
网友评论