Есть 2 языка. Первый - это ассемблер, где у вас может быть строка символов, например "mov rax, 1". Второй - машинный язык, где у вас будет набор байтов.
Эти языки связаны, но разные. Например, инструкция mov
на ассемблере - это фактически несколько разных кодов операций на машинном языке (один для перемещения байтов в / из регистров общего назначения, один для перемещения слов / dwords / qwords в регистры общего назначения, один для перемещения dwords / qwords управлять регистрами, один для перемещения dwords / qwords в регистры отладки и т. д.). Ассемблер использует инструкцию и ее операнды для выбора соответствующего кода операции (например, если вы сделаете mov dr6,eax
, тогда ассемблер выберет код операции для перемещения dwords / qwords для отладки регистров, потому что ни один из других кодов операции не подходит).
Точно так же операнды могут быть разными. Например, для языка ассемблера константа 1
имеет тип «целое число» и не имеет никакого размера (ее размер подразумевается от того, как / где она использовалась); но в машинном коде непосредственный операнд должен быть каким-то образом закодирован, и размер кодирования будет зависеть от того, какой код операции (и какие префиксы) используются для mov
.
Например, если mov rax,1
преобразуется в байты 0x48, 0xC7, 0xC0, 0x01, 0x00, 0x00, 0x00; тогда вы можете сказать, что операндом является «64 бита, закодированные в 4 байта (с использованием расширения знака)»; или вы могли бы сказать, что операнд является 32-битным, закодированным в 4 байта (и что инструкция только перемещает 32 бита в RAX
, а затем знак распространяется на верхние 32 бита RAX вместо того, чтобы что-либо перемещать в них). Хотя эти вещи звучат по-разному (и хотя большинство людей сказали бы, что последнее «более правильно»), поведение точно такое же, и единственными различиями являются поверхностные различия в том, как машинный код (другой язык, который не является языком ассемблера) описано. На ассемблере 1
по-прежнему является (подразумеваемым из контекста) 64-битным операндом, независимо от того, что происходит на машинном языке.