Esercizio 1
Per scrivere un programma che sia in grado di rappresentare un numero
a due cifre, possiamo usare gli elementi indicati nel programma Z descritto
nella parte teorica; questo programma, era,infatti, in grado di stampare
a schermo un numero ad una sola cifra.
Senza utilizzare il segmento DATA possiamo direttamente caricare il numero
da rappresentare (ad es.75) nel registro
AL MOV AL,75
CALL TRAD
viene poi invocata una procedura che noi abbiamo chiamato TRAD.
La procedura può essere esplicitata subito dopo la terminazione del programma
principale con l'istruzione TRAD PROC NEAR.
Viene messo il valore 10 nel registro CL mentre l'istruzione
DIV CL
divide il valore contenuto in AL per CL. Il quoto della divisione va in
AL mentre il resto va in AH. A questo punto l'intero registro AX viene salvato
nello stack dall'istruzione PUSH AX.
Seguono le due istruzioni
CMP AL,0
JE SALTA
se AL=0 vuol dire che il numero originario era minore di 10 e allora si
va all'etichetta SALTA: dove viene ripristinato il
registo AX e vengono scambiati i valori contenuti tra la parte alta del
registo (AH) e quella bassa (AL) tramite l'istruzione XCHG
AL,AH. viene poi stampato il resto della divisione per 10.
Se la condizione di test precedente non è vera viene prima stampato il quoto
della divisione e poi il resto.
TITLE UNO
;rappresentazione di un numero a due cifre
.MODEL SMALL
.STACK 100H
.DATA
.CODE
MOV AL,75
CALL TRAD
;terminare l'esecuzione
MOV AX,4C00H
INT 21H
;_________stampa
TRAD PROC NEAR
MOV CL,10 DIV CL;divido AL per il valore di CL=10
;il quoto della divisione va il AL, il resto va in AH
PUSH AX
CMP AL,0
JE SALTA
ADD AL,48 ; stampa del quoto
MOV AH,02
MOV DL,AL
INT 21H
SALTA:
POP AX
XCHG AL,AH ; scambio il contenuto dei due registri
ADD AL,48 ; stampa del resto
MOV AH,02
MOV DL,AL
INT 21H
RET
TRAD ENDP
END
Le due istruzioni
RET TRAD
ENDP
indicano rispettivamente il ritorno della procedura al programma principale
e la chiusura della stessa.