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