Этот вопрос не о инструкции LEA, а не о том, как он работает вообще, это не дубликат. Это примерно Генерация OPCODE для этой инструкции.Генерация кода операции LEA
Что такое номер операнда в коде операции LEA?
Вот мой "привет world.fasm":
программа Ассемблер:
format ELF64 executable at 0000000100000000h ; put image over 32-bit limit
segment readable executable
entry $
mov edx,msg_size ; CPU zero extends 32-bit operation to 64-bit
; we can use less bytes than in case mov rdx,...
lea rsi,[msg]
mov edi,1 ; STDOUT
mov eax,1 ; sys_write
syscall
xor edi,edi ; exit code 0
mov eax,60 ; sys_exit
syscall
segment readable writeable
msg db 'Hello 64-bit world!',0xA
msg_size = $-msg
Hex дамп:
000000b0 ba 14 00 00 00 48 8d 35 15 10 00 00 bf 01 00 00 |.....H.5........|
000000c0 00 b8 01 00 00 00 0f 05 31 ff b8 3c 00 00 00 0f |........1..<....|
000000d0 05 48 65 6c 6c 6f 20 36 34 2d 62 69 74 20 77 6f |.Hello 64-bit wo|
000000e0 72 6c 64 21 0a |rld!.|
000000e5
Как вы можете видеть, инструкция процент lea rsi, [msg]
имеет опкоды: 48 8d 35 15 10 00 00
. Из справки инструкции CPU я могу сказать, что 48
является 64-битным префиксом сортировки, 8d
является кодом LEA
, 35
является регистром назначения rsi
ссылкой, а 15 10 00 00
is ... ??? Что это?
0x15
21
в десятичной форме, и я могу считать пальцем, отслеживающим шестнадцатеричный дамп, что сообщение «Hello world» составляет ровно 21 байт после инструкции LEA rsi, [msg]
. Таким образом, это должен быть относительный адрес, но откуда приходит 10 00 00
? Я бы понял, если это было 15
00 00
, но по какой-то причине 15
00 00
.
К сожалению, ссылки на ЦП не очень полезны, они настолько формальны, и я не могу с ними соглашаться. Они выглядят так:
8D r LEA Gvqp M gen datamov Load Effective Address
Поэтому, пожалуйста, объясните, как LEA
опкод генерируется в этом случае, и если возможно вообще.
означает, что весь двоичный файл 'hello' загружен во все (два) сегмента? Я имею в виду * целый * файл, а не только данные сегмента 'phoff-phoff + phsize'. – exebook
Если вы имеете в виду, как он будет загружен ОС, то я не уверен. Я не рассматривал такие детали для исполняемых файлов ELF. – Michael