2013-03-05 66 views
4

在x86彙編語言中,有沒有辦法獲得EAX寄存器的上半部分?我知道AX寄存器已經包含EAX寄存器的下半部分,但我還不知道有什麼方法可以獲得上半部分。獲取EAX寄存器的上半部分

我知道mov bx, ax會的eax下半部進入bx,但我想知道怎樣的eax上半進入bx爲好。

+4

只需將其下移16位即可。 – Mysticial 2013-03-05 17:28:15

+0

或者'shr eax,16'隨後移動。 (這會破壞'eax'),或者做'mov ebx,eax'和'shr ebx,16'(它將'ebx'的上半部分置零)我不確定在'bx'上執行操作是否會自動將無論如何,'ebx'的上半部分。所以如果是這樣的話,你可能會用後一種方法。 – Mysticial 2013-03-05 17:32:04

+3

'ror eax,16'' mov bx,ax''or eax,16'如果你想離開eax/ebx的上半部分 – user786653 2013-03-05 17:44:04

回答

10
rol eax, 16 
mov bx, ax 
rol eax, 16 
+0

在這種情況下,eax是否會恢復到其原始值? – 2013-03-05 18:34:23

+2

是的,會的。 'rol'和'ror'循環地循環移位。請參閱文檔。 – 2013-03-05 18:37:39

+0

或只是'shr eax,16'? – AminM 2014-12-21 09:15:18

2

我會做這樣的:

mov ebx,eax 
shr ebx, 16 

EBX現在包含EAX的前16位

7

如果你不介意的轉移的bx原始值(低16位ebx)到高位16位的ebx,只需要1條指令:

shld ebx,eax,16 

這不會修改eax