Assembler privind mecanismul procedurilor; despre macroasembler

Despre mecanismul procedurilor; Despre macroassembler; Despre mecanismul întreruperilor. În această lecție vom discuta fundamentele mecanismului procedurilor. Importanța acestei probleme necesită o examinare în întregime a acesteia într-o lecție separată (pe care o vom face în lecția 14). Macroassemblerul și întreruperea vor fi, de asemenea, tratate ca probleme separate (în lecțiile 13, 15 și 17).







O procedură, numită adesea o subrutină, este unitatea funcțională de bază a descompunerii (împărțirea în mai multe părți) a unei sarcini. Procedura este un grup de instrucțiuni pentru rezolvarea unei submăsuri specifice și are mijloacele de a obține controlul din punctul de a apela o sarcină de nivel superior și de a reveni la acest punct de control. În cel mai simplu caz, programul poate consta într-o singură procedură. Cu alte cuvinte, procedura poate fi definită ca un set corect de instrucțiuni, care, odată descris, poate fi apelat, dacă este necesar, oriunde în program.

Pentru a descrie secvența de comenzi sub forma unei proceduri în limba de asamblare, se folosesc două directive: PROC și ENDP.

Sintaxa descrierii procedurii este după cum urmează (Figura 10.3).

proc_name PROC [limbă_modificator] limbă] ^ ARG argument_list] RETURNS argument_list] LOCAL listă argument] UTILIZĂRI log_list]

Fig. 10.3. Sintaxa descrierii procedurii în program

Din fig. 10.3 că în antetul procedurii (directiva PROC) este necesar doar numele sarcinii. Dintre numărul mare de operanzi ai directivei PROC, ar trebui să evidențiați în mod special [distanța]. Acest atribut poate lua valori apropiate sau departe și caracterizează posibilitatea de a accesa o procedură dintr-un alt segment de cod. În mod implicit, atributul [distance] ia valoarea apropiată.

Procedura poate fi plasată oriunde în program, dar nu este lovită accidental de către conducere. Dacă procedura este pur și simplu introdusă în fluxul comun de comenzi, microprocesorul va trata comenzile procedurii ca parte a acestui fir și, în consecință, va executa executarea comenzilor procedurii. Având în vedere această circumstanță, există următoarele opțiuni pentru plasarea procedurii în program:







О la începutul programului (înainte de prima comandă executabilă); Despre la final (după comanda care readuce controlul asupra sistemului de operare); Despre varianta intermediară - corpul procedurii este localizat în interiorul altei proceduri sau programe principale. În acest caz, trebuie să se prevadă o procedură de by-pass folosind necondiționat JMP instrucțiuni de ramură; Despre în alt modul. Plasarea procedurii la începutul segmentului de cod presupune că secvența de comandă, mărginită de o pereche de directive PROC și ENDP, va fi plasată înaintea etichetei care denotă prima comandă cu care începe programul. Această etichetă trebuie specificată ca parametru al directivei END, care indică sfârșitul programului:

modelul smal 1. stack IOOh .data .code

my_proc proc near ret

my_proc endp start:

model mic
. stivă 100h
.date
.cod
Procesul meu
4 I «ret
my_proc endp
începe proc
• * | | start endp
endstart

În acest fragment, după încărcarea programului în memorie, comanda va fi trecută la prima comandă de procedură cu numele principal.

Plasarea procedurii la sfârșitul programului presupune că secvența de comandă, limitată de directivele PROC și ENDP, va fi plasată după comanda care readuce controlul asupra sistemului de operare.

model mic .stack 100h .data. începe codul:

mov axt4cO0h int 21h; controlul revenirii la sistemul de operare.

myjproc endp endstart

O variantă intermediară a localizării corpului procedurii presupune plasarea sa în cadrul unei alte proceduri sau al unui program principal. În acest caz, este necesar să se prevadă traversarea corporală a procedurii, limitată de directivele PROC și EN0P, utilizând comanda jmp necondiționată:

model smal1. stack IOOh. data start cod: і> •

my_proc proc aproape • • •

int 21h; controlul revenirii la sfârșitul sistemului de operare

Ultima variantă a locației descrierilor procedurii - într-un segment de cod separat - presupune că procedurile utilizate frecvent sunt redate într-un fișier separat. Fișierul de procedură trebuie formatat ca fișier sursă normală și difuzat pentru a obține codul obiect. Ulterior, puteți combina acest fișier obiect cu utilitarul TLINK cu fișierul în care se utilizează procedurile. Utilizarea utilitarului TLINK este descrisă în lecția 4. Această metodă presupune existența mai multor elemente în codul sursă al programului legate de implementarea conceptului de programare modulară în limba de asamblare. Prin urmare, această metodă va fi luată în considerare în lecția 14.
Anterioară 85 86 87 88 89 90. 257 >> Înainte







Trimiteți-le prietenilor: