Что делает Инструкция по сборке ORG? - PullRequest
39 голосов
/ 04 августа 2010

Может ли кто-нибудь дать мне исчерпывающее описание директивы ORG?
Когда и почему он используется в приложениях, написанных на ассемблере?

Использование Nasm на x86 или AMD64.

Ответы [ 5 ]

34 голосов
/ 04 августа 2010

ORG используется для установки ассемблера счетчик местоположения .Это может или не может преобразовать в адрес загрузки во время ссылки.Он может использоваться для определения абсолютных адресов, например, при определении чего-то вроде векторов прерываний, которые могут потребоваться по фиксированному адресу, или его можно использовать для введения заполнения или генерации определенного выравнивания для следующего кода.

8 голосов
/ 08 апреля 2015

ORG является просто указанием того, куда поместить следующий фрагмент кода / данных, относящихся к текущему сегменту.

Бесполезно использовать его для фиксированных адресов, поскольку конечный адрес зависит от сегмента, который не известен во время сборки.

3 голосов
/ 15 февраля 2016
      During the assemble time ORG directive resets the MLC (memory location counter) to the address specified in the ORG directive.

Синтаксис: ORG примечание: может быть абсолютным значением без знака или любым символом или символом +.

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

место
0000A4 00 89 TAB DC 256AL1 (* - TAB)
0001A4 00000194 90 ORG TAB + 240
000194 F0F1F2F3F4F5F6F7 91 DC C'1234567 '

Здесь выше символ TAB назначен адресу MLC 0A4. в следующей инструкции ORG устанавливает для MLC адрес адреса TAB + 240, который равен x'194 '(~ x'A4' + 240 в десятичном виде). в основном, это настройка - установка таблицы длиной 256 и из 240-го местоположения для хранения некоторых символьных констант, чтобы я мог использовать ее для инструкции TR.

0 голосов
/ 06 января 2018

ORG устанавливает местоположение, откуда ваша программа должна загружаться.При загрузке этой программы в другом месте будет указывать неправильный адрес памяти и возникнут проблемы.

0 голосов
/ 27 мая 2012

это место в памяти, куда вы хотите загрузить двоичную программу, если таковая имеется.

Я предпочитаю не использовать org, а просто выдать прямой код операции / значение аппаратному обеспечению. вы всегда можете хранить значения в топоре и передавать между bx, cx, dx.

Я пишу свой собственный ассемблер для вывода кода операции / значения, не беспокоясь о том, чтобы сначала отправить его в память перед выполнением,

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

...