2015-02-10 3 views
-3

Привет, я хочу поменять 16-битное значение. В другом вопросе кто-то предложил следующее решение. Но это работает только с Immidiate значений,Как поменять значение 16 бит на ассемблере x86?

mov eax, 0AABBCCDDh 
xchg ah, al 
ror eax, 16 
xchg ah, al. 

Но это работает только с Immidiate значений. Есть ли решение, где я могу поменять 16-битное значение, которое находится в регистре?

Edit: С свопа я имею в виду 0xAFBA -> 0xBAFA

+3

Что вы имеете в виду swap - изменить endianness, т.е. переключить высокий и младший байт? –

+1

Значение находится в регистре после его загрузки. Поэтому у вас на самом деле меньше работы. Я не понимаю, чего вы пытаетесь достичь. –

+0

Существует 'bswap' за то, что вы делаете выше. –

ответ

1

С свопа я имею в виду 0xAFBA -> 0xBAFA

mov ax, 0xAFBA 
xchg al,ah 
ror al,4 

AX теперь держит 0xBAFA

+0

Нет, AX будет содержать 0xBAAF. (Но OP, возможно, неправильно понял.) – usr2564301

+0

@Jongware Зачем вам игнорировать 'ror al, 4'? –

+0

Извините, я хотел указать, что ОП получил свой собственный * предназначенный * ответ неправильный. Поэтому, в то время как ваш ответ, э-э, буквально отвечает *, что задал ОП *, вопрос должен быть уточнен. (В принципе, я согласен, что ваш 'xchg' был именно тем, что он искал.) – usr2564301

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