Получает ли постоянное выражение постоянное значение?
Да. Непосредственный операнд создает постоянное значение в коде операции. Например, mov eax, 3
создает код операции, состоящий из нескольких байтов - согласно x32/x64 Intel Manual.
B0+ rb ib MOV r8, imm8 OI Valid Valid Move imm8 to r8.
B8+ rw iw MOV r16, imm16 OI Valid Valid Move imm16 to r16.
B8+ rd id MOV r32, imm32 OI Valid Valid Move imm32 to r32.
C6 /0 ib MOV r/m8, imm8 MI Valid Valid Move imm8 to r/m8.
C7 /0 iw MOV r/m16, imm16 MI Valid Valid Move imm16 to r/m16.
C7 /0 id MOV r/m32, imm32 MI Valid Valid Move imm32 to r/m32.
Например: для 32-битного режима следующие байтовые комбинации представляют действительные коды операций. Это означает, что для mov destination, 3
существует несколько возможностей:
b0 03 mov al, 3
66 b8 03 00 mov ax, 3
b8 03 00 00 00 mov eax, 3
c6 45 00 03 mov byte ptr [xxx], 3
66 c7 45 00 03 00 mov word ptr [xxx], 3
c7 45 00 03 00 00 00 mov dword ptr [xxx], 3
B0h и B представляют собой один байты коды операции, C6H и C представляют собой двухбайтовый код операции, состоящую из кода операции байт и Mod/RM-байты кодирования адресации режим - в этом случае indirect addressing
. 66h
обозначает Operand-Size Prefix
, указывающий, что следующая инструкция использует 16-разрядный (внеполосный) операнд - исключение по сравнению с обычным операндом 32-разрядного режима. 8-разрядный операнд кодируется другим кодом операции. Остальные байты представляют собой кодировку 8/16/32-битного значения 3
.
Имеет ли встроенное значение, что оно будет заменено каким-либо другим значением после прохождения процесса сборки?
No Assembl (y | ing) - это процесс включения постоянных значений в результирующие коды операций (seqeunces of bytes). В некотором смысле, все является встроенным в сборку.
Не могли бы вы рассказать мне, что такое фактическое значение «inline» в контексте языков ассемблера? –
@MaxHerrmann Я не видел слова inline, используемые в руководствах по сборке, но здесь это просто означает «постоянное значение». Обратите внимание, что 'mov eax, 1 + 2' и' mov eax, 1 + 1 + 1' и другие варианты постоянных выражений, возвращающих 3, собираются в просто «mov eax, 3'. То естьэто выражения, которые оцениваются ассемблером. –