| Sebbene non sia strettamente necessario
l'inizio delle procedure dei nostri programmi può essere formalizzato con
la PseudoOperazione PROC
e la sua fine con la PseudoOperazione ENDP. |
| Le procedure appartengono ad un Segmento di
codice e possono essere chiamate con l'istruzione CALL:
per questo devono terminare sempre con un'istruzione
RET. |
| Le 2 direttive devono esser sempre in
coppia: se ci si dimentica di
ENDP viene segnalato errore (Open procedures:<nomeprocedura>). |
| Di solito dopo la direttiva
PROC bisogna specificare l'attributo
NEAR o FAR:
| se la procedura chiamata nello
stesso segmento in cui è definita (con
PROC e
ENDP) essa è di
tipo NEAR (vicina); in questo
caso l'attributo può anche essere omesso e, addirittura, può essere
eliminata tutta la struttura, limitandoci ad aggiungere i
2 punti dopo il nome della procedura.
Stampa
PROC NEAR
; inserire qui le istruzioni
RET
Stampa ENDP |
Stampa:
; inserire qui le istruzioni
RET |
|
|
Le etichette con i 2 punti indicano sempre locazioni di tipo
NEAR, per cui anche le eventuali procedure così
definite saranno di tipo NEAR. |
| Se la procedura dovrà essere chiamata
all'interno di segmenti diversi
da quello nel quale la stiamo definendo, deve essere dichiarata
FAR (lontana); in questo caso bisogna ovviamente evitare di
definire la procedura con i 2 punti finali:
Stampa
PROC FAR
; inserire qui le istruzioni
RET
Stampa ENDP |
|
|
| Nei nostri programmi eviteremo
di far ricorso alle procedure FAR;
la scelta di realizzare codici sorgente destinati a generare programmi
eseguibili di tipo COM impone la necessità di un
solo segmento, nel quale troveranno posto tutte le parti
componenti (istruzioni, variabili e stack). |
| La scelta intrasegmentale
da per scontato che tutte le procedure interne (anche quelle importate dalle
librerie) siano di tipo vicino (NEAR),
per cui eviteremo anche di usare la struttura PROC
NEAR/ENDP,
limitandoci a definire le nostre procedure con i 2 punti finali. |
| Per onore del vero (e per puro senso estetico)
detta struttura sarà usata una-tantum solo per il Main
Program, cioè per
dare un guscio estetico a tutto il
nostro codice sorgente (vedi
Matrici):
PAGE 66,132
_prog
SEGMENT BYTE PUBLIC 'CODE'
ASSUME
CS:_prog,DS:_prog
ORG
0100H
INIZIO: JMP Main
ATTRIB DB 0FH
Stampa: ; inserire qui le istruzioni
RET
Main
PROC NEAR
; inserire qui le istruzioni
CALL
Stampa
; inserire qui le istruzioni
Main ENDP |
_prog
ENDS
END INIZIO
|
|