我按照本教程作为第一次尝试使用 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
定义相关程序期望加载到内存中的位置。不是它实际加载的位置(由加载者控制),而是它期望加载的位置。
关于assembly - x86 NASM 'org' 指令含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8140016/