30天自制操作系统 DAY6

_load_gdtr:

这个函数用来将指定的段上限(limit)和地址赋值给名为GDTR的48位寄存器。

给GDTR赋值唯一的办法是指定一个内存地址,从指定的地址读取6个字节(48位),然后赋值给GDTR寄存器,完成这一任务的就是LGDT。

该寄存器的低16位(即内存的最初2个字节)是段上限,它等于“GDT的有效字节数-1”。今后我们还会偶尔用到上限这个词,意思都是表示量的大小,一般为“字节数-1”剩下的高32位(即剩余的4个字节),代表GDT的开始地址。

DWORD[ESP+4]里存放段上限(0x0000ffff),DWORD[ESP+8]里存放地址(0x00270000)。若是按字节写出来就成了FF FF 00 00 00 27 00 00

为什么 [ESP +4]会指向FFFF? 按照大小端,不是应该指向0x0000么?

 

直到找到了下面这个图

 

 这个图就可以理解了,但是返回地址是哪里来的呢?

 

posted @ 2017-09-14 14:23  Demoncloud  阅读(146)  评论(0编辑  收藏  举报