A.D.Danilecki, Poznan, Polska
Politechnika Poznanska, Wydzial Informatyki i Zarzadzania
W tej chwili adanilecki _malpa_ cs.put.poznan.pl
Z wykorzystaniem wielu listow z uwagami od wielu autorow
Krótki wstęp do programowania z wykorzystaniem inline assemblera x86


Makra


As posiada rowniez mozliwosc tworzenia prostych makr. Tworzy je sie bardzo latwo: definicje makra rozpoczynamy od slowka .MACRO, podajac nastepnie nazwe i parametry, i wreszcie konczymy slowkiem .ENDM. Oba te slowa powinny byc w osobnych liniach.

Pierwszy przyklad makra:

.MACRO _RDTSC reg
xorl %eax,%eax
cpuid
rdtsc
mov %eax, \reg
.ENDM

Jak widac z podanego przykladu, do parametrow makra odwolujemy sie poprzedzajac jego nazwe ukosnikiem "\".

Parametry moga byc rozdzielane przecinkami lub spacjami. Istnieje mozliwosc zdefiniowania parametrow domyslnych za pomoca konstrukcji parametr=wartosc. Pominiecie parametru (np _MOJEMAKRO ,2 - pierwszy argument domyslny, drugi rowny dwa) - spowoduje nadanie mu w obrebie makra wartosci domyslnej.

Drugi przyklad makra:

.MACRO _RDTSC reg=ebx
xorl %eax,%eax
cpuid
rdtsc
mov %eax, \reg
.ENDM
wywolanie _RDTSC spowoduje przypisanie \reg wartosci %ebx

Z makra mozna wyskoczyc za pomoca .exitm.
Przydatna konstrukcja jest dyrektywa .if warunek .elseif warunek .else .endif. Warunek jest prawdziwy, jesli jest wiekszy od zera. Makra moga byc zagniezdzone. Na moich komputerach maksymalna liczba zagniezdzen jaka udalo mi sie uzyskac to 100:

Trzeci przyklad makra:

.MACRO _NESTED cnt
.if \cnt
xorl %eax,%eax
_NESTED \cnt-1
.else
.exitm
.endif
.ENDM

Dyrektywy moga byc pisane zarowno wielkimi jak i malymi literami.