Я следую этому руководству в качестве первого набега на разработку загрузчика/ОС для x86 с использованием NASM:
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
Когда я запускаю первый пример, моя строка отображается правильно. Второй пример не работает.
Указатели на соответствующую документацию также будут высоко оценены, если проблема является концептуальной проблемой с моей стороны.