x86 汇编语言高位和低位

Ale*_*lex 2 x86 assembly bit

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

给定一个 32 位值,我们可以交换它的高 16 位和低 16 位。例如,给定

0000 0001 0010 0011 0100 0101 0110 0111
Run Code Online (Sandbox Code Playgroud)

我们可以交换它的高16位和低16位来得到该值

0100 0101 0110 0111 0000 0001 0010 0011
Run Code Online (Sandbox Code Playgroud)

我知道 AX 寄存器包含 EAX 的下半部分,但仅此而已。如有帮助,将不胜感激。

Sep*_*and 5

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

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

这是位的编号方式:

0000 0001 0010 0011 0100 0101 0110 0111
^                 ^ ^                 ^ 
|                 | |                 bit 0
|                 | bit 15
|                bit 16
bit 31
Run Code Online (Sandbox Code Playgroud)

的下半部EAX分占用编号为 0 至 15 的位。
的上半部分EAX占用编号为 16 至 31 的位。

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

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

rol eax, 16    ;Rotating to the left
Run Code Online (Sandbox Code Playgroud)

使用以下命令时会出现相同的值:

ror eax, 16    ;Rotating to the right
Run Code Online (Sandbox Code Playgroud)