Składnia AT&T

W opisie składni asemblerowej AT&T bedziemy używali porównań ze składnią Intela, być może niektórym już znaną. W każdym razie zakładam, że czytelnik miał już do czynienia z jakimś asemblerem.

Ogólne zasady

Podstawową zasadą wspólną dla wszystkich komend dwuargumentowych w składni AT&T jest umieszczanie źródła po lewej, a celu po prawej stronie - czyli odwrotnie niż w Intel-u. Tak więc umieszczenie liczby 1000 w rejestrze eax (właściwie %eax) będzie wyglądać następująco:

movl $1000, %eax

Możemy od razu dokonać kilku spostrzeżeń: nazwy rejestrów poprzedzane są znakiem '%', stałe poprzedzane są '$', rozmiar wykonywanej operacji oznacza się odpowiednią literą w nazwie. Litery b w l oznaczają kolejno bajt, word - dwa bajty, long - cztery bajty.

W składni Intela liczba 32 bitowa oznaczana jes przez d (double word). W AT&T używa się oznaczenia l, zaś d oznacza liczbę 64 bitową zapisaną w dwóch rozszerzonych rejestrach (%edx:%eax)

Stałe w systemie szestnastkowym poprzedza sie ciągiem $0x np. $0x1a (co oznacza dziesiętne 26).

Procesor 80386 potrafi konwertować liczby umieszczone w rejestrze %eax do innych formatów:

Umieszczenie litery oznaczającej rozmiar operacji nie jest niezbędne, jednak jej brak może prowadzić do błędów - asembler as używany przez gcc próbuje rozpoznać rozmiar po nazwie używanego rejestru, podczas gdy skłądnia AT&T mówi, że brak oznaczenia powinien być interpretowany jako l.

Pełną listę instrukcji procesora Intel 80386 można znależć w internecie, np. na stronie www.iro.umontreal.ca/~feeley/cours/ift224/doc