我开始学习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/