assembly - x86 汇编语言高位和低位

标签 assembly x86 bit

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

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

0000 0001 0010 0011 0100 0101 0110 0111

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

0100 0101 0110 0111 0000 0001 0010 0011

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

最佳答案

I know that the AX register contains the lower half of EAX but thats about it.

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

关于assembly - x86 汇编语言高位和低位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41534163/

相关文章:

c - 从 C 中的 unsigned int 末尾获取 'n' 二进制位?位掩码?

c - 在 C 中设置和清除位

python - 在 Python 中生成一个 n 长度的位列表

assembly - 引用分别加载到内存另一部分的代码/数据的符号

c++ - 在汇编代码中寻找不必要的缓冲区拷贝

assembly - x86 指令集路线图

.net - 针对同一 VS2012 项目中的 x86 和 x64 程序集;引用

assembly - 让调用堆栈向上增长会使缓冲区溢出更安全吗?

string - 连接寄存器中的字符串并打印它们(CPUID)

assembly - 如何理解这段 AT&T i386 汇编代码片段?