【发布时间】:2018-09-16 17:05:03
【问题描述】:
我是第一次学习计算机系统的学生(w/ Computer Systems: A Programmer's Perspective)。我们正在组装,我开始了解 x86_64 的命令后缀,例如使用 leaq 如下:
leaq (%rsp, %rdx), %rax
但是,我无法理解为 pop 使用后缀。例如,使用相同的逻辑,对我来说,我们将 popl 用于以下内容是有意义的:
popl %edi
但是,在网上的文字和其他例子中,我只是看到:
pop %edi
有什么区别? popl 是否有效?只是寻找更多的见解。有什么帮助,谢谢。
【问题讨论】:
-
无效。请参阅指令集参考以查看允许的形式。如果可以从参数中推断出大小,则可以省略后缀。
lea (%rsp, %rdx), %rax(不带后缀)有效且是同一条指令。popq %rdi和pop %rdi也是有效的。pop %edi在 64 位代码、后缀或无后缀中根本无效。
标签: gcc assembly x86-64 inline-assembly