我正在尝试将 MS 的简单汇编代码转换为与 gcc 一起使用,我尝试转换的 MS 汇编代码就在下面。我有两个int
变量,number
and _return
:
mov eax, number
neg eax
return, eax
而且,我已经尝试过这个:
asm("movl %eax, %0" :: "g" ( number));
asm("neg %eax");
asm("movl %0, %%eax" : "=g" ( return ));
但是,编译器给了我这个错误:
main.c:17:9: 错误:'asm' 无效:% 字母后缺少操作数
错误在哪里,以及如何修复此错误?
谢谢
你不能这样做,因为你在不告诉编译器的情况下覆盖了寄存器。另外,%
是一个特殊字符,类似于printf。
最好将所有说明放在一个中asm
否则编译器might中间做一些意想不到的事情。
试试这个:
asm("movl %%eax, %1\n\t"
"neg %%eax\n\t"
"movl %0, %%eax" : "=g" ( _return ) : "g" ( number) : "eax");
不过,可能有更好的方法:
asm("neg %0": "=a" ( _return ) : "a" ( number));
我不知道为什么你不能这样做(用 C 语言):
_return = -number;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)