Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gcc inline-与x27;的操作数类型不匹配;cmp&x27;_Gcc_X86_Inline Assembly_Att - Fatal编程技术网

gcc inline-与x27;的操作数类型不匹配;cmp&x27;

gcc inline-与x27;的操作数类型不匹配;cmp&x27;,gcc,x86,inline-assembly,att,Gcc,X86,Inline Assembly,Att,我得到以下错误: 汇编程序消息: 错误:“cmp”的操作数类型不匹配 我的代码中唯一的cmp是: "cmpl %eax, $15\n\t" 我不明白这有什么错——我有一个寄存器和一个立即数,应该隐式符号扩展到32位。我也有同样的问题,但在我的例子中,错误是 cmp $0xFFFFFFFFFFFFFFFF, %rdx 解决办法是 movq $0xFFFFFFFFFFFFFFFF, %rcx 首先,然后 cmp %rcx, %rdx (afaik,对于较大的数字,cmp需要两个寄存器,而不是

我得到以下错误:

汇编程序消息:
错误:“cmp”的操作数类型不匹配

我的代码中唯一的cmp是:

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

我不明白这有什么错——我有一个寄存器和一个立即数,应该隐式符号扩展到32位。

我也有同样的问题,但在我的例子中,错误是

cmp $0xFFFFFFFFFFFFFFFF, %rdx
解决办法是

movq $0xFFFFFFFFFFFFFFFF, %rcx
首先,然后

cmp %rcx, %rdx
(afaik,对于较大的数字,cmp需要两个寄存器,而不是常量和寄存器)

根据3.2指令(A-L)

CMP EAX,imm32

也就是说,在

或在:

恰恰相反:)



cmp
没有从立即数中减去reg/mem的表单。如果要检查除相等以外的内容,请使用相反的分支/cmov条件。

使用att语法(gcc的默认值)时,常量必须是第一个参数:
“cmpl$15,%eax\n\t”
。英特尔语法将常量放在第二个参数中。如果所有asm都是英特尔格式,请使用-masm=intel.Ah,谢谢。即使我不明白为什么。不,那是另一个问题。OP的指令是反向的;CMP仅支持
CMP$imm,reg/mem
,不支持
CMP reg/mem,$imm
。在您的情况下,
cmp
(以及除
mov
以外的所有指令)只支持32位符号扩展立即数,而不支持64位。
cmp eax, 15D
cmpl $15, %eax