In limbajul de asamblare un subprogram nu este separat strict de restul programului, tot asa cum nu sunt separate instructiunile de date.
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.
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: