codice:
.MODEL SMALL
.STACK 200h
.DATA ;definizione variabili e stringhe da stampare a video
msg0 DB "Inserire numero: $"
msg1 DB "Inserire primo numero: $"
msg2 DB "Inserire secondo numero: $"
menu DB "Scegliere somma e conversioni (1) o conversioni (2) : $"
ris DB "La somma Š: $"
otta DB "Il numero in ottale Š: $"
hexa DB "Il numero in esadecimale Š: $"
bina DB "Il numero in binario Š: $"
acapo DB 13,10,"$"
n1 DB ?
n11 DB ?
n2 DB ?
n22 DB ?
ns1 DB ?
ns2 DB ?
ns3 DB ?
pot DB 2
cont DB 1
v DB 1,2,3,4,5,6,7,8
ns31 DB ?
ns32 DB ?
.CODE
mov ax, @data
mov ds, ax
scelta:
lea dx, menu
mov ah, 9
int 21h ;stampa menu
mov ah, 1
int 21h ;acquisisce il valore
sub al, 30h
cmp al, 2
je conversione
jmp somma
conversione:
lea dx, acapo
mov ah, 9
int 21h
lea dx, msg0
mov ah, 9
int 21h ;stampa messaggio 0
mov ah, 1
int 21h ;acquisisce il valore
sub al, 30h ;toglie 30 esadecimale per trasformare da ascii a decimale
mov ns2, al
mov ah, 1
int 21h ;acquisisce il valore
sub al, 30h ;toglie 30 esadecimale per trasformare da ascii a decimale
mov ns3, al
mov ns1, 0
conv:
lea dx, acapo
mov ah, 9
int 21h ;butta a capo
mov al, 10
mul ns2
add ns3, al
mov al, 100
mul ns1
add ns3, al
mov al, ns3
mov ns31, al
mov ns32, al
conv_bin:
confronto:
sub ax, ax
sub bx, bx
mov bl, cont
mov al, ns3
div pot
mov ns3, al
mov v[bx], ah
inc cont
cmp al, 0
jne confronto
dec cont
lea dx, acapo
mov ah, 9
int 21h
lea dx, bina
mov ah, 9
int 21h
stampa:
sub bx, bx
mov bl, cont
mov dl, v[bx]
add dl, 30h
mov ah, 2
int 21h
dec cont
cmp cont, 0
jne stampa
conv_ott:
mov cont, 1
mov pot, 8
confronto1:
sub ax, ax
sub bx, bx
mov bl, cont
mov al, ns31
div pot
mov ns31, al
mov v[bx], ah
inc cont
cmp al, 0
jne confronto1
dec cont
lea dx, acapo
mov ah, 9
int 21h
lea dx, otta
mov ah, 9
int 21h
stampa1:
sub bx, bx
mov bl, cont
mov dl, v[bx]
add dl, 30h
mov ah, 2
int 21h
dec cont
cmp cont, 0
jne stampa1
conv_hex:
mov cont, 1
mov pot, 16
confronto2:
sub ax, ax
sub bx, bx
mov bl, cont
mov al, ns32
div pot
mov ns32, al
mov v[bx], ah
inc cont
cmp al, 0
jne confronto2
dec cont
lea dx, acapo
mov ah, 9
int 21h
lea dx, hexa
mov ah, 9
int 21h
stampa2:
sub bx, bx
mov bl, cont
mov dl, v[bx]
add dl, 30h
cmp dl, 39h
jg add39
print:
mov ah, 2
int 21h
dec cont
cmp cont, 0
jne stampa2
jmp fine
add39:
add dl, 39
jmp print
jmp fine
somma:
lea dx, acapo
mov ah, 9
int 21h
lea dx, msg1
mov ah, 9
int 21h ;stampa messaggio 1
mov ah, 1
int 21h ;acquisisce il valore
sub al, 30h ;toglie 30 esadecimale per trasformare da ascii a decimale
mov n1, al
mov ah, 1
int 21h ;acquisisce il valore
sub al, 30h ;toglie 30 esadecimale per trasformare da ascii a decimale
mov n11, al
lea dx, acapo
mov ah, 9
int 21h ;butta a capo
lea dx, msg2
mov ah, 9
int 21h ;stampa messaggio 2
mov ah, 1
int 21h ;acquisisce il valore
sub al, 30h ;toglie 30 esadecimale per trasformare da ascii a decimale
mov n2, al
mov ah, 1
int 21h ;acquisisce il valore
sub al, 30h ;toglie 30 esadecimale per trasformare da ascii a decimale
mov n22, al
lea dx, acapo
mov ah, 9
int 21h ;butta a capo
sub ax, ax
mov al, n11
add al, n22
cmp al, 10
jb unacifra1 ;se la somma Š < di 10 la fa direttamente
;altrimenti fa il riporto e fa la somma togliendo 10
mov ns2, 1 ;ci sar… sicuramente riporto e mette a 1 le decine
sub ax,ax
mov ah, n11
add ah, n22
sub ah, 10
mov ns3, ah ;somma i numeri togliendo 10 cos da le unit… e assegna
jmp short continuo1
unacifra1:
sub ax, ax
mov al, n11
add al, n22
mov ns3, al ;somma e assegna le unit…
mov ns2, 0
continuo1:
sub ax, ax
mov al, n1
add al, n2
add al, ns2
cmp al, 10
jb unacifra2 ;se la somma Š < di 10 la fa direttamente
;altrimenti fa il riporto e fa la somma togliendo 10
mov ns1, 1 ;ci sar… sicuramente riporto e mette a 1 le centinaia
sub ax,ax
mov ah, n1
add ah, n2
add ah, ns2
sub ah, 10
mov ns2, ah ;somma i numeri togliendo 10 cos da le decine e assegna
jmp short continuo2
unacifra2:
sub ax, ax
mov al, n1
add al, n2
add al, ns2
mov ns2, al ;somma e assegna le unit…
mov ns1, 0
continuo2:
lea dx, ris
mov ah, 9
int 21h
mov dl, ns1
add dl, 30h
mov ah, 2
int 21h ;stampa centinaia
mov dl, ns2
add dl, 30h
mov ah, 2
int 21h ;stampa decine
mov dl, ns3
add dl, 30h
mov ah, 2
int 21h ;stampa unit…
lea dx, acapo
mov ah, 9
int 21h
jmp conv
fine:
mov ah, 4ch
int 21h
END
END
e ti ripeto funziona tutto alla perfezione... solo ottale e solo oltre il 127 non funge...