MegaCraZy6
@MegaCraZy6
Юзерь

Что такое org, и вопросы по нему?

Все на что просил ответ дали читайте ниже!
- org это место ( смещение ) в памяти? ( Решено )
- org от значения org что-то меняется в коде? ( Решено )
- сколько и чего между org 500 org 600,org 700? ( Решено )
- При загрузке с диска,винчестера,дискеты в реальном времени вся доступная ОЗУ память чистая можно использовать? ( Решено )

Делаю мини ОС интересуюсь что да как...
( В ассемблере новичок )
  • Вопрос задан
  • 995 просмотров
Решения вопроса 3
Когда компилятор превращает команды (и данные) в бинарный код, он вычисляет смещения команд и данных от начала сегмента. По умолчанию он считает, что блок загружается в самое начало сегмента и начинает счет с 0.
Например, если первая команда занимает 3 байта, вторая - 2, третья - 4, то смещение первых четырех в сегменте кода будет [0, 3, 5, 9] соответственно.
Директива ORG увеличивает этот виртуальный счетчик на то значение. которое указано в ней.
Самый простой пример: для COM-файлов сегмент кода загружается в ОЗУ не со смещения 0, а со смещения 256 от начала сегмента, выделенного программе. Соответственно, при написании COM-файла, нужно сегмент кода предварять ORG 256, чтобы он понимал, что позиции команд (из примера выше) в сегменте при запуске программы будут - [256, 259, 261, 265].
Ответ написан
Комментировать
@nirvimel
По первым пунктам уже ответили.

сколько и чего между org 500 org 600,org 700?

Если это сегмент кода .TEXT или инициализированных данных .DATA, то транслятор генерирует нули или 0x90 (т.е. NOP) в соответствующем месте бинарника, который ляжет в память по этим адресам.
Если это сегмент .BSS (неинициализированные данные), то это просто некое место в памяти, куда не загружается ничего при загрузке программы.
Если это обычный исполнимый файл под ОС (например *.EXE), то за содержимое этой области отвечает ОС. Linux, например, выдает всегда очищенные страницы (заполненные нулем). Windows тоже.
Если это сам загрузчик ОС, то перед его загрузкой никто почистить память не может, поэтому он должен делать это сам.

При загрузке с диска, винчестера, дискеты в реальном времени вся доступная ОЗУ память чистая можно использовать?

В реальном режиме x86 адресное пространство в пределах (единственно доступного) первого мегабайта строго разграничено и используется для множества различных структур данных BIOS, для проброса доступа к видеопамяти, к ROM самого BIOS и других железяк.

Сейчас сходу не найду ссылку на подробную карту адресного пространства в реальном режиме.
Для начала можно глянуть сюда.
Тут поподробнее.
Как видно, доступное для ОС пространство лежит от 0070:0000 до A000:0000.
Ответ написан
Комментировать
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
- сколько и чего между org 500 org 600,org 700?

По 100 байт пустого места.

- При загрузке с диска,винчестера,дискеты в реальном времени вся доступная ОЗУ память чистая можно использовать?

Нет, не вся. Детали.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы