折腾了一个下午,终于找到了办法。
首先要理解的是保护模式下的寻址方式,是段基址:偏移,一般情况会先把段基址载入基址寄存器。
其次是,当你在实模式转入保护模式时,为了方便起见,我们的第一个代码段是从 0开始。
这样一来,保护模式下的 偏移地址 = 段基址*10h + 实模式下变量的偏移
例如
_szTest db ‘T’
szTest equ _szTest + BaseOfLoaderPhyAddr
在保护模式下读出 szTest 就可以 mov ax, [szTest] 这样了。