[英]operand type mismatch for `mov'
我需要eflags值,但出現錯誤
operand type mismatch for `mov'
這是我的代碼:
int a0 = 0, b0 = 1; short c0;
// asm("cmp %1, %2\npushf\npop ax\nmov ax, $0": "=r" (c0): "r" (a0), "r" (b0));
asm("cmp %1, %2\n lahf\n mov %%ax, $0": "=r" (c0): "r" (a0), "r" (b0): "ax");
我也試過用movb啊,但是同樣的錯誤。
您的代碼中有兩個錯誤:
$
前綴表示立即數。 mov %ax, $0
嘗試將ax
移到立即數0
,這是荒謬的。 也許您是想寫%0
來表示c0
? mov %%ax, $0
替換為mov %%ax, %0
,則第二個問題是c0
是一個int
,因此%0
被某些32位寄存器替換了,所以得到的內容類似於mov %ax, %ecx
。 這是不對的,太為兩個操作數以mov
必須具有相同的大小。 您可以通過將c0
為unsigned char
並將mov %%ax, %0
更改為mov %%ah, %0
來解決此問題。 無論如何, mov
聯匯編中使用mov
通常是錯誤的,但是在這里很難避免,因為您不能輕易告訴gcc在ah
寄存器中期望c0
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.