Assembler: Notacje Intel, AT&T


(fedora24x) #1

Mam pytanko, bowiem składnie Intel wykorzystuje NASM i MASM, a AT&T jest w AS i GCC ? Składnia Intel to np. mov dokąd, co a AT&T mov co, dokąd ? więc na stronie http://informatyka.wroc.pl/node/382 zamiast:

asm(" mov eax, 7; \

       mov i, eax; \

     ");

powinno być:

asm(" mov 7, eax \

       mov eax, i; \

     ");

Ponieważ wspominają że używają GCC a on używa AS czyli składnie AT&T

tak??


(kowi384) #2

I tak i nie, AT&T to nie tylko zamiana argumentów miejscami. Ciężko powiedzieć na bazie jakiej wersji kompilatora i z jakimi paramterami autor to kompiluje, ale zakładając domyślne ustawienia to powinno działać:

 

#include <stdio.h>



int i;

int main(void) 

{

 asm(" mov $0x7, %%eax; \

       mov %%eax, %0; \

       " : "=r" (i));

 

 printf("%i\n", i); //i==7

 return 0;

}

 


(Bartosz Wójcik) #3

Intel syntax jest od dawna w GCC.