2011-12-20 8 views
6

Diciamo che voglio mettere due registri a 32 bit EAX come word a 32 bit bassi e EDX come word a 32 bit in RAX. Ho trovare un modo:Come spostare due registri a 32 bit in uno a 64 bit?

shl rdx, 32 
    or rax, rdx 

Questo metodo funziona solo se siamo sicuri che i bit da 32 a 61 di RAX sono 0. Se non siamo shure che, quanto dobbiamo prima chiarire la parola alta a 32 bit , ad esempio:

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

È la via più breve?

Esiste un comando asm x86-64 singolo che esegue questa operazione?

+1

AFAIK non c'è niente di più breve. Se il registro di destinazione è un regsiter xmm, è possibile utilizzare due istruzioni 'pinsd' ed evitare le istruzioni di cancellazione. – hirschhornsalz

+0

@drhirsch: Ho controllato quasi tutta la documentazione Intel e non ho trovato nulla di utile. :) –

+0

Sì, potresti essere in grado di risparmiare un po 'di spazio con un "xor eax, eax" per cancellarlo, ma sembra il più corto possibile. –

risposta

12

forse questo è un po 'meglio:

shl  rax,32 
shrd rax,rdx,32 

non si assume che alti dwords sono pari a zero.

+1

Questa era la combinazione che stavo cercando. Sapevo che doveva essere un 'shrd' o' shld' – hirschhornsalz

Problemi correlati