x86汇编语言的高位和低位

时间:2017-01-08 15:10:23

标签: assembly x86 bits

我开始学习x86汇编语言问题,这让我很困惑,它如下:

给定32位值,我们可以交换其高16位和低16位。例如,给定

0000 0001 0010 0011 0100 0101 0110 0111

我们可以交换其高16位和低16位来获得值

0100 0101 0110 0111 0000 0001 0010 0011

我知道AX寄存器包含EAX的下半部分,但就此而言。我将不胜感激。

2 个答案:

答案 0 :(得分:3)

  

我知道AX寄存器包含EAX的下半部分,但就此而言。

EAX寄存器是一个32位寄存器,因此可以保存32位值。 它的位编号从0到31。

这是位的编号方式:

0000 0001 0010 0011 0100 0101 0110 0111
^                 ^ ^                 ^ 
|                 | |                 bit 0
|                 | bit 15
|                bit 16
bit 31

EAX的下半部分占用从0到15编号的位 EAX的上半部分占用了从16到31的位。

AX寄存器是一个16位寄存器,位于较大EAX寄存器的下半部分。其位数从0到15编号 EAX寄存器的上半部分没有单独的名称!

交换EAX的高16位和低16位需要使用以下内容将内容旋转16次:

rol eax, 16    ;Rotating to the left

使用时会显示相同的值:

ror eax, 16    ;Rotating to the right

答案 1 :(得分:0)

我可能不明白您的问题,但是我能理解的是您想交换EAX寄存器的高16位和低16位,对吗? 您可以在Assembly lang中使用PTR运算符。虽然PTR主要在我们要处理32位寄存器的特定部分时使用,但我们可以使用它来移动寄存器中的值,然后对其进行处理。 您可以像这样使用ptr:

**.data**
myDouble DWORD 012345678h

**.code**
Mov AX, WORD PTR myValue         ; Loads 5678
Mov AX, WORD PTR myValue + 1     ; Loads 3456