x86 NASM 'org'指令含义



我将本教程作为使用NASM进行x86引导加载程序/操作系统开发的第一次尝试:

http://joelgompert.com/OS/TableOfContents.htm

我正在学习第4课,它使我的引导加载程序打印"Hello, world"字符串。我不理解org指令(指令?)的含义。

据我所知,org定义了正在执行的程序加载到内存中的位置。当在程序中使用任何类型的标签或相对地址时,这是必需的。

假设我在程序中定义了一个带有标签的字符串:

szHello db 'Hello, world!', 0

然后我试着像这样引用那个标签(只有相关的片段):

org 0x7c00
xor ax, ax
mov ds, 0
...
mov si, szHello
lodsb
...
int 0x10 ; Print first character of szHello

我的问题是,为什么那不等于这个?:

org 0
mov ds, 0x7c00
...
mov si, szHello
lodsb
...
int 0x10

当我运行第一个示例时,我的字符串显示正确。第二个示例不起作用。

如果这个问题对我来说是一个概念上的问题,我也非常感谢相关文档的指点。

org定义了所讨论的程序期望加载到内存中的位置。不是它实际被加载的位置——这是由加载者控制的——而是它期望被加载的位置。

0000:7C00不等于7c0000。段部分以段落计算,而不是字节。试试这个:

mov ax, 0x7c0 
mov ds, ax

最新更新