Sottoprogramma Un blocco di istruzioni, come ad esempio lanello di ritardo, può costituire un sottoprogramma (subroutine) a sé stante, richiamabile dal programma principale, al quale la CPU ritorna dopo l esecuzione del sottoprogramma; è opportuno sfruttare questa possibilità soprattutto quando il blocco di istruzioni è utile in più punti del programma principale; in questo modo si evita di riscrivere due o più volte il blocco di istruzioni. Un sottoprogramma deve essere scritto (inserendolo prima della pseudoistruzione END, altrimenti viene ignorato dal programma di assemblaggio) seguendo le stesse regole di un normale programma, avendo l accortezza di definire il suo indirizzo di partenza (tramite la pseudoistruzione ORG nn) in una cella diversa da quella del programma principale e di altri eventuali sottoprogrammi, così da non sovrapporre le varie zone di memoria occupate da programmi, sottoprogrammi e dati oggetto di elaborazione. Per chiamare un sottoprogramma dal programma principale occorre quindi inserire l istruzione CALL nn, il cui operando nn costituisce l indirizzo di inizio del sottoprogramma che si vuole chiamare (tale indirizzo è sostituibile da un etichetta che deve essere anche indicata nell apposita colonna all altezza della prima istruzione del sottoprogramma e seguita dai due punti :, come per le normali etichette). Una chiamata a sottoprogramma equivale a un salto, cioè a una forzatura del contenuto del program counter, con la differenza che per ogni chiamata è previsto un ritorno all istruzione successiva a quella di chiamata (CALL nn) presente nel programma principale (viceversa per i salti non è definito un ritorno all istruzione successiva al salto stesso). Da ciò ne consegue che il sistema, nel momento in cui lascia il programma principale per eseguire un sottoprogramma, deve conservare memoria dell indirizzo di ritorno al programma principale; ciò avviene automaticamente durante l istruzione di chiamata, nella quale, prima della forzatura del program counter all indirizzo del sottoprogramma, viene copiato l indirizzo successivo a quello di chiamata (già presente nel program counter durante l esecuzione dell istruzione corrente e diviso in due byte, parte alta e parte bassa dell indirizzo) in una zona di memoria denominata area di stack, anch essa distinta dalle zone di programmi, sottoprogrammi e dati. Per consentire il ritorno al programma principale, ogni sottoprogramma deve terminare con l istruzione RET, che copia nel program counter l indirizzo precedentemente salvato nell area di stack, ripristinando la situazione di partenza.
Ove prevista la presenza di almeno un sottoprogramma (o comunque l uso dell area di stack), per evitare sovrapposizioni accidentali tra le zone di memoria coinvolte nel programma, è buona norma di programmazione, iniziare il programma principale definendo l indirizzo di inizio dell area di stack, cioè l inizializzazione del puntatore di area di stack (registro stack pointer, cioè SP), tramite l istruzione LD SP,nn, dove nn deve essere un indirizzo diverso e lontano dalle altre zone coinvolte, tenendo presente che le celle interessate dal salvataggio dei dati, sono quelle che precedono tale indirizzo; in caso di mancata inizializzazione del registro SP, quest ultimo potrebbe casualmente contenere un indirizzo conflittuale con tali zone, rimasto da precedenti usi del sistema o dal suo avvio. Ogni sottoprogramma può a sua volta chiamare un altro sottoprogramma (sottoprogrammi nidificati), terminato il quale, tornerà al sottoprogramma chiamante, che potrà così ripartire e terminare, per poi ritornare al programma principale. Sia l istruzione CALL che l istruzione RET possono, separatamente, essere condizionate (tramite le istruzioni CALL cc,nn e RET cc ), così come avviene per i salti. Esempio: ORG0000H;indirizzo inizio programma principale LDSP,7000H;definisci area di stack CALL RIT;chiama il sottoprogramma anello di ritardo* HALT ORG0100H;indirizzo sottoprogramma anello di ritardo RIT:LDB,38H;prima istruzione anello di ritardo ;ultima istruzione anello di ritardo RET;torna al programma principale END;fine programma e sottoprogrammi *nell istruzione, al posto del nome dell etichetta, può comparire l indirizzo 0100H, relativo all indirizzo di inizio del sottoprogramma, all altezza del quale non è più necessaria l etichetta seguita dai due punti. p r o g r a m m a p r i n c i p a l e sottoprogramma