calculadora basica
suma,resta,multiplicacion,divicion con decimales y codigo ascii
;Autor REAK-KEPLER
;URL
;Proyecto Final de Ensamblador
; TU NOMBRE
muestra macro mensajex
lea dx,mensajex
mov ah,9
int 21h
endm
; lee el numero del menu
;Lee 4 numeros y conbierte de ascii a decimal
l1 macro valor,dato1,ayuda
mov valor,0
mov dato1,1000
mov cx,4
ciclo: mov ah,7
int 21h
mov dl,al
mov ah,2
int 21h
sub al,30h
mov ayuda,al
mov ax,0
mov al,ayuda
cbw
mul dato1
mov bx,dato1
add valor,ax
mov ax,dato1
cwd
mov bx,10
div bx
mov dato1,ax
loop ciclo
endm
;*********************************************
;*******************************************
;lee otros cuatro digitos
in2 macro val2,deta2,ayu1
mov val2,0
mov deta2,1000
mov cx,4
clo1: mov ah,7
int 21h
mov dl,al
mov ah,2
int 21h
sub al,30h
mov ayu1,al
mov ax,0
mov al,ayu1
cbw
mul deta2
mov bx,deta2
add val2,ax
mov ax,deta2
cwd
mov bx,10
div bx
mov deta2,ax
loop clo1
endm
;*******************************************
;*********************************************
;**********************(Inicio del programa principal)***********************
pila SEGMENT PARA PUBLIC 'stack'
db 64 dup ()
pila ENDS
datos SEGMENT PARA PUBLIC 'DATA'
dato1 dw 1000
dedo dw 1000
tell dw 1000
deta2 dw 1000
del dw 1000
valor dw 0
val2 dw 0
ress dw 0
resr dw 0
resm dw 0
resd dw 0
ayuda db ?
ayu1 db ?
mensaje db 'Calculadora Basica Aritmetica de Reak=Franja ', 13, 10, '$'
men_menu db 'Menu', 13, 10, '$'
men_suma db '1..Suma', 13, 10, '$'
men_resta db '2..Resta', 13, 10, '$'
men_Multi db '3..Multiplicacion', 13, 10, '$'
men_divi db '4..Division', 13, 10, '$'
men_opc db 'Dame tu opcion', 13, 10, '$'
men_11 db '... Choose ... Suma', 13, 10, '$'
men_22 db '... Choose ... Resta',13, 10, '$'
men_33 db '... Choose ... Multiplicacion',13, 10, '$'
men_44 db '... Choose ... Division',13, 10, '$'
men_pid db '... Give Me Numbers ... ',13, 10, '$'
datos ends
CODIGO SEGMENT PARA PUBLIC 'code'
ASSUME Cs:Codigo,SS:pila,ds:datos
inicio: PUSH Ds
SUB AX,AX
PUSH AX
MOV AX,seg datos
MOV Ds,AX ;guarda el psp
mov al,2
mov ah,0
int 10h
mov dh,0
mov dl,0
;mov bh,0
mov ah,2
int 10h ;limpia pantalla
muestra mensaje
muestra men_menu
muestra men_suma
muestra men_resta
muestra men_Multi
muestra men_divi
;********************(las operaciones)*************************
muestra men_opc
mov ah,7
int 21h
mov dl,al
mov ah,2
int 21h
sub al,30h
cmp al,1
jne resta
muestra men_11
call meter
mov ax,valor
mov bx,val2
add ax,bx
mov ress,ax
mov dx,ax
mov ah,2
int 21h
call muestra suma
jmp fin
; suma
resta:cmp al,2
jne multi
muestra men_22
call meter
mov ax,valor
mov bx,val2
sub ax,bx
mov resr,ax
mov dx,ax
mov ah,2
int 21h
call muestra resta
; resta
jmp fin
multi:cmp al,3
jne divi
muestra men_33
call meter
mov ax,valor
mov bx,val2
mul bx
mov resm,ax
mov dx,ax
mov ah,2
int 21h
call muestra multi
;Multiplicacion
jmp fin
divi:cmp al,4
muestra men_44
call meter
mov ax,valor
cwd
mov bx,val2
div bx
mov resd,ax
mov dx,ax
mov ah,2
int 21h
call muestra div
;division
jmp fin
;********************(fin las operaciones)*************************
;***************************
meter proc near
muestra men_pid
l1 valor,dato1,ayuda
muestra men_pid
in2 val2,deta2,ayu1
ret
meter endp
muestrasuma proc near
;convierte l1 decimal a ascii
mov dedo,1000
mov cx,4
ciclo23:mov ax,ress
cwd
mov bx,dedo
div bx
mov ress,dx
add ax,30h
mov dx,ax
mov ah,2
int 21h
mov ax, dedo
cwd
mov bx,10
div bx
mov dedo,ax
loop ciclo23
ret
muestrasuma endp
muestraresta proc near
mov dedo,1000
mov cx,4
ciclo231:mov ax,resr
cwd
mov bx,dedo
div bx
mov resr,dx
add ax,30h
mov dx,ax
mov ah,2
int 21h
mov ax, dedo
cwd
mov bx,10
div bx
mov dedo,ax
loop cico23
ret
muestraresta endp
muestramulti proc near
mov dedo,1000
mov cx,4
ciclo232:mov ax,resm
cwd
mov bx,dedo
div bx
mov resm,dx
add ax,30h
mov dx,ax
mov ah,2
int 21h
mov ax, dedo
cwd
mov bx,10
div bx
mov dedo,ax
loop clo23
ret
muestra multi endp
muestra div proc near
mov dedo,1000
mov cx,4
ciclo233:mov ax,resd
cwd
mov bx,dedo
div bx
mov resd,dx
add ax,30h
mov dx,ax
mov ah,2
int 21h
mov ax, dedo
cwd
mov bx,10
div bx
mov dedo,ax
loop lo233
ret
muestradiv endp
;---------------------------
fin: MOV AX,4c00H
INT 21H
Codigo ENDS
end inicio
;--------------------(fin del programa principal)-----------------------------