2013-03-05 2 views
4

На языке ассемблера x86 есть ли способ получить верхнюю половину регистра EAX? Я знаю, что регистр AX уже содержит нижнюю половину регистра EAX, но я пока не знаю, как получить верхнюю половину.Получить верхнюю половину регистра EAX

Я знаю, что mov bx, ax сдвинет нижнюю половину eax в bx, но я хочу знать, как переместить верхнюю половину eax в bx, а также.

+4

Просто сдвиньте его на 16 бит. – Mysticial

+0

Либо сделайте 'shr eax, 16', за которым следует переход. (который уничтожает 'eax'), или' mov ebx, eax' и 'shr ebx, 16' (который нули в верхней половине' ebx'), я не уверен, что если операции на 'bx' будут автоматически обнулять верхняя половина «ebx» в любом случае. Так что, если это так, вы могли бы пойти с последним методом. – Mysticial

+3

'ror eax, 16'' mov bx, ax'' ror eax, 16', если вы хотите оставить eax/верхняя часть ebx нетронутой – user786653

ответ

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

В этом случае, восстановится ли eax до его первоначального значения? –

+2

Да, было бы. 'rol' и' ror' циклически поворачивают биты. См. Документацию. –

+0

или просто 'shr eax, 16' ?? – AminM

2

Я хотел бы сделать это следующим образом:

mov ebx,eax 
shr ebx, 16 

EBX теперь содержит верхние 16 бит е

7

Если вы не возражаете, смещая исходное значение bx (низкий 16 битам ebx) до высоких 16 битых ebx, вам нужна только 1 инструкция:

shld ebx,eax,16 

Это не изменено eax.

Смежные вопросы