GCC 内联 - 'cmp'的操作数类型不匹配



我得到以下错误:

汇编消息:
错误:操作数类型" 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和注册)

相关内容

最新更新