или более или менее псевдоним для rdx, когда на этой архитектуре?
$ebx
является псевдонимом младших 32 бит полного регистра $rbx
(существует нет фактический ebx
регистр).
ebx автоматически конвертирует в rdx в 64-битной архитектуре?
Нет, но запись в EBX с нуля распространяется в RBX. (Не RDX, я предполагаю, что B против D - опечатка). Почему инструкции x86-64 для 32-битных регистров обнуляют верхнюю часть полного 64-битного регистра?
Так что да, mov $5, %ebx
делает точно то же самое, что и mov $5, %rbx
, но более эффективно (меньше байтов машинного кода). Некоторые ассемблеры (не GAS) даже оптимизируют один для другого.
Например:
mov $-1, %rbx # RBX = 0xFFFFFFFFFFFFFFFF
mov %ebx, %ecx # RCX = 0x00000000FFFFFFFF
dec %ebx # RBX = 0x00000000FFFFFFFE
Пишет ebx "неправильно"
Зависит (см. Ниже). Обычно это оптимизация, если вам не нужно работать с 64-битными величинами. Преимущества использования 32-битных регистров / инструкций в x86-64
Есть ли существенная разница между ними?
Да. Из следующих инструкций по сборке будет скомпилирована только одна:
movq $0x12345678ABCD, $rbx
movq $0x12345678ABCD, $ebx