我正在按照这篇教程作为第一次尝试使用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
存在呢? - tdenniston