Обнулить верхние 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 бит.

Другие вопросы по тегам