Asembler łączenie rejestrów

0

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ć?

0

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.

0

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.

0

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).

1 użytkowników online, w tym zalogowanych: 0, gości: 1