Как переместить два 32-битных регистра в один 64-битный? - PullRequest
8 голосов
/ 20 декабря 2011

Допустим, я хочу поместить два 32-битных регистра EAX как старшее 32-битное слово и EDX как старшее 32-битное слово в RAX. Я нашел один способ:

shl   rdx, 32
or    rax, rdx

Этот метод работает, только если мы уверены, что биты от 32 до 61 из RAX равны 0. Если мы не уверены в этом, то сначала мы должны очистить старшее 32-битное слово, например:

mov   eax, eax      //This instruction should clear the high 32 bit word of RAX

Это самый короткий путь?

Существует ли одна инструкция asm x86-64, которая выполняет эту операцию?

1 Ответ

12 голосов
/ 21 декабря 2011

Возможно, это немного лучше:

shl     rax,32
shrd    rax,rdx,32

Не предполагает, что высокие слова равны нулю.

...