【发布时间】:2016-09-27 08:46:39
【问题描述】:
我有一个关于在一些基本操作中使用寄存器的小问题。实际上,我已经查看了在 XOR 或 AND 等操作期间生成的汇编代码,这些代码很容易理解。实际上,如果我们考虑 a = b & c,这将分为 3 个步骤:
- b 被移动到 %rax
- %rax = %rax + c
- %rax 被移动到一个
请注意,a、b 和 c 是无符号长变量。如果将加法替换为 XOR 或 OR,则此转换也可用。无论如何,我检查过轮班是否也是这种情况,我发现一个奇怪的事情:事实上,a = b
- b 被移动到 %rax
- c 被移动到 %rcx
- %rax = %rax
- %rax 被移动到一个
我不太确定我是否真的了解第二步和第三步。我想这是因为 %rax (b) 不能移动超过 63 位,否则结果显然是 0。似乎 %cl 是一个 8 位寄存器,所以我认为这是一种快速的方法只选择有用的位而不是 %rcx 中的 64 位。对吗?
谢谢
【问题讨论】:
标签: assembly x86 x86-64 bit-shift