File compilato + sorgente qui: Calcolatrice16.zip
;Calcolatrice v1.1 by NoRpiUs
;Ora si possono usare numeri a 16 bit ... quindi il risultato massimo puo'
;essere 65535 :)
.model small
.stack
.data
impox db "Scelta non possibile $"
msg0 db "Calcolatrice v1.1 by NoRpiUs $"
msg1 db "1) Addizione $"
msg2 db "2) Sottrazione $"
msg3 db "3) Moltiplicazione $"
msg4 db "4) Divisione $"
msg5 db "5) Uscire $"
msg6 db "Scegli cosa vuoi fare: $"
scrivi1 db "Inserisci il primo numero: $"
scrivi2 db "Inserisci il secondo numero: $"
ris db "Il risultato e': $"
restoz db "Il resto e': $"
ciao db "Programma terminato $"
.data?
scelta db ?
numero1 dw 0
numero2 dw 0
cifra dw ?
risultato dw ?
resto dw ?
cont db 0
.code
acapo macro
mov ah, 2
mov dl, 13
int 21h
mov ah, 2
mov dl, 10
int 21h
endm
inizio:
mov ax, @data
mov ds, ax
acapo
mov ah, 2
mov dl, 9
int 21h
mov ah, 2
mov dl, 9
int 21h
mov ah, 2
mov dl, 9
int 21h
lea dx, msg0
mov ah, 9
int 21h
acapo
lea dx, msg1
mov ah, 9
int 21h
acapo
lea dx, msg2
mov ah, 9
int 21h
acapo
lea dx, msg3
mov ah, 9
int 21h
acapo
lea dx, msg4
mov ah, 9
int 21h
acapo
lea dx, msg5
mov ah, 9
int 21h
acapo
acapo
start: lea dx, msg6
mov ah, 9
int 21h
mov ah, 1
int 21h
mov scelta, al
sub scelta, 30h
cmp scelta, 1
je uno
cmp scelta, 2
je due
cmp scelta, 3
je tre
cmp scelta, 4
je quattro
cmp scelta, 5
je cinque
acapo
lea dx, impox
mov ah, 9
int 21h
acapo
jmp start
uno: call addizione
jmp start
due: call sottrazione
jmp start
tre: call moltiplicazione
jmp start
quattro: call divisione
jmp start
cinque: call uscita
addizione proc
acapo
lea dx, scrivi1
mov ah, 9
int 21h
xor ah, ah
mov ah, 1
int 21h
ciclo: cmp al, 13
je fineciclo
sub ax, 30h
xor ah, ah
mov cifra, ax
mov ax, numero1
mov bx, 10
mul bx
add ax, cifra
mov numero1, ax
mov ah, 1
int 21h
jmp ciclo
fineciclo: acapo
lea dx, scrivi2
mov ah, 9
int 21h
xor ah, ah
mov ah, 1
int 21h
ciclo1: cmp al, 13
je fineciclo1
sub ax, 30h
xor ah, ah
mov cifra, ax
mov ax, numero2
mov bx, 10
mul bx
add ax, cifra
mov numero2, ax
mov ah, 1
int 21h
jmp ciclo1
fineciclo1: acapo
mov ax, numero1
add ax, numero2
mov risultato, ax
lea dx, ris
mov ah, 9
int 21h
ciclostampa: xor dx, dx
mov ax, risultato
mov bx, 10
div bx
mov risultato, ax
inc cont
push dx
cmp risultato, 0
jne ciclostampa
mov cl, cont
ciclopop: mov ah, 2
pop dx
add dl, 30h
int 21h
loop ciclopop
mov cont, 0
mov numero1, 0
mov numero2, 0
acapo
ret
endp
sottrazione proc
acapo
lea dx, scrivi1
mov ah, 9
int 21h
xor ah, ah
mov ah, 1
int 21h
ciclo2: cmp al, 13
je fineciclo2
sub ax, 30h
xor ah, ah
mov cifra, ax
mov ax, numero1
mov bx, 10
mul bx
add ax, cifra
mov numero1, ax
mov ah, 1
int 21h
jmp ciclo2
fineciclo2: acapo
lea dx, scrivi2
mov ah, 9
int 21h
xor ah, ah
mov ah, 1
int 21h
ciclo3: cmp al, 13
je fineciclo3
sub ax, 30h
xor ah, ah
mov cifra, ax
mov ax, numero2
mov bx, 10
mul bx
add ax, cifra
mov numero2, ax
mov ah, 1
int 21h
jmp ciclo3
fineciclo3: acapo
mov ax, numero1
sub ax, numero2
mov risultato, ax
lea dx, ris
mov ah, 9
int 21h
ciclostampa1: xor dx, dx
mov ax, risultato
mov bx, 10
div bx
mov risultato, ax
inc cont
push dx
cmp risultato, 0
jne ciclostampa1
mov cl, cont
ciclopop1: mov ah, 2
pop dx
add dl, 30h
int 21h
loop ciclopop1
mov cont, 0
mov numero1, 0
mov numero2, 0
acapo
ret
endp
moltiplicazione proc
acapo
lea dx, scrivi1
mov ah, 9
int 21h
xor ah, ah
mov ah, 1
int 21h
ciclo4: cmp al, 13
je fineciclo4
sub ax, 30h
xor ah, ah
mov cifra, ax
mov ax, numero1
mov bx, 10
mul bx
add ax, cifra
mov numero1, ax
mov ah, 1
int 21h
jmp ciclo4
fineciclo4: acapo
lea dx, scrivi2
mov ah, 9
int 21h
xor ah, ah
mov ah, 1
int 21h
ciclo5: cmp al, 13
je fineciclo5
sub ax, 30h
xor ah, ah
mov cifra, ax
mov ax, numero2
mov bx, 10
mul bx
add ax, cifra
mov numero2, ax
mov ah, 1
int 21h
jmp ciclo5
fineciclo5: acapo
mov ax, numero1
mov bx, numero2
mul bx
mov risultato, ax
lea dx, ris
mov ah, 9
int 21h
ciclostampa2: xor dx, dx
mov ax, risultato
mov bx, 10
div bx
mov risultato, ax
inc cont
push dx
cmp risultato, 0
jne ciclostampa2
mov cl, cont
ciclopop2: mov ah, 2
pop dx
add dl, 30h
int 21h
loop ciclopop2
mov cont, 0
mov numero1, 0
mov numero2, 0
acapo
ret
endp
divisione proc
acapo
lea dx, scrivi1
mov ah, 9
int 21h
xor ah, ah
mov ah, 1
int 21h
ciclo6: cmp al, 13
je fineciclo6
sub ax, 30h
xor ah, ah
mov cifra, ax
mov ax, numero1
mov bx, 10
mul bx
add ax, cifra
mov numero1, ax
mov ah, 1
int 21h
jmp ciclo6
fineciclo6: acapo
lea dx, scrivi2
mov ah, 9
int 21h
xor ah, ah
mov ah, 1
int 21h
ciclo7: cmp al, 13
je fineciclo7
sub ax, 30h
xor ah, ah
mov cifra, ax
mov ax, numero2
mov bx, 10
mul bx
add ax, cifra
mov numero2, ax
mov ah, 1
int 21h
jmp ciclo7
fineciclo7: acapo
xor dx, dx
mov ax, numero1
mov bx, numero2
div bx
mov risultato, ax
mov resto, dx
lea dx, ris
mov ah, 9
int 21h
ciclostampa3: xor dx, dx
mov ax, risultato
mov bx, 10
div bx
mov risultato, ax
inc cont
push dx
cmp risultato, 0
jne ciclostampa3
mov cl, cont
ciclopop3: mov ah, 2
pop dx
add dl, 30h
int 21h
loop ciclopop3
mov cont, 0
mov numero1, 0
mov numero2, 0
acapo
lea dx, restoz
mov ah, 9
int 21h
ciclostampa4: xor dx, dx
mov ax, resto
mov bx, 10
div bx
mov resto, ax
inc cont
push dx
cmp resto, 0
jne ciclostampa4
mov cl, cont
ciclopop4: mov ah, 2
pop dx
add dl, 30h
int 21h
loop ciclopop4
mov cont, 0
mov numero1, 0
mov numero2, 0
acapo
ret
endp
uscita proc
acapo
lea dx, ciao
mov ah, 9
int 21h
acapo
mov ah, 4ch
int 21h
ret
endp
end inizio
|