https://drive.google.com/file/d/0Bx5rS3UK4eL-Nk9CVlpOSTgydkU/view?usp=sharing
name "Calculadora Asemmbly by (Zerorendan)"
org 100h ; inicio de programa
include 'emu8086.inc' ;Incluye funciones de libreria emu8086
DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
jmp inicio
inicio:
mov bh, 0000_0010b
CALL pintar
mov ax, @data
mov ds,ax
mov dx, offset esp;-------->espacios para los mensajes
mov ah,09;----------------->impresion en pantalla
int 21h
mov dx, offset mensaje1;--->titulo del programa
mov ah,09
int 21h
mov dx, offset user;------->creadores del programa
mov ah,09
int 21h
mov dx, offset m0;------->menu principal
mov ah,09
int 21h
mov dx, offset m1;------->menu principal
mov ah,09
int 21h
mov dx, offset m2;------->menu principal
mov ah,09
int 21h
mov dx, offset m3;------->menu principal
mov ah,09
int 21h
mov dx, offset m4;------->menu principal
mov ah,09
int 21h
mov dx, offset m5;------->menu principal
mov ah,09
int 21h
;=====================================mov ah,01h
int 21h
cmp al,'0'
je fin
cmp al,'1'
je rect
cmp al,'2'
je cuad
cmp al,'3'
je tria
cmp al,'4'
je trap
cmp al,'5'
je sumaplus
;=====================================
;*****************************RECT*****************************ini
rect:
mov bh, 0111_1100b
CALL pintar
mov dx, offset mensaje2;---> mensaje para pedir el primer numero
mov ah,09h
int 21h
;-------------------------->rellenado de variables
call SCAN_NUM;------------->llama a la funcion scan_num q toma el numero del teclado y lo guarda en ax
mov valor1,cx;------------->carga el numero a la variable
;-------------------------->muestra el mensaje user para sentirme grande
mov dx, offset mensaje3;---> mensaje para pedir el segundo numero
mov ah,09h
int 21h
;-------------------------->rellenado de variables
call SCAN_NUM;------------->llama a la funcion scan_num q toma el numero del teclado y lo guarda en ax
mov valor2,cx;------------->carga el numero a la variable
mov dx, offset texto_resp;->muestra el resultado
mov ah,09h
int 21h;------------------->interrupcion pantalla
;-------------------------->suma de las variables
mov ax,valor1;------------->mueve el valor de la variable a ax
;add ax,valor2;------------->suma entre la region ax y la variable
mul valor2;-------------------->ax=ax*bx
call PRINT_NUM;------------> imprimiendo en pantalla el resultado
mov ah,00;----------------->espera por una tecla en pantalla
int 16h
mov ah,00h;---------------->limpia la pantalla
mov al,03h
int 10h
mov dx,offset beta;-------->muestra el mensaje de salida
mov ah,09
int 21h
jmp inicio
;fin del bloque de suma
;*****************************RECT*****************************fin
;*****************************CUAD*****************************ini
cuad:
mov bh, 0011_1110b
CALL pintar
mov dx, offset mensaje2
mov ah,09h
int 21h
;-------------------------->rellenado de variables
call SCAN_NUM;------------->llama a la funcion scan_num qtoma el numero del teclado y lo guarda en ax
mov valor1,cx;------------->carga el numero a la variable
;-------------------------->muestra el mensaje user para sentirme grande
; mov dx, offset mensaje3
; mov ah,09h
;int 21h
;-------------------------->rellenado de variables
; call SCAN_NUM
;mov valor2,cx
mov dx, offset texto_resp
mov ah,09h
int 21h
;-------------------------->resta de variables
mov ax,valor1
;sub ax,valor2
mul valor1
call PRINT_NUM
mov ah,00
int 16h
mov ah,00h;---------------->limpia la pantalla
mov al,03h
int 10h
mov dx,offset beta
mov ah,09
int 21h
jmp inicio
;*****************************CUAD*****************************fin
;*****************************TRIA*****************************ini
tria:
mov bh, 0001_1110b
CALL pintar
mov dx, offset mensaje2
mov ah,09h
int 21h
;-------------------------->rellenado de variables
call SCAN_NUM;------------->llama a la funcion scan_num qtoma el numero del teclado y lo guarda en ax
mov valor1,cx;------------->carga el numero a la variable
;-------------------------->muestra el mensaje user para sentirme grande
mov dx, offset mensaje3
mov ah,09h
int 21h
;-------------------------->rellenado de variables
call SCAN_NUM
mov valor2,cx
mov dx, offset texto_resp
mov ah,09h
int 21h
;-------------------------->multiplicacion en si misma
mov ax,valor1;------------->mueve la primeria variable al ax
mov bx,valor2;------------->mueve el siguiente valor al bx porque la multi solo permite un valor
mul bx;-------------------->ax=ax*bx
mov bx,2
div bx;
call PRINT_NUM
mov ah,00
int 16h
mov ah,00h;---------------->limpia la pantalla
mov al,03h
int 10h
mov dx,offset beta;-------->mensaje de salir
mov ah,09
int 21h
jmp inicio
;*****************************TRIA*****************************fin
;*****************************TRAP*****************************ini
trap:
mov bh, 0010_0001b
CALL pintar
mov dx, offset mensaje2
mov ah,09h
int 21h
;-------------------------->rellenado de variables
call SCAN_NUM;------------->llama a la funcion scan_num qtoma el numero del teclado y lo guarda en ax
mov valor1,cx;------------->carga el numero a la variable
;-------------------------->muestra el mensaje user para sentirme grande
mov dx, offset mensaje3
mov ah,09h
int 21h
;-------------------------->rellenado de variables
call SCAN_NUM
mov valor2,cx
mov dx, offset mensaje4
mov ah,09h
int 21h
call SCAN_NUM
mov valor3,cx
mov dx, offset texto_resp
mov ah,09h
int 21h
mov ax,valor1;------------->mueve el valor de la variable a ax
add ax,valor2
mov bx,valor3;------------->mueve el siguiente valor al bx porque la multi solo permite un valor
mul bx;-------------------->ax=ax*bx
mov bx,2
div bx;
call PRINT_NUM
mov ah,00
int 16h
mov ah,00h;---------------->limpia la pantalla
mov al,03h
int 10h
mov dx,offset beta
mov ah,09
int 21h
jmp inicio
;*****************************TRAP*****************************fin
;*****************************SUMASS*****************************ini
;-------------------------->comienza el bloque de sumaplus
sumaplus:
mov bh, 0010_0001b
CALL pintar
mov dx, offset texto_sum
mov ah,09h
int 21h
mov dx, offset esp
mov ah,09
int 21h
mov dx, offset texto_sumS
mov ah,09h
int 21h
mov dx, offset esp
mov ah,09
int 21h
mov ah,01h
int 21h
cmp al,'1'
je sumX
cmp al,'2'
je sumY
mov ah,00
int 16h
mov ah,00h
mov al,03h
int 10h
jmp inicio:
;--------------------->fin del sistema de sumaplus
;*****************************SUMAPLUS*****************************fin
;*****************************SUMA N1*****************************ini
sumX:
mov bh, 0010_0001b
CALL pintar
mov dx, offset texto_sumN
mov ah,09h
int 21h
call SCAN_NUM;------------->llama a la funcion scan_num q toma el numero del teclado y lo guarda en ax
mov dx, offset texto_sumR1
mov ah,09h
int 21h
mov bx,cx; bx=n
mov ax,bx; ax=n
add ax,1; ax=n+1
mul bx;-------------------->ax=ax*bx =n*(n+1)
mov bx,2 ; bx=2
div bx;-------------------->ax=ax/bx = n*(n+1) /2
call PRINT_NUM
mov ah,00
int 16h
mov ah,00h;---------------->limpia la pantalla
mov al,03h
int 10h
mov dx,offset beta
mov ah,09
int 21h
jmp sumaplus
;*****************************SUMA N1*****************************fin
;*****************************SUMA N2*****************************ini
sumY:
mov bh, 0010_0001b
CALL pintar
mov dx, offset texto_sumN
mov ah,09h
int 21h
call SCAN_NUM;------------->llama a la funcion scan_num q toma el numero del teclado y lo guarda en ax
mov dx, offset texto_sumR2 ;imprime msg
mov ah,09h
int 21h
mov bx,cx; bx=n
mov ax,bx; ax=n
add ax,1; ax=n+1
mul bx; ax*bx =n*(n+1) =ax
call PRINT_NUM ;imprim ax
mov ah,00 ;espera teclado
int 16h
mov ah,00h;---------------->limpia la pantalla
mov al,03h
int 10h
mov dx,offset beta
mov ah,09
int 21h
jmp sumaplus
;*****************************SUMA N2*****************************fin
;==========================PINTADO===================================
pintar PROC
mov ah,00;---------------->limpiar pantalla
mov al,03h
int 10h
;imprimir aqui
;pintar fondo
mov ah, 6h ;funcion para scrollear la pantalla un numero de lineas
mov al, 0h ;cero para borrar la pantalla
;mov bh, 0001_1110b ;fondo azul, color de texto amarillo escribe espacios en blanco en el fondo de la pantalla
mov ch, 0 ;x inicial
mov cl, 0 ;y inicial
mov dh, 24 ;x final
mov dl, 79 ;y final
int 10h
RET ; return to caller.
pintar ENDP
;==========================PINTADO===================================
;*****************************FIN*****************************ini
fin:;---------------------->fin del programa
mov dx, offset beta
mov ah,09
int 21h
mov ah,00h
mov al,03h
int 10h
mov ah,00;----pausa para salir
int 16h
ret
;*****************************FIN*****************************fin
;------------------------>
mensaje1 db 13,10,' Calcule el Area de sus figuras favoritas $'
user db 13,10,' UNIVERSIDAD NACIONAL SAN AGUSTIN$'
mensaje2 db 13,10,' Digite el primer lado $'
mensaje3 db 13,10,' Digite el segundo lado $'
mensaje4 db 13,10,' Digite el tercer lado $'
m0 db 13,10,' <0> EXIT $'0>
m1 db 13,10,' <1> Rectangulo $' 1>
m2 db 13,10,' <2> Cuadrado $'2>
m3 db 13,10,' <3> Triangulo $'3>
m4 db 13,10,' <4> Trapecio $'4>
m5 db 13,10,' <5> Sumas $'5>
beta db 13,10,' Saliendo $'
;------------------------>variables
valor1 dw ?
valor2 dw ?
valor3 dw ?
;------------------------>textos de resultados
texto_resp db 13,10,'EL area es: $'
esp db ' ',10,13,'$'
;------------------------>textos de SUM
texto_sumN db 13,10,'Ingrese n:$'
texto_sumR1 db 13,10,'n*(n+1)/2=$'
texto_sumR2 db 13,10,'n*(n+1)=$'
texto_sum db 13,10,'[1] 1+2+3+4...n$'
texto_sumS db 13,10,'[2] 2+4+6+8+...+2n$'
name "Calculadora Asemmbly by (Zerorendan)"
org 100h ; inicio de programa
include 'emu8086.inc' ;Incluye funciones de libreria emu8086
DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
jmp inicio
inicio:
mov bh, 0000_0010b
CALL pintar
mov ax, @data
mov ds,ax
mov dx, offset esp;-------->espacios para los mensajes
mov ah,09;----------------->impresion en pantalla
int 21h
mov dx, offset mensaje1;--->titulo del programa
mov ah,09
int 21h
mov dx, offset user;------->creadores del programa
mov ah,09
int 21h
mov dx, offset m0;------->menu principal
mov ah,09
int 21h
mov dx, offset m1;------->menu principal
mov ah,09
int 21h
mov dx, offset m2;------->menu principal
mov ah,09
int 21h
mov dx, offset m3;------->menu principal
mov ah,09
int 21h
mov dx, offset m4;------->menu principal
mov ah,09
int 21h
mov dx, offset m5;------->menu principal
mov ah,09
int 21h
;=====================================
int 21h
cmp al,'0'
je fin
cmp al,'1'
je rect
cmp al,'2'
je cuad
cmp al,'3'
je tria
cmp al,'4'
je trap
cmp al,'5'
je sumaplus
;=====================================
;*****************************RECT*****************************ini
rect:
mov bh, 0111_1100b
CALL pintar
mov dx, offset mensaje2;---> mensaje para pedir el primer numero
mov ah,09h
int 21h
;-------------------------->rellenado de variables
call SCAN_NUM;------------->llama a la funcion scan_num q toma el numero del teclado y lo guarda en ax
mov valor1,cx;------------->carga el numero a la variable
;-------------------------->muestra el mensaje user para sentirme grande
mov dx, offset mensaje3;---> mensaje para pedir el segundo numero
mov ah,09h
int 21h
;-------------------------->rellenado de variables
call SCAN_NUM;------------->llama a la funcion scan_num q toma el numero del teclado y lo guarda en ax
mov valor2,cx;------------->carga el numero a la variable
mov dx, offset texto_resp;->muestra el resultado
mov ah,09h
int 21h;------------------->interrupcion pantalla
;-------------------------->suma de las variables
mov ax,valor1;------------->mueve el valor de la variable a ax
;add ax,valor2;------------->suma entre la region ax y la variable
mul valor2;-------------------->ax=ax*bx
call PRINT_NUM;------------> imprimiendo en pantalla el resultado
mov ah,00;----------------->espera por una tecla en pantalla
int 16h
mov ah,00h;---------------->limpia la pantalla
mov al,03h
int 10h
mov dx,offset beta;-------->muestra el mensaje de salida
mov ah,09
int 21h
jmp inicio
;fin del bloque de suma
;*****************************RECT*****************************fin
;*****************************CUAD*****************************ini
cuad:
mov bh, 0011_1110b
CALL pintar
mov dx, offset mensaje2
mov ah,09h
int 21h
;-------------------------->rellenado de variables
call SCAN_NUM;------------->llama a la funcion scan_num qtoma el numero del teclado y lo guarda en ax
mov valor1,cx;------------->carga el numero a la variable
;-------------------------->muestra el mensaje user para sentirme grande
; mov dx, offset mensaje3
; mov ah,09h
;int 21h
;-------------------------->rellenado de variables
; call SCAN_NUM
;mov valor2,cx
mov dx, offset texto_resp
mov ah,09h
int 21h
;-------------------------->resta de variables
mov ax,valor1
;sub ax,valor2
mul valor1
call PRINT_NUM
mov ah,00
int 16h
mov ah,00h;---------------->limpia la pantalla
mov al,03h
int 10h
mov dx,offset beta
mov ah,09
int 21h
jmp inicio
;*****************************CUAD*****************************fin
;*****************************TRIA*****************************ini
tria:
mov bh, 0001_1110b
CALL pintar
mov dx, offset mensaje2
mov ah,09h
int 21h
;-------------------------->rellenado de variables
call SCAN_NUM;------------->llama a la funcion scan_num qtoma el numero del teclado y lo guarda en ax
mov valor1,cx;------------->carga el numero a la variable
;-------------------------->muestra el mensaje user para sentirme grande
mov dx, offset mensaje3
mov ah,09h
int 21h
;-------------------------->rellenado de variables
call SCAN_NUM
mov valor2,cx
mov dx, offset texto_resp
mov ah,09h
int 21h
;-------------------------->multiplicacion en si misma
mov ax,valor1;------------->mueve la primeria variable al ax
mov bx,valor2;------------->mueve el siguiente valor al bx porque la multi solo permite un valor
mul bx;-------------------->ax=ax*bx
mov bx,2
div bx;
call PRINT_NUM
mov ah,00
int 16h
mov ah,00h;---------------->limpia la pantalla
mov al,03h
int 10h
mov dx,offset beta;-------->mensaje de salir
mov ah,09
int 21h
jmp inicio
;*****************************TRIA*****************************fin
;*****************************TRAP*****************************ini
trap:
mov bh, 0010_0001b
CALL pintar
mov dx, offset mensaje2
mov ah,09h
int 21h
;-------------------------->rellenado de variables
call SCAN_NUM;------------->llama a la funcion scan_num qtoma el numero del teclado y lo guarda en ax
mov valor1,cx;------------->carga el numero a la variable
;-------------------------->muestra el mensaje user para sentirme grande
mov dx, offset mensaje3
mov ah,09h
int 21h
;-------------------------->rellenado de variables
call SCAN_NUM
mov valor2,cx
mov dx, offset mensaje4
mov ah,09h
int 21h
call SCAN_NUM
mov valor3,cx
mov dx, offset texto_resp
mov ah,09h
int 21h
mov ax,valor1;------------->mueve el valor de la variable a ax
add ax,valor2
mov bx,valor3;------------->mueve el siguiente valor al bx porque la multi solo permite un valor
mul bx;-------------------->ax=ax*bx
mov bx,2
div bx;
call PRINT_NUM
mov ah,00
int 16h
mov ah,00h;---------------->limpia la pantalla
mov al,03h
int 10h
mov dx,offset beta
mov ah,09
int 21h
jmp inicio
;*****************************TRAP*****************************fin
;*****************************SUMASS*****************************ini
;-------------------------->comienza el bloque de sumaplus
sumaplus:
mov bh, 0010_0001b
CALL pintar
mov dx, offset texto_sum
mov ah,09h
int 21h
mov dx, offset esp
mov ah,09
int 21h
mov dx, offset texto_sumS
mov ah,09h
int 21h
mov dx, offset esp
mov ah,09
int 21h
mov ah,01h
int 21h
cmp al,'1'
je sumX
cmp al,'2'
je sumY
mov ah,00
int 16h
mov ah,00h
mov al,03h
int 10h
jmp inicio:
;--------------------->fin del sistema de sumaplus
;*****************************SUMAPLUS*****************************fin
;*****************************SUMA N1*****************************ini
sumX:
mov bh, 0010_0001b
CALL pintar
mov dx, offset texto_sumN
mov ah,09h
int 21h
call SCAN_NUM;------------->llama a la funcion scan_num q toma el numero del teclado y lo guarda en ax
mov dx, offset texto_sumR1
mov ah,09h
int 21h
mov bx,cx; bx=n
mov ax,bx; ax=n
add ax,1; ax=n+1
mul bx;-------------------->ax=ax*bx =n*(n+1)
mov bx,2 ; bx=2
div bx;-------------------->ax=ax/bx = n*(n+1) /2
call PRINT_NUM
mov ah,00
int 16h
mov ah,00h;---------------->limpia la pantalla
mov al,03h
int 10h
mov dx,offset beta
mov ah,09
int 21h
jmp sumaplus
;*****************************SUMA N1*****************************fin
;*****************************SUMA N2*****************************ini
sumY:
mov bh, 0010_0001b
CALL pintar
mov dx, offset texto_sumN
mov ah,09h
int 21h
call SCAN_NUM;------------->llama a la funcion scan_num q toma el numero del teclado y lo guarda en ax
mov dx, offset texto_sumR2 ;imprime msg
mov ah,09h
int 21h
mov bx,cx; bx=n
mov ax,bx; ax=n
add ax,1; ax=n+1
mul bx; ax*bx =n*(n+1) =ax
call PRINT_NUM ;imprim ax
mov ah,00 ;espera teclado
int 16h
mov ah,00h;---------------->limpia la pantalla
mov al,03h
int 10h
mov dx,offset beta
mov ah,09
int 21h
jmp sumaplus
;*****************************SUMA N2*****************************fin
;==========================PINTADO===================================
pintar PROC
mov ah,00;---------------->limpiar pantalla
mov al,03h
int 10h
;imprimir aqui
;pintar fondo
mov ah, 6h ;funcion para scrollear la pantalla un numero de lineas
mov al, 0h ;cero para borrar la pantalla
;mov bh, 0001_1110b ;fondo azul, color de texto amarillo escribe espacios en blanco en el fondo de la pantalla
mov ch, 0 ;x inicial
mov cl, 0 ;y inicial
mov dh, 24 ;x final
mov dl, 79 ;y final
int 10h
RET ; return to caller.
pintar ENDP
;==========================PINTADO===================================
;*****************************FIN*****************************ini
fin:;---------------------->fin del programa
mov dx, offset beta
mov ah,09
int 21h
mov ah,00h
mov al,03h
int 10h
mov ah,00;----pausa para salir
int 16h
ret
;*****************************FIN*****************************fin
;------------------------>
mensaje1 db 13,10,' Calcule el Area de sus figuras favoritas $'
user db 13,10,' UNIVERSIDAD NACIONAL SAN AGUSTIN$'
mensaje2 db 13,10,' Digite el primer lado $'
mensaje3 db 13,10,' Digite el segundo lado $'
mensaje4 db 13,10,' Digite el tercer lado $'
m0 db 13,10,' <0> EXIT $'0>
m1 db 13,10,' <1> Rectangulo $' 1>
m2 db 13,10,' <2> Cuadrado $'2>
m3 db 13,10,' <3> Triangulo $'3>
m4 db 13,10,' <4> Trapecio $'4>
m5 db 13,10,' <5> Sumas $'5>
beta db 13,10,' Saliendo $'
;------------------------>variables
valor1 dw ?
valor2 dw ?
valor3 dw ?
;------------------------>textos de resultados
texto_resp db 13,10,'EL area es: $'
esp db ' ',10,13,'$'
;------------------------>textos de SUM
texto_sumN db 13,10,'Ingrese n:$'
texto_sumR1 db 13,10,'n*(n+1)/2=$'
texto_sumR2 db 13,10,'n*(n+1)=$'
texto_sum db 13,10,'[1] 1+2+3+4...n$'
texto_sumS db 13,10,'[2] 2+4+6+8+...+2n$'
No hay comentarios:
Publicar un comentario