【发布时间】:2020-08-24 14:00:42
【问题描述】:
常见的汇编代码行格式为
xorq, %rdx, %rdx
此操作的一个用途是将寄存器 %rd 设置为零,利用 x^x = 0 的事实。在 C 中,它与设置 x = 0 相同。
表达这个操作的另一种更直接的方式是
movq $0, %rdx
我的问题是,我们如何计算编码这两种不同实现所需的字节数?我相信第一个答案是 3 个字节,而第二个需要 7 个字节。
【问题讨论】:
-
"我们如何计算编码所需的字节数 [...]" 查看参考手册。
-
尝试汇编这两条指令,然后使用反汇编程序检查编码。请注意,通常使用
xor %edx, %edx代替较短的编码。 -
@ThomasJager x86 参考手册不易阅读。它假设您已经知道很多东西,如果 OP 已经知道,他们可能不会问这个问题。
-
相关:How many ways to set a register to zero? 提到了其中大部分的长度。 What is the best way to set a register to zero in x86 assembly: xor, mov or and? 提到 qword xor 是 3 个字节,包括无用的 REX 前缀。
标签: assembly x86-64 machine-code