我想要eflags值,但是我收到了错误
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");
这是我的代码:
public function __construct()
{
$this->billingAddresses = new ArrayCollection();
}
我也试过用movb啊但同样的错误。
答案 0 :(得分:3)
您的代码中有两个错误:
$
前缀表示立即。 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
通常是错误的,但在这里很难避免,因为你无法轻易告诉gcc期望c0
ah
注册。