问题描述
我在调试或理解gas
中的以下错误时遇到困难:
movq $0x4461766964,-8(%rbp) # "David" in hex
mov $SYS_STDOUT,%edi
lea -8(%rbp),%rsi
mov $5,%edx
mov $SYS_WRITE,%eax
syscall
但是我得到了以下错误:
file.s:33:错误:“ movq”的操作数大小不匹配
我认为movq
命令将把8个字节从-8(%rbp)移到-0(%rbp),因此生成的内存看起来像:
%rbp-8 -7 -6 -5 -4 -3 -2 -1
D a v i d
在这里我似乎缺少什么或误解了?注意,movl
似乎在这里起作用,它只是将数字截断为4个字节,movl $0x4461766964,-8(%rbp)
:
$ ./file
# file.s: Assembler messages:
# file.s:33: Warning: 293692926308 shortened to 1635150180
# diva
当然,这在逐字节添加时会起作用:
movb $0x44,-8(%rbp)
movb $0x61,-7(%rbp)
movb $0x76,-6(%rbp)
movb $0x69,-5(%rbp)
movb $0x64,-4(%rbp)
或者这个:
movl $0x44617669,-8(%rbp)
movl $0x64,-4(%rbp)
那为什么movq
在这里的行为如此不同?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)