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?
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
@drhirsch: Ho controllato quasi tutta la documentazione Intel e non ho trovato nulla di utile. :) –
Sì, potresti essere in grado di risparmiare un po 'di spazio con un "xor eax, eax" per cancellarlo, ma sembra il più corto possibile. –