Значение директивы 'org' x86 NASM

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

Когда я запускаю первый пример, моя строка отображается правильно. Второй пример не работает.

Указатели на соответствующую документацию также были бы очень признательны, если проблема является концептуальной с моей стороны.

13
задан tdenniston 15 November 2011 в 16:52
поделиться