edutecnica

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.