x86 NASM'org'指令含义

时间:2011-11-15 16:52:50

标签: assembly x86 nasm bootloader

我正在关注本教程,首次尝试使用NASM进行x86的bootloader / OS开发:

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

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

如果问题是我的概念问题,也会非常感谢相关文档的指示。

2 个答案:

答案 0 :(得分:16)

org定义将EXPECTS要加载到内存中的程序。不是它实际加载的地方 - 由加载的任何人控制 - 但是它希望加载的地方。

答案 1 :(得分:10)

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

mov ax, 0x7c0 
mov ds, ax