Обнулить верхние 32 бита 64-битного регистра
Используя сборку amd64, каков наилучший способ обнулить 32 старших бита 64-битного регистра, например, обнулить биты rax, которые не покрыты eax? Похоже, что я не могу и весь регистр против 64-битной константы.
1 ответ
Решение
movl %eax, %eax
или же mov eax, eax
в зависимости от используемого ассемблера.
см.: Архитектура Intel® 64 и IA-32- Руководство разработчика программного обеспечения, том 1, 3.4.1.1: Регистры общего назначения в 64-битном режиме.
32-битные операнды генерируют 32-битный результат, расширенный от нуля до 64-битного результата в целевом регистре назначения.
Я также должен добавить, что касается комментария @HansPassant: 7.3.1.7:
Инструкция MOVSXD работает с 64-битными данными. Он расширяет 32-битное значение до 64 бит.