我正在开发一个用x86 Intel Assembly编写的操作系统,我注意到一些指南,比如OS Dev wiki,在他们的示例中一开始就有mov ax, 07c0
。然后,根据我对编写操作系统的研究,我发现了关于这个主题的YouTube视频,它将org 0x7C00
放在了引导加载程序文件的开头。
我的问题是:两者之间有什么区别吗?如果他们是,那是更好的选择,究竟是什么差异?
答案 0 :(得分:1)
[se]两个之间有什么区别吗?
要理解这两者之间的区别,您必须了解8086程序集的segment:offset
模型:
在REAL模式下段值表示值16(dec)= 10(十六进制)乘以偏移值的值。
因此,段0000
和偏移量0x7c00
的值表示内存中与段07C0
相同的位置,偏移量0000
= 07C0h * 10h = 7C00h。有关详细说明,请参阅here at OSDev:RealMode。
因此整体0000:7C00
与07C0:0000
相同。
使用ORG
指令设置(内存)部分的开头。
这两者有什么区别吗?
是。这两者之间的区别在于段寄存器和地址寄存器的设置。如果以特定方式设置段寄存器,则必须以相关方式设置地址/偏移寄存器。
如果他们是,哪个是更好的选择,那究竟是什么差异?
没有“更好”的选择。这只是一个设计决策,只有在您进入保护模式并设置 GDT 之后才有意义。