我正在执行 x86 汇编代码,并且不断收到此错误:“cmp 的操作数类型不匹配”
它出现的代码行是:
cmpb %rdi, $0
在 AT&T 语法(您使用的语法)中,指令有一个尺寸后缀来指示操作数的大小。尺寸后缀为:
b byte 1 bytes
w word 2 bytes
l long 4 bytes
q quad-word 8 bytes
s single 4 bytes
d double 8 bytes
t temporary 10 bytes
例如,cmpb
是指令cmp
指示 1 字节操作数大小。但是,您的代码使用%rdi
作为一个四字(64 位)寄存器的操作数,因此汇编器正确地抱怨这是错误的操作数。
要解决此问题,只需省略尺寸后缀即可;除非所有操作数都是立即数或内存操作数,否则汇编器能够推断它:
cmp %rdi, $0
当然,您也可以显式提供尺寸后缀;在这种情况下,q
如上表所示是适当的:
cmpq %rdi, $0
也就是说,请注意,与大多数指令一样,立即操作数必须是第一个操作数cmpq
:
cmpq $0, %rdi
另一种形式实际上是非法的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)