Makrók assemblerben

Makrók assemblerben

Ha a programozás egy elég komoly, probléma, vannak ismétlődő szakaszok kódot. Úgy is lehet, és nem vehet fel hitelt és rengeteg hely. Az utóbbi esetben, ezek a fragmentumok jelentősen akadályozza az olvasó program szövegét, hogy csökkentse a láthatóságot bonyolítja hibakeresés és szolgálni egy kimeríthetetlen forrása a hiba. Assembly nyelven számos eszköz, amely megoldja a párhuzamos szekciót probléma. Ezek közé tartoznak:

  • makró szerelő;
  • Mechanizmus eljárások;
  • Megszakítás mechanizmus.

A makró egy string, amely egy szimbolikus neve - a makró nevét. szánt esetben egy vagy több más sorokban. Makrónév kísérhet lehetőségeket. Írni makrók először meg kell adnia a sablon leírását, az úgynevezett makrókat.

A szintaxis a makró a következő:

ImyaMakrokomandy makro SpisokFormalnyhArgumentov
TeloMakroopredeleniya
END m

Macro által feldolgozott fordító következik. A makró használatához ismertetett a megfelelő helyen a programban meg kell működtetni a makró jelezve a következő parancsot:

Az eredmény az alkalmazás a szintaktikai konstrukció a forrás program helyette húrok TeloMakroopredeleniya szerkezetét. De ez nem egy egyszerű csere. Jellemzően a makró listáját tartalmazza érvek - SpisokFakticheskihArgumentov. amely beállítható makrók. Helyezzük a szervezetben a makró, amely helyébe a tényleges érv a makró által kijelölt úgynevezett formális paraméterek. Tehát ennek eredményeként a makróprogram formális paraméterek makrók helyébe, amely a tényleges érvek; Ebben a kontextusban a számvitel. Ezt a folyamatot nevezik helyettesítési macrogenerations. és az eredmény ez a folyamat a Macro.

Makrók assembler hasonló #define direktíva C nyelven.

Három makró elhelyezése:

  • elején a forráskód a program, akár kód és az adatok, hogy ne sérüljön az olvashatóság a program. Ezt az opciót kell használni azokban az esetekben, ahol a meghatározott makrók csak akkor érvényesek belül a program;
  • egy külön fájlban. Ez a lehetőség akkor megfelelő, ha dolgozik több program, egy terület. Ahhoz, hogy ezek a makrók érhető el egy adott programot, szükség van az elején a forráskód a program rögzíti irányelv tartalmazza a fájlnevet. például:

586
. modell lakás, stdcall
közé show.inc; Itt már be van helyezve a szövegfájlt show.inc

  • makró könyvtárakban. Universal makrók használata szinte minden alkalmazás célszerű írni az úgynevezett makrókönyvtárak. Tedd megfelelő makrók ebből a könyvtárból, akkor is használhatja az include direktívát. Ennek hátránya, és a korábbi eljárásoktól, hogy a forráskód tartalmaz mindent makrókat. A helyzet orvoslására, akkor irányelv tisztogatás. vesszővel elválasztott operandusok felsorolt ​​makró neveket nem kell figyelembe venni a szövegben a program. Például:

    tartalmaznia iomac.inc
    tisztogatás outstr, exitV Ebben az esetben a forrás szövegét a programot, mielőtt sugárzott MASM helyett közé iomac.inc húr szúr egy sor iomac.inc fájlt. De a beillesztett szöveg lesz eltér az eredeti úgy, hogy nem lesz makro outstr és kilép.

  • Minden aktuális argumentum egy karakterlánc, a forma, amely az alábbi szabályok érvényesek:

    • A karakterlánc áll:
      - A szimbólum sorozatot szóköz nélkül, pontok, vesszőt, pontosvesszőt;
      - bármilyen karaktersorozat hegyes zárójelek közé: <.>. Ez a szekvencia lehet tüntetni, mint a hézagok vagy vesszőt, pontosvesszőt.
    • Annak érdekében, hogy jelzik, hogy néhány karakter egy húr, amely képviseli az aktuális paraméter valójában egy szimbólum, és nem valami mást, például néhány szeparátor vagy korlátozó konzol, használt speciális operátor. Ez az operátor kerül közvetlenül mielőtt a karakter a fent leírt, és annak hatása egyenértékű a következtetést egy karakter zárójelben.
    • Ha szeretné, hogy a számítás egy string konstans kifejezés, az elején a kifejezést kell tenni a jel%.

    ConstExpression érték kiszámítása és szubsztituált táblázatos formában összhangban a jelenlegi radix.

    Előállítása közben szerelő Macro fordító megkeresi a makróprogramnak szöveg karaktersorozat illő karakter sorozatot azokkal, amelyek a formális paraméterek. Miután érzékelte, az ilyen véletlen formális paraméter egy makró test helyébe a megfelelő aktuális paraméter a makró. Ezt a folyamatot nevezik a helyettesítés érveket. Általában a lista formális érvek, amelyek nemcsak az átadás a formai elemek, vesszővel elválasztva, hanem néhány egyéb információt. hivatalos érvelés teljes szintaxis a következő:

    ahol típusa lehet:

    • REQ - kötelezően előírnák kifejezett feladata a tényleges érv hívás esetén a makró;
    • =<ЛюбаяСтрока> - ha az érv hívás esetén a makró nincs megadva, a megfelelő helyeken a Macro beilleszti az alapértelmezett értéket értékének megfelelő LyubayaStroka. Szimbólumokat a LyubayaStroka. Be kell hegyes zárójelek közé.

    De nem mindig, a szerelő képes felismerni a test egy makró hivatalos érvelés. Ez például akkor jelentkeznek, amikor ez része egy azonosító. Ebben az esetben a karaktersorozat hivatalos érvelés elkülönül a többi keretében egy speciális szimbólum . Ezt a technikát gyakran használják, hogy meghatározza a módosítható azonosítók és műveleti kódok. Például,

    686p
    . modell lakás, stdcall
    def_table makro t: REQ. LEN: =<1>
    tabl_t dt LEN DUP (5)
    END m
    .adat
    def_table d, 10
    def_table b
    .kód
    fő proc
    mov al. [Tabl_b]
    mov ah. [Tabl_b + 1]
    mov ebx. [Tabl_d]
    áztat
    fő endp
    vége fő

    Miután az adás a program szövegének adatokat tartalmazó szegmens vonalak, majd

    def_table d, 10; tabl_d dd 10 DUP (5)
    def_table b; tabl_b db 1 DUP (5)

    Figyeljük meg, hogy a program összhangban

    hozott ah eltér az 5., mert a memóriát csak tabl_b alatt 1 tömböt 1 bájt, amelynek értéke 5.

    szimbólum Azt is fel lehet használni elismerés formális argumentum egy karakterlánc idézőjelek között „”

    Ha a makró törzsében tartalmaz egy jelölést vagy nevét a tartalék irányelv és inicializálási adatok, és a program ezt a makró hívásakor többször, a folyamat macrogenerations a helyzet, amikor a program egy identitás kerül meghatározásra több alkalommal, hogy természetesen el fogják ismerni a fordító hibát jelez. Ahhoz, hogy kilép ebből a helyzetből, helyi irányelvet. amely a következő szintaxist:

    Ezt az irányelvet kell állítani közvetlenül a fejléc után makró. Az eredmény ez az irányelv előállítása minden esetben macroexpansion egyedi neveket az összes felsorolt ​​azonosítók CpisokIdentifikatorov. Ezek az egyedi nevek az űrlapot. xxxx, ahol xxxx - hexadecimális szám. Az első azonosító az elsőfokú macroexpansion xxxx = 0000, a második - .. Xxxx = 0001 stb irányítást a megfelelő elhelyezése és használata ezeket az egyedi nevek feltételezi, hogy a fordító.

    Vegyük például a használata a makró nevét megjelenítő programmal a párbeszédablakban.

    686P
    .MODELL FLAT, STDCALL
    PrintName makró neve
    helyi STR1, STR2, Metka
    JMP Metka
    STR1 DB "Program", 0
    STR2 DB „Nevem: Név”, 0
    Metka:
    PUSH 0
    PUSH OFFSET STR1
    PUSH OFFSET STR2
    PUSH 0
    CALL MessageBoxA @ 16
    END m
    init makró
    EXTERN MessageBoxA @ 16: közel
    END m
    init
    .KÓD
    START:
    PrintName <Лена>
    PrintName <Таня>
    RET
    END START

    Makrók assemblerben

    Ha olyan makrót programkód válik olvashatóvá.

    Funkcionálisan hasonló a makro eljárást. Az hasonlóság, hogy mindketten elég egyszer leírni, majd hívja őket többször különleges módon. Különbségek makrók és eljárások, attól függően, hogy a cél telepítés lehet tekinteni, mint előnyei és hátrányai egyaránt:

    • ellentétben az eljárás, amelynek szövegét változatlan, makro macrogenerations változhat összhangban sor aktuális paraméter. Ebben az esetben a korrekció tárgyát képezheti mindkét operandus parancsok és a parancsok magukat. A eljárások ebben a tekintetben kevésbé rugalmasak;
    • Minden alkalommal, amikor hívást a makrót, a szöveget beilleszteni a makrót bővítési programot. Amikor hívja eljárás mikroprocesszor végzi sebességváltó vezérlő elején az eljárás található egy memória területet egyetlen példányban. A kód ebben az esetben egy kompakt, bár a sebesség kissé csökken, mivel szükség van az átmenet.