我得到以下错误:
汇编消息:
错误:操作数类型" CMP"的不匹配
我代码中唯一的CMP是:
"cmpl %eax, $15nt"
我没有得到什么问题 - 我有一个寄存器和一个直接值,该值应隐式签名扩展到32位。
根据官方的英特尔ISA参考 3.2指令(a-l)
cmp eax, inm32
这是在英特尔语法中的意思
cmp eax, 15D
或at at at& t语法:
cmpl $15, %eax
相反:)
cmp
没有立即从中减去reg/mem 的表格。相反,如果要检查平等以外的其他内容,请使用相对的分支/CMOV条件。
我遇到了同样的问题,但是在我的情况下,错误是
cmp $0xFFFFFFFFFFFFFFFF, %rdx
解决方案是做
movq $0xFFFFFFFFFFFFFFFF, %rcx
首先,然后
cmp %rcx, %rdx
(afaik,对于更大的数字CMP需要两个寄存器,而不是const和注册)