簡體   English   中英

“ mov”的操作數類型不匹配

[英]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啊,但是同樣的錯誤。

您的代碼中有兩個錯誤:

  1. $前綴表示立即數。 mov %ax, $0嘗試將ax移到立即數0 ,這是荒謬的。 也許您是想寫%0來表示c0
  2. 如果我們將mov %%ax, $0替換為mov %%ax, %0 ,則第二個問題是c0是一個int ,因此%0被某些32位寄存器替換了,所以得到的內容類似於mov %ax, %ecx 這是不對的,太為兩個操作數以mov必須具有相同的大小。 您可以通過將c0unsigned char並將mov %%ax, %0更改為mov %%ah, %0來解決此問題。

無論如何, mov聯匯編中使用mov通常是錯誤的,但是在這里很難避免,因為您不能輕易告訴gcc在ah寄存器中期望c0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM