我们以一小段汇编代码片段为例:
mov eax, [var1]
var1 dd 0
对于这个代码片段,如果我们在开始加上了org 0x7c00然后用NASM编译的话,NASM会生成如下代码:
00007c04: ( ): mov eax, dword ptr ds:0x7c08 ; 66a1087c
如果不加org 0x7c00然后用NASM编译的话,NASM会生成如下代码:
00007c04: ( ): mov eax, dword ptr ds:0×8 ; 66a10800
看到差别了吧,NASM会为所有的内存地址的偏移部分,加上org指定的值。
因此摆在你面前的选择有二:要不把段基地址设定成0,通过org调整内存偏移;要不自己手动设置期望的段基地址(例如:0x7C0),皆可。
所以我觉得不一定要在MBR的起始处写上org 07C00H。