如何解决无法调整说明
我想知道为什么可以推断出一些组装说明,而另一些则不能。例如,在下面的程序中,我有:
.globl main
main:
push %rbp
mov %rsp,%rbp
mov $8,-8(%rbp)
mov -8(%rbp),%rax
pop %rbp
ret
我收到以下错误:
stack.s:5:错误:没有给出指令助记符后缀,也没有寄存器操作数;无法调整指令大小
但是,如果我更改:将第5行更改为:
movq $8,-8(%rbp)
它运行没有错误。其他所有操作如何推断大小,而该特定指令却无法推断出大小?
解决方法
提示在消息中:“没有寄存器操作数”。
所有其他指令都有一个寄存器作为操作数,汇编器知道寄存器的大小。因此,例如,mov %rax,-8(%rbp)
必须是四字移动(8字节),因为%rax
是64位寄存器。同样,mov %eax,-8(%rbp)
,mov %ax,-8(%rbp)
和mov %al,-8(%rbp)
将是长字/字/字节移动(4/2/1字节)。因此,这些说明的大小后缀是可选的。
但是立即数$8
没有固有的大小,因此,除非您告诉它,否则汇编器无法知道所需的大小。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。