我收到以下错误:
汇编信息:
的操作数类型不匹配
错误:`cmp'
我的代码中唯一的cmp是:
"cmpl %eax, $15\n\t"
我不知道这有什么问题 - 我有一个寄存器和一个立即值,应该隐式地将其扩展到32位。
答案 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和寄存器)