假设我正在创建一个名为swap(int)
使用int = 0xAABBCCDD
调用,
预期回报0xDDCCBBAA
。我以何种方式访问汇编中的内存来逐位控制它,而不是一次控制4位。如果不可能,我可以以什么方式交换价值?
谢谢
答案 0 :(得分:1)
出于这个答案的目的,我将假设x86或x86_64并且你真的在寻找汇编答案。此外,由于我第一次误读了这个问题,我为你提供了两个答案......:)
那个上下文,没有指令允许你直接处理几个位,虽然有各种寄存器名称可以让你得到像单个字节一样小的东西。否则,位操作将需要AND和OR与屏蔽。
但是,对于您的具体情况,还有另一种选择。考虑一下:
mov eax, 0xAABBCCDD
我们现在在eAX中拥有您的价值。如果要反转该寄存器中字节的顺序,BSWAP
指令适合您:
bswap eax
这将导致EAX包含0xDDCCBBAA,这似乎是您所要求的。
另一方面,如果要切换位以将0xAABB移动到较低的两个字节,可以执行以下操作:
ror eax, 16
这会将32位值旋转到右16位。换句话说,EAX现在将包含0xCCDDAABB,这是你的目标。