[OS64位][003] org 0x7c00 有什么用?

2019-04-27  本文已影响0人  AkuRinbu

学习笔记

使用教材(配书源码以及使用方法)
《一个64位操作系统的设计与实现》
http://www.ituring.com.cn/book/2450
https://www.jianshu.com/p/28f9713a9171

参考资料

Setting segment registers after ORG instruction

https://stackoverflow.com/questions/54045259/setting-segment-registers-after-org-instruction

org 指令的作用其实是 影响标号label的值

如果你的代码中有一个标号叫做bootmsg,它的值是samll offset:

  • org 0的时候,这个标号的值被解读成 0x0000+samll offset
  • org 0x7c00时,这个标号的值被解读成0x7c00+samll offset

org 到底影响了谁?

为什么org后面要加个0x7c00

阮一峰:为什么主引导记录的内存地址是0x7C00?
http://www.ruanyifeng.com/blog/2015/09/0x7c00.html

容易混淆的概念

[举例]下面这就是没有使用label也没有使用org指令的主引导扇区代码
https://www.jianshu.com/p/207aaf0f986b

为什么需要 org 指令?

[1] 要么直接修改标号的绝对地址,在使用标号赋值的时候,强制加上0x7c00,比如 mov ax,bootmsg 写成 mov ax,bootmsg+0x7C00
[2] 要么,在代码开头使用org 0x7C00,代码还是写mov ax ,bootmsg 但是它会悄悄地把bootmsg解读成 bootmsg+0x7C00

如何验证猜想

https://www.jianshu.com/p/559a45fe23f3

上一篇下一篇

猜你喜欢

热点阅读