I\'m tring to convert a simple assembly code of MS to use with gcc, the MS assembly I try to convert is right below. I have two int
variables, number
Try something like:
#include <stdio.h>
#include <stdlib.h>
int main(int ac,char**av)
{
int n=ac>1?atoi(av[1]):42;
asm ("movl %0, %%eax \n\t"
"neg %%eax \n\t"
"movl %%eax, %0 \n\t" : "+r" (n)::"eax");
printf("%d\n",n);
}
The issues are:
instr src,dst
And to make it even more efficient:
asm("neg %0" : "+r" (n) ::); // works as well
You can't do it like that because you're overwriting registers without telling the compiler about it. Also, the %
is a special character, similar to printf.
It's also better to put all the instructions in one asm
or else the compiler might do something unexpected in between.
Try this instead:
asm("movl %%eax, %1\n\t"
"neg %%eax\n\t"
"movl %0, %%eax" : "=g" ( _return ) : "g" ( number) : "eax");
There's probably a better way, though:
asm("neg %0": "=a" ( _return ) : "a" ( number));
I don't know why you can't just do (in C):
_return = -number;