Как рассчитать эффективный адрес? - PullRequest
2 голосов
/ 18 октября 2011

предположим, что у вас есть эта инструкция в сборке Nasm

MOV EAX, [label1] ; label1 is at location 0x00D5A360

как рассчитать эффективный адрес, если он находится в расположении выше

Я точно знаю, что режим адресации - Прямой.

Ответы [ 2 ]

6 голосов
/ 18 октября 2011

In nasm label относится к адресу метки, в то время как [label] извлекает сохраненное там значение. Так что вы можете сделать:

    mov eax, label1      ; eax <- 0x00D5A360

Или используйте универсальный lea (эффективный адрес загрузки):

    lea eax, [label1]    ; eax <- 0x00D5A360

Или вы спрашиваете, КАК ассемблер определяет эффективный адрес? Потому что это обрабатывается в комбинации ассемблером, опционально компоновщиком и загрузчиком. Обычно ваш код компилируется в формат промежуточного объекта с перемещениями , а компоновщик или загрузчик будет обрабатывать вычисление эффективного адреса label1 для вас.

0 голосов
/ 18 октября 2011

Из «Руководства разработчика программного обеспечения для архитектуры Intel 64 и IA-32: Том 2»:

LEA <em>r16</em>, <em>m</em> ; Store effective address for <em>m</em> in register <em>r16</em>.
LEA <em>r32</em>, <em>m</em> ; Store effective address for <em>m</em> in register <em>r32</em>.
LEA <em>r64</em>, <em>m</em> ; Store effective address for <em>m</em> in register <em>r64</em>.

Вычисляет эффективный адрес второго операнда (операнд-источник) и сохраняет его в первом операнде (операнд-адресат). Операндом-источником является адрес памяти (часть смещения), заданная одним из режимов адресации процессора; целевой операнд является регистром общего назначения.

Примеры:

; indirect addressing mode
MOV EBX, label1   ; copy the address of label1 to EBX
MOV [EBX], 100    ; store 100 at the location pointed to by EBX

; using LEA
LEA EBX, [label1] ; stores the effective address of label1 in EBX
MOV [EBX], 100    ; store 100 at the location pointed to by EBX

Разница между ними заключается в том, что LEA вычисляет эффективный адрес во время выполнения, тогда как версия MOV разрешает эффективный адрес во время сборки.

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