Limbajul de asamblare nu recunoaste notiunea de subprogram. Putem insa crea o secventa de instructiuni care sa poata fi apelata din alte zone ale programului si dupa terminarea ei sa returneze controlul programului apelant.
Apelul unei "proceduri" se poate face cu o instructiune jmp. Problema este insa ca procesorul nu tine minte de unde a fost trimis la "procedura" si prin urmare nu stie unde sa revina la terminarea procedurii. Este necesar deci ca la apelul unei proceduri sa salvam undeva adresa de revenire, iar revenirea din procedura este de fapt o instructiune de salt la acea adresa.
Locul unde se salveaza adresa de revenire este asa-zisa stiva de executie. Este nevoie de o stiva deoarece o procedura poate apela o alta procedura, acea procedura poate apela alta, s.a.m.d.
Exista doua instructiuni: call si return.
Instructiunea call, avand sintaxa
Instructiunea ret extrage din varful stivei o adresa si executa un salt la acea adresa. Instructiunea nu are argumente deoarece adresa la care sare este extrasa din varful stivei (nu este data explicit).
Stiva trebuie declarata ca un segment cu tipul stack si trebuie rezervat spatiu pentru ceea ce se va depozita acolo. Exemplu:
stiva segment stack db 512 dup (?) stiva endsAici se declara un segment de 512 octeti spre a fi folosit pentru stiva.
Stiva se poate folosi si pentru memorarea (temporara) a variabilelor programului. Instructiunea push introduce operandul in varful stivei, iar instructiunea pop extrage varful stivei si-l scrie in registrul sau locatia de memorie data ca operand.
De notat ca subprogramele nu au variabile locale sau etichete locale. Toate
numele sunt vizibile in intregul program, prin urmare trebuie sa avem grija
sa nu existe etichete cu acelasi nume in programul principal si in subprograme.
Exemplu
A se vedea exemplul ex1.asm.
Un program scris in limbaj de asamblare poate fi impartit in mai multe fisiere sursa. Pentru a scrie un program din mai multe fisiere sursa trebuie sa respectam urmatoarele:
Fiecare modul se va asambla separat (cu comanda tasm), apoi
modulele se vor lega impreuna cu comanda