Используя сборку amd64, наилучшим способом сбрасывать верхние 32 бита 64-разрядного регистра, например, нулевых битов rax, которые не покрыты eax? Похоже, что я не могу и весь регистр против 64-битной константы.нулевые верхние 32 бита 64-битного регистра
5
A
ответ
8
movl %eax, %eax
или mov eax, eax
, в зависимости от используемого ассемблера.
см. Архитектура Intel® 64 и IA-32 - Руководство разработчика программного обеспечения, Volume 1, 3.4.1.1: Регистры общего назначения в 64-битном режиме.
32-разрядные операнды генерируют 32-разрядный результат с нулевым расширением до 64-разрядного результата в регистре общего назначения .
Я должен также добавить, в отношении к @ HansPassant замечании: 7.3.1.7:
Инструкция MOVSXD работает на 64-битных данных. Он под знаком - расширяет 32-битное значение до 64 бит.
не eax нижние 32 бита rax? см. здесь: http://stackoverflow.com/questions/8580838/how-to-move-two-32-bit-registers-in-to-one-64-bit –
Если eax - знаковое значение, то вы хотите 1s, если значение отрицательное, а не 0s. MOVSXD. –