gdt_base+0x7c00为什么是0x7e00,而不是0x7e00+0x7c00

kyq_hello 2017-07-25 07:34:07
x86汇编语言:从实模式到保护模式书籍第191页gdt_base+0x7c00为什么是0x7e00,而不是0x7e00+0x7c00,
gdt_base的线性地址是gdt_base dd 0x00007e00 ;转换成逻辑地址应该是0x0000:0x7e00,谢谢。
...全文
477 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
fgdfdgfgfd 2019-11-19
  • 打赏
  • 举报
回复
原书代码是不是这么写的:


...
mov ax,[cs:gdt_base+0x7c00]
...
gdt_base dd 0x00007e00
...


完整的语句要加个中括号,那此处[...:gdt_base+...]就不是代表“0x7e00”这个值,而是存储这个值的偏移地址。
这个偏移地址再加上“主引导程序的实际加载位置是逻辑地址 0x0000:0x7c00 即:[cs: ... +0x7c00] 这一部分,cs=0x0000”。
两地址相加得到的新地址套上中括号,就是存储在此新地址内的值:0x7e00
Areslee 2017-08-06
  • 打赏
  • 举报
回复
没看过这本书,不过从7c00这个值来看 这部分代码应该是引导扇区吧? 理论上说此时的GDT base应该是0,加上7c00就是引导代码在内存中的首地址了

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧