' org 0x7c00'之间是否存在差异?和' mov ax,07c0h'?

时间:2018-05-09 18:54:54

标签: assembly x86 intel

我正在开发一个用x86 Intel Assembly编写的操作系统,我注意到一些指南,比如OS Dev wiki,在他们的示例中一开始就有mov ax, 07c0。然后,根据我对编写操作系统的研究,我发现了关于这个主题的YouTube视频,它将org 0x7C00放在了引导加载程序文件的开头。

我的问题是:两者之间有什么区别吗?如果他们是,那是更好的选择,究竟是什么差异?

1 个答案:

答案 0 :(得分:1)

  

[se]两个之间有什么区别吗?

要理解这两者之间的区别,您必须了解8086程序集的segment:offset模型:

在REAL模式下段值表示值16(dec)= 10(十六进制)乘以偏移值的值。

因此,段0000和偏移量0x7c00的值表示内存中与段07C0相同的位置,偏移量0000 = 07C0h * 10h = 7C00h。有关详细说明,请参阅here at OSDev:RealMode

因此整体0000:7C0007C0:0000相同。

使用ORG指令设置(内存)部分的开头。

  

这两者有什么区别吗?

是。这两者之间的区别在于段寄存器和地址寄存器的设置。如果以特定方式设置段寄存器,则必须以相关方式设置地址/偏移寄存器。

  

如果他们是,哪个是更好的选择,那究竟是什么差异?

没有“更好”的选择。这只是一个设计决策,只有在您进入保护模式并设置 GDT 之后才有意义。