![](/img/trans.png)
[英]C embedded assembly error: ‘asm’ operand has impossible constraints
[英]assembly code embedded in c giving a improper operand type error for cmp
我制作了一個程序,該程序應檢查數字是正數,負數還是零。 當我嘗試編譯代碼時,對於第28行(即cmp操作碼),它給出了不正確的操作數類型錯誤。 我格式化錯誤,還是這里還有其他問題?
#include <stdio.h>
int input;
int output;
int main (void)
{
scanf("%d", &input);
__asm
{
jmp start
negative:
mov ebx, -1
ret
nuetral:
mov ebx, 0
ret
positive:
mov ebx, 1
ret
start:
mov eax, input
mov ebx, other
cmp 0, eax
jl negative
je neutral
jg positive
mov output, ebx
}
printf("%d\n", output);
}
cmp
指令的第一個操作數必須是寄存器或存儲器位置,而不是立即數。 您需要使用cmp eax, 0
而不是cmp eax, 0
。 這也將與您的條件跳轉一致(如果eax
為負,則jl
會跳轉,等等)。
您可能會使Intel匯編語法(您使用過的)與AT&T語法混淆,在AT&T語法中,操作數的順序相反。
另外,您對ret
的使用是不正確的: ret
用於從函數返回,但是這里沒有函數調用。 您需要的是mov output, ebx
行的jmp
。
您不能將立即數作為cmp
的第一個操作數。 您需要執行cmp eax, 0
而不是cmp eax, 0
。
用於將寄存器與常量進行比較的cmp語法要求常量排在第二位。 所以cmp eax, 0
應該沒問題。
有效組合為:
cmp reg, reg
cmp reg, mem
cmp mem, reg
cmp reg, const
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.