Mi is az a szubrutin? Az egy olyan programrészlet, ami sokszor meghívódik, s mi nem szeretnénk 50-szer beírni ugyanazt, azaz nem szeretnénk, ha a programunk mérete feleslegesen nőne.
Egy példa a procedure-re :

    call    zso     call    zso2     ...     zso     proc      mov     al,15      ret     zso     endp
vagy
    zso2:      mov     al,15     ret
A procedure egy névvel kezdődik, ezzel tudunk rá hivatkozni. A "proc" szócska vagy egy ":" követi, ez jelzi, hogy ez egy procedure lesz. Utána következnek az utasítások, majd a "ret" szócska. Ez jelzi, hogy vége a szubrutinnak. Végezetül a "név endp" következik, ha azonban nem írtunk "proc"-ot az elejére, akkor semmi sem jön :)

A 'szubrutin'-t a "CALL szubrutin neve" utasítással tudjuk meghívni. Most olvasgattam a coder-l levéllistát, ahol WriCkout azt kérdezgette, hogy lehet paramétereket átadni egy 'proc'-nak. Erre a legjobb megoldás -szerintem- az, hogy csinál egy n. byteos tömböt, az első bájt jelzi a paraméterek számát, a többi a paraméter. De még jobb lenne, ha regisztereken keresztül adná át a paramétert. Van egy harmadik megoldás is, ekkor a stackbe nyomja le a paraméte- reket, s a procedure olvassa ki azokat.

Példák a paraméterkezelésre:
1, Stackes

     push     param1      push     param2      call     rulez      ...      rulez:   pop     bx      ; bx= param2               pop     ax      ; ax= param1               ...               ret
2, Regiszteres
     mov      ax,[param1]      mov      bx,[param2]      call     rulez      ...      rulez:   ...             ; ax=param1 és bx=param2               ret
3, Tömbös
     mov      si,ptable      mov      [si],2      mov      [si+1],ax      mov      [si+3],bx      call     rulez      ...      rulez:   mov     si,ptable               mov     cl,[si]               inc     si        ; [si]-től vannak a               ...               ; paraméterek               ret
5. példa letöltése