Subprograme in limbajul de asamblare

Ce este un subprogram?

Un subprogram este o secventa de instructiuni care poate fi apelata din programul principal sau dintr-un alt subprogram.

In limbajul de asamblare un subprogram nu este separat strict de restul programului, tot asa cum nu sunt separate instructiunile de date.

Apelul si revenirea

Un subprogram este, asa cum am vazut, o secventa de instructiuni. Apelul unui subprogram inseamna de fapt lansarea in executie a acelei secvente, ceea ce echivaleaza cu un salt la prima instructiune a subprogramului.

Revenirea din subprogram se face similar, printr-un salt inapoi la secventa apelanta, la instructiunea imediat urmatoare celei apelante.

Pentru apel, prima instructiune a subprogramului trebuie sa fie etichetata. Astfel, secventa apelanta va efectua un salt la adresa data de acea eticheta.

Revenirea este ceva mai complicata, intrucat subprogramul nu are de unde sa stie a-priori de unde a fost apelat. In acest scop, secventa apelanta trebuie sa lase intr-un loc convenit dinainte adresa de revenire. De obicei acest loc este varful stivei.

Stiva procesorului

Procesorul 8086 poseda un mecanism de stiva. Exista un registru special, sp, care retine adresa varfului stivei (ultimul element introdus in stiva). Instructiunea push introduce valoarea operandului in stiva, iar instructiunea pop extrage valoarea din varful stivei si o copiaza in operandul specificat.

Nota: Stiva creste dinspre adrese mari spre adrese mici.

Pentru apelul subprogramelor, exista doua instructiuni speciale:

Exemple
  1. Se da un sir de octeti. Se cere constructia unui al doilea sir de octeti, continand fiecare numarul de biti 1 din octetul corespunzator din primul sir.

    Rezolvare

Transmiterea parametrilor


Arhitectura calculatoarelor

12 Dec 2001
Radu-Lucian LUPSA