GNU 汇编。“Movq %rsp, %rax” 被组装成一个只有 3 字节的二进制文件。不是 8 字节。为什么?[复制]

GNU assembly. "Movq %rsp, %rax" is assembled into a only 3 byte binary. Not 8 byte.Why? [duplicate]

提问人:Towa 提问时间:7/31/2023 最后编辑:Peter CordesTowa 更新时间:8/1/2023 访问量:45

问:

我在 64 位处理器上使用 GNU 汇编。我汇编了以下代码

movq %rsp,%rax

之后,我对二进制代码进行 objdump。
我得到了以下内容:

401000: 48 89 e0                mov    %rsp,%rax

我以为我会看到一个 8 字节的二进制指令,因为我的处理器是 64 位,但只有 3 字节的指令。

当 CPU 解码 3 字节指令时,它是否会被填充到 8 字节指令中?
例如:

48 49 e0  ->  48 49 e0 00 00 00 00 00
汇编 x86-64 CPU-体系结构 ATT 机器代码

评论

5赞 fuz 7/31/2023
指令长度和字宽没有关系。x86 指令的长度从 1 到 15 个字节不等。
3赞 Erik Eidt 7/31/2023
处理器之所以成为 64 位处理器,是因为它通常具有 64 位宽的寄存器,以及可以在一条指令中操作 64 位数量的机器码指令(如移动或复制、添加、比较、取消引用等)。机器码指令的宽度是一个正交问题。

答: 暂无答案