我想要 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
内联汇编通常是错误的,但在这里很难避免,因为您不能轻易告诉 gccc0
在ah
寄存器中期望。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句