Есть ли разница между «org 0x7c00» и «mov ax, 07c0h»? - PullRequest
0 голосов
/ 09 мая 2018

Я работаю над операционной системой, написанной на x86 Intel Assembly, и заметил, что некоторые руководства, такие как OS Dev wiki, имеют mov ax, 07c0 в самом начале в своих примерах. Затем, из моих исследований по написанию операционной системы, я обнаружил, например, видео YouTube на эту тему, в которых org 0x7C00 находится в начале файла загрузчика.

Мой вопрос: есть ли разница между ними? И если это так, какой выбор лучше, и в чем именно заключаются различия?

1 Ответ

0 голосов
/ 09 мая 2018

Есть ли разница между [se] два?

Чтобы понять разницу между этими двумя, вы должны понимать модель segment:offset сборки 8086:

В РЕАЛЬНОМ режиме значение сегмента обозначаетзначение 16 (dec) = 10 (hex) умноженное на значение смещения.

Таким образом, значение сегмента 0000 и смещения 0x7c00 обозначает ту же позицию в памяти, что и сегмент 07C0 и смещение0000 = 07C0h * 10h = 7C00h.См. здесь, в OSDev: RealMode для подробного объяснения.

Таким образом, в целом 0000:7C00 совпадает с 07C0:0000.

С директивой ORG, которую вы делаетеустановить начало раздела (памяти).

Есть ли разница между ними?

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

И если они есть, то какой выбор лучше, и что именночем отличаются?

«лучшего» выбора нет.Это всего лишь проектное решение, которое имеет значение, пока вы не войдете в Защищенный режим и не настроите GDT .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...