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

时间:2015-05-12 20:10:05

标签: gcc inline-assembly

我收到以下错误:

  

汇编信息:
  错误:`cmp'

的操作数类型不匹配

我的代码中唯一的cmp是:

"cmpl %eax, $15\n\t"

我不知道这有什么问题 - 我有一个寄存器和一个立即值,应该隐式地将其扩展到32位。

2 个答案:

答案 0 :(得分:1)

根据Official Intel ISA Reference 3.2指令(A-L)

CMP EAX, imm32

这在Intel Syntax中是指

cmp eax, 15D

或在AT&T Syntax中:

cmpl $15, %eax

相反:)


cmp的形式不能从立即数中减去reg / mem 。相反,如果您想检查除相等性以外的其他内容,请使用相反的branch / cmov条件。

答案 1 :(得分:0)

我遇到了同样的问题,但就我而言,错误在于

cmp $0xFFFFFFFFFFFFFFFF, %rdx

解决办法是

movq $0xFFFFFFFFFFFFFFFF, %rcx

首先,然后

cmp %rcx, %rdx

(afaik,对于更大的数字,cmp需要两个寄存器,而不是const和寄存器)