Załóżmy, że mam liczbę w rejestrach EDX:EAX. Jak sprawić, żeby cała była w rejestrze RAX? I w drugą stronę: mam liczbę w rejestrze RAX i chcę ją rozbić na rejestry EDX i EAX. Jak to zrobić?
Nie piszę w ASM, ale nasuwa się, żeby robić MOV i przesunięcie bitowe, tylko na x86 zdaje się, że MOV do EAX czyści górne bity RAX itd.
Edit. Można zrobić MOV EDX do RAX, przesunąć i zrobić AND z EAX, może jest coś mniej koślawego.
W drugą stronę łatwiej, można zrobić MOV RAX to RDX i przesunąć zawartość w RDX, żeby pozbyć się górnych bitów.
Załóżmy, że mam liczbę w rejestrach EDX:EAX. Jak sprawić, żeby cała była w rejestrze RAX?
shl rax, 32
shrd rax, rdx, 32
mam liczbę w rejestrze RAX i chcę ją rozbić na rejestry EDX i EAX
mov rdx, rax
shr rdx, 32
Nie sprawdzane.
W drugim przypadku zostają śmieci w górnej połowie rax, które prawdopodobnie nie zaszkodzą, ale to zależy od tego co dalej z tym zrobisz.
Jeśli potrzebujesz je wyzerować dodaj mov eax, eax
.
Uzupełniając odpowiedź kolegi:
Jak masz EDX i EAX, to możesz w RDX (albo jakimś innym 64-bitowym rejestrze) uzyskać wartość EDX przesuniętą bitowo.
Potem wystaczy zrobić logiczne OR na RAX i tym RDX (oczywiście musisz upewnić się, że górne bity RAX są puste).