képzés

A megkülönböztető jegye FASM egy nagyon rugalmas és hatékony makro támogatás. Ebben a cikkben fogjuk megvitatni alapjait makrók, hiszen ez a téma igen kiterjedt és mindent elmondanak egy cikkben nem fog működni.

Mi az a makró? Makrók - kód generációs sablonokat. Egyszer, hogy hozzon létre egy makrót, fel tudjuk használni, sok helyen a programkódot. Makrók, hogy a folyamat a gyülekezési programozás élvezetesebbé és egyszerű, és a program kódot kivilágosodik. A makrók lehetővé teszi, hogy meghosszabbítja az assembler szintaxis, és még hozzá a saját „csapat”, hogy nem létezik a processzor.

Feldolgozás makrók előfeldolgozó részt FASM. Átalakítás forráskódot végrehajtható kódot FASM két szakaszban végeztük. Az első szakasz - Előre-futás. és a második - a ténylegesen összeszerelésére vagy összeállításában. Az első szakaszban, a számítás numerikus kifejezések helyett állandók és címkeneveket szubsztituált tényleges értéke, ahelyett, hogy a makró a generált kódot. A második szakaszban minden adatot és gépi utasítások alakítjuk a megfelelő bájt, és az eredmény egy futtatható fájlt a kívánt formátumban.

A szintaxis makró létrehozásával

Ahhoz, hogy hozzon létre egy makrót macro irányelvet. Ez az irányelv a következő szintaxist:

Miután az irányelv van írva a neve a makró, és szintén a listában megadott paraméterek (operandusok). A paramétereket a listában kell vesszővel elválasztva. Zárójelek rögzített makró törzsében. By the way, egy rövid makro, írhat az egészet egy sor:

Példaként vegyünk egy egyszerű makro paraméterek nélkül, amelynek célja a befejezése a program:

Ha egy makró nyilvánítják a megfelelő helyen, a program elég írni exit_app. FASM preprocessor automatikusan behelyettesíti a 2 parancsokat a makró törzsében. Hozzon létre egy másik hasznos makro tervezett ilyen műveletek gyakran használják kimeneti sorok:

Most adjuk hozzá ezeket a makrókat, hogy a program «Helló, világ!» Rész 6. A tantárgy:

Ennek eredményeként, a fő program áll, csak két sort, és ez nem olyan, mint szerelő, akkor - macro assembler FASM

A rendszer bővítését parancsok

Makrók lehet használni, hogy növelje a utasításkészletet. Például gyakran a program, hogy visszaállítsa a nyilvántartásokban. Készítünk egy speciális makro erre a célra:

Makrók egy változó számú paramétert

Az is lehetséges, hogy hozzon létre makrókat változó számú paramétert. Ebben az esetben a paraméter neve zárójelbe. Generálni a kódot makró hívásakor ahányszor a paramétereket át neki. Például, akkor írj egy speciális makró parancsok, hogy javítsa a PUSH és POP:

Annak ellenére, hogy a makró neve megegyezik a neve a csapat, a makró törzsében úgy vélik, hogy a nevét, a parancs neve (egyébként várható lett volna egy végtelen ciklus). Ezek a makrók lehetővé teszik, hogy a felhalmozódott és eltávolítjuk a köteg mégegyszer operandusok, ami egyszerűsíti a kódot. Használati példa:

Ennek eredményeként az elpárologtató generál az alábbi kódot:

Érdemes lehet írni a saját készlet makrók és használja őket a programokban. Ebben az esetben célszerű, hogy a makrók egy külön fájlban, és az include direktíva include fájlban. A szintaxis include direktíva nagyon egyszerű:

A fájl elérési útja van megadva aposztrófok és lehet relatív (viszonyított összeállításához fájlok) vagy teljes (egy meghajtó betűjelet vagy root könyvtár a rendszer). Ha az include fájl ugyanabban a mappában, megadhatja csak a fájl nevét. fájl kiterjesztése lehet bármilyen, de általában használ «inc» vagy «asm».

Ha rögzíteni a makró egy külön fájlban „mymacro.inc”, a program «! Helló, világ» még rövidebb is lehet:

Nos lehajtható)
reg = ARG2 + reg3

reg lehet ax, bx, dx, cx. Meg akartam mutatni egy példát a feltételeket.
Testmozgás és így eldöntheti,)
use16
org 100h
makro x reg, arg2, arg3
Ha ARG2 - arg3; Ha ARG2 kevesebb arg3
mov reg, ARG2; az
else if arg2 - arg3; Ha ARG2 hosszabb arg3
mov reg, arg3;
mást; Ha nem több és nem kevesebb, egyenlő
mov reg, arg3;
végén, ha;
>
X cx, 2,5
mov ax, 4C00h
int 21h
Eredmény mov cx 5
Igaz. így lehetetlen, az értékek kell rögzíteni.
És ezek alkalmazzák a design. kódgenerálást, a körülményektől függően.
Feltételek fordító ellenőrzi, és létrehozza a végső összeszerelés kódot.

Feltételek 1 feladott fordításkor. )

A fix érték nem érdekes a 2. és 5. lehet hasonlítani nélkül makró.
Megpróbálja meghatározni a paraméterregiszter vagy változó a memóriában, és ezáltal a helyes kódot.
Például, ha 2 vagy 3 operandusok memóriát, akkor nem lehet összehasonlítani a CMP csapat, akkor szükség van legalább egy helyen a nyilvántartásban.

Én nem találtam, hogyan kell ellenőrizni. az érvelés. egyszerű vagy változó.
2.3 érv nincs jelentősége. és lehet egy íven. megváltoztatni a memóriában vagy közepes érték.
use16
org 100h
makro x arg1, arg2, arg3
ha arg1 az; ha a 16 bites regiszter paraméter 1
mov arg1, arg2; helyett arg1 ébred szubsztituált regiszter neve
cmp arg1, arg3
jc @f
nyomja arg1
@@:
JNC @f;
nyomja arg3
@@:
pop arg1
; else if; léteznie kell egy csekket. változó közvetlenül vagy Val.
mást; A terveknek megfelelően futni, ha 2 preveduscheh menedékházak feltételek
tolja dx
mov dx, arg2
cmp dx, arg3
jc @f
mov [arg1], arg2
@@:
JNC @f;
mov [arg1], arg3
@@:
pop dx
végén, ha
>
X cx, 2,5
x x1,2,5
mov ax, 4C00h
int 21h
x1 dw 1

ha arg1 in - ax, bx, dx, cx, si, di - 1, ha 16-bites regiszter paraméter

Bár van egy érték memória behelyezve a memóriában (
De hogyan kell ellenőrizni. változó vagy. Nem középszerű érték?

Legvalószínűbb, egyáltalán nem.
Abban az esetben, hibakód nem fordul le.
By the way, van 8 bites regiszterek

Van egy nagy különbség a makrók és eljárásokat. És azokat használják különböző célokra.

perrendtartás a programban szereplő csak egyszer.
A makró generálja a kódot a helyét minden elhívták.
Ezért például egy hosszú darab kód megismételjük, hogy egy jobb eljárás, mint a makró.
A makrók nagyobb rugalmasságot biztosít, mint azok a paraméterek, a program fordításkor. Eljárások a munka és megkapja a lehetőségek csak a futás során.

Tehát jó tudni majd, és több

Akkor miért nem vehetik az eljárás?
vagy inkább nem annyira
Valószínűleg jobb megkérdezni, mint megszerzése paraméterek fordításkor előnyös, amikor befejezése megszerzése paramétereket. Azt hiszem, csak másold a teher Proca.
Tehát? =)
Bár azt hiszem, hogy itt vagy perativka töltött hosszú programot makrók vagy nagyobb processzor kezeli az átmenetek az eljárás során, és meg kell választani a fogyasztás RAM és a CPU erőforrásokat.
Javíts ki, ha tévedek.

Azért előnyös, mert kapott paraméterek fordításkor, akkor jobb kódot generál, változtatni a csapat. Az ilyen eljárások nem.

Például, hogy hozzon létre makrókat és proc endp eljárásokat generál különböző parancsokat paraméterektől függően.

>> Például létrehozhat makrókat és proc endp eljárásokat létrehozni a különböző
>> A csapat paraméterektől függően.

nagy kérés, hogy egy további cikket makrók (mellék) úgymond a már jól ismerik az alapvető ismereteket a makro-programozás ... mert a makrók a fő eszköze FASMO ... és akkor a cikk kapnak több figyelmet és rospostraneniya)))
Lehet még írni egy könyvet megüt a FASMO és megtanulják a burzsoázia a hegyen ...

Ami a polgári nem tudom, meg kell fordítani őket

Kapcsolódó cikkek