Un operator care lucrează într-un sistem se întâlnește de multe ori cu necesitatea de a repeta anumite secvențe de acțiuni de mai multe ori? O astfel de secvență poate fi, de exemplu, aceea de a introduce o anumită secvență de text, apăsând o anumită secvență de chei, efectuând o serie de operații aritmetice de același tip. În astfel de cazuri, puteți utiliza adesea macro-ul dispozitivului.
Macroanele (adesea numite macrocomenzi sau macrocomenzi) sunt abrevieri cu o singură linie pentru un grup de comenzi. Utilizând o macrocomandă, programatorul definește în esență o "comandă" pentru a reprezenta o anumită secvență de comenzi.
Prin definirea macrocomenzilor potrivite, operatorul poate introduce cu ușurință propriile instrumente de nivel superior fără a se îngrijora de structura sistemului. Poate realiza concizia și simplitatea managementului sistemului fără a pierde principalele avantaje ale utilizării sistemului sursă, cum ar fi limba de asamblare. Macrooperațiile mari simplifică utilizarea, depanarea și modificarea programelor și facilitează standardizarea. Mulți dezvoltatori de calculatoare folosesc macrocomenzi pentru a automatiza compilarea sistemelor de operare "potrivite" într-un proces numit generare de sisteme
În forma sa cea mai simplă, macro este o abreviere pentru secvența de operații
Luați în considerare următorul set de comenzi, preluate din limba macro IDE pentru Borland C ++ versiunea 3.1 (TEMC). Luați în considerare următorul program scris cu aceste operații
În secvența de comenzi de mai sus
Dispozitivul macro vă permite să atribuiți un nume acestei secvențe și să utilizați în schimb numele respectiv. De asemenea, este posibil să definim o anumită limbă macro care ne permite să considerăm această construcție ca o definiție și să folosim această definiție în viitor.
De fapt, macroprocesorul este un procesor de limbaj separat, cu propria sa limbă.
Formatele de macrocomenzi din diferite sisteme pot diferi una de cealaltă. În acest caz, secvența de comandă care definește macroul are următorul format
MACRO
MACRO pseudo - prima linie a definiției - definește identificatorul care o urmează, ca și denumirea macro-ului. Urmând această linie este o secvență de comenzi, numită "corpul de macrocomenzi". Definiția se termină cu un șir cu comanda pseudo END.
Dacă este definită macrocomanda, atunci folosirea numelui macro corespunzător ca cod mnemonics în program este echivalentă cu utilizarea secvenței de comandă corespunzătoare. Dacă o secvență repetată de comenzi este denumită "MacPageUp", atunci exemplul nostru poate fi rescris după cum urmează:
buclă până la (FLACUL OUTPUT == 0)
citirea următoarei linii a WTT
dacă operația MACRO
ieșind o linie în OUT1
> Pa (operațiunea MEND)
trecerea la compilare
ciclu pentru acum! (FLACUL OUTPUT)
citirea următoarei linii a WTT
FOUND = căutare în cod în MNT
INDEX = indice MNT
Completarea listei parametrilor ALA
citirea următoare. rânduri de la MDT
> Pa (operațiunea MEND)
altfel dacă! (funcționarea MACRO)
ieșind o linie în OUT1
dacă (funcția END) FLACUL DE PRODUCȚIE = 1
Înregistrați numele și indexul în MNT
pregătiți o serie de listă ALA
numele înregistrării în MDT
citirea următoarei linii a WTT
substituirea indexului operatorului
în plus față de MDT
> Pa (operațiunea MEND)
acest algoritm este o simplificare a algoritmului dat în [1], capitolul 4.3.2. Diferența constă în faptul că instrumentele moderne de intelectualizare a programării ne permit să inserăm și să eliminăm din matrice mari cu un timp minim al procesorului, ceea ce a fost imposibil cu cardurile de perforare. În plus, viteza procesoarelor moderne este atât de mare încât permite introducerea și ștergerea directă în matrice de dimensiuni medii (de exemplu, până la 64 kilobytes) în timp real. Astfel, extensia macro-ului sursă poate fi inserată direct în matricea text sursă și procesată într-o formă extinsă. Această tehnologie permite simplificarea semnificativă a algoritmului de procesare a limbajului macro.
REALIZAREA IN CADRUL ASEMBLERULUI
Multe funcții nu trebuie implementate de două ori (de exemplu, funcții I / O, verificări de tip etc.)
În timpul procesării, nu este nevoie să creați fișiere sau seturi de date intermediare.
Programatorul are posibilități suplimentare de a combina instrumentul de asamblare (de exemplu, comanda EUQ) împreună cu macrocomenzile.
Programul ar trebui să necesite mai multă memorie RAM, care este esențială pentru anumite tipuri de computere care nu au multă memorie RAM.
Implementarea acestui tip de sarcină poate fi un ordin de mărime mai complicat decât o implementare separată a asamblorului și a macroprocesorului.
Limbile macro și macroprocesoarele corespunzătoare sunt o formă independentă de limbi de programare. Atunci când este utilizat împreună cu asamblorul, macroprocesorul este un instrument util pentru programator și îi permite, în esență, să-și definească propria limbă de nivel "înalt".
Există patru sarcini principale rezolvate de macroprocesor:
Extinderea macrocomenzilor și înlocuirea parametrilor
Macroprocesorul în asamblare poate fi implementat în mai multe moduri:
În lucrarea despre rezumat a fost folosită următoarea literatură:
[1] J. Jordan - "Programarea sistemelor"
[2] IBM OS / 2 - "Referința programatorului REXX"
[3] Borland C ++ - Documentația inclusă și sursele.