  | il progetto di una procedura coinvolge il programmatore in 
  uno sforzo una-tantum, ben ripagato dal 
  fatto che il suo lavoro sarà riutilizzabile in molte altre occasioni, con 
  notevole risparmio di tempo | 
      | per assicurarsi il servizio di una procedura basta infatti 
  una sola istruzione, di norma la 
  CALL | 
      | per la sua definizione si utilizzano le direttive 
  PROC
  e ENDP, 
  all'interno delle quali sono raccolte le istruzioni chiamate a svolgere il 
  compito affidato al sottoprogramma; ciascuna delle due direttive sarà 
  preceduta dal nome scelto per la procedura | 
      | dopo la direttiva 
  PROC si specifica il 
  tipo di 
  procedura che si desidera progettare, 
  Near
  o Far; 
  nel primo caso la procedura può essere chiamata solo all'interno del
  segmento di codice di definizione, mentre 
  nel secondo la procedura può essere chiamata anche a 
  partire da 
  segmenti di codice diversi da quello di 
  definizione | 
      | una procedura 
  Near (intrasegmentale) 
  può essere definita anche senza queste formalità, semplicemente aggiungendo
  : (due punti) dopo il suo 
  nome | 
      | per assicurarsi il servizio di una procedura basta una sola 
  istruzione, di norma la 
  CALL | 
      | il tipo e il
  numero di istruzioni che raccoglie è 
  irrilevante; di certo l'ultima dovrà 
  essere l'istruzione 
   
  RET | 
      | la presenza della RET 
  finale consente al processore di rientrare nel programma
  chiamante, subito sotto l'istruzione (CALL
  Nome_Proc) che ha eseguito la chiamata | 
      | il rientro è reso possibile dal fatto che l'istruzione
  CALL ha 
  salvato nello
  
  stack l'indirizzo dell’istruzione a 
  sé successiva (la sola parte offset, se di 
  tipo Near, 
  o quello completo segment:offset, 
  se di tipo Far) 
  e che l'istruzione RET 
  lo ha recuperato nei 
  medesimi registri puntatori di programma (solo IP, 
  se Near, 
  o CS:IP, 
  se Far) | 
      | è possibile differenziare il funzionamento di una procedura
  passandole parametri; un 
  parametro è di norma un valore binario 
  predisposto dal programma chiamante in registri o
  variabili locali, condivise con la procedura | 
      | anche la procedura può lasciare eventuali
  risultati in 
  registri o variabili locali, condivise con 
  il programma chiamante | 
      | in generale, in queste operazioni di scambio, la 
  disponibilità dei registri è ovviamente 
  estremamente limitata rispetto a quella delle variabili 
  locali, pressocché infinite |