Menu
1.-Compara 2 num(><=)
2.-area d un circulo
;Autor Ulises Cruz Santiago
;URL
;Por Ulises Cruz Santiago Veracuz,Mex.
Data segment
var1 db ?
var2 db ?
label1 db " ------ MENU ------- ",10,13,'$'
label2 db "1.- Area de Un Circulo $"
label3 db "2.- Compara dos Numeros $"
label4 db "3.-Salir $"
label5 db "4.-Ingrese opcion $"
;para comparar
msg5 db "A continuacion se realizara la comparacion...",10,13,'$'
msg4 db " Digita los numeros a comparar: $"
msg1 db " ---El Primero Es Mayor $"
msg2 db " ---El Primero Es Menor $"
msg3 db " ---Son Iguales $"
;para el circulo
msj0 db "______________________________________________________",10,13,'$'
msj1 db 10,13," Introduce el radio del circulo: $"
msj3 db 10,13,10,13,"El Area Del Circulo es : $"
msj4 db " A continuacion se realizara el calculo",10,13,'$'
msj5 db " ",10,13,'$'
msj6 db " ",10,13,'$'
msj7 db " ",10,13,'$'
msj8 db " _____________________________________________________",10,13,'$'
radio db 0
centenas db 0
decenas db 0
unidades db 0
r2 db ?
Data ends
pila segment stack
DW 256 DUP (?)
pila ends
code segment
menu proc near
assume cs:code,ds:data,ss:pila
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax
xor dx,dx
;interlineado
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
;imprime seleccion de menu
mov ah,09h
mov dx,offset label1
int 21h
;interlineado
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
mov dx,offset label2 ;area del circulo
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
mov dx,offset label3 ;comparacion
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
mov dx,offset label4 ;salir
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
mov dx,offset label5 ;opcion elegida
int 21h
;de aki pa bajo
;lee teclado
mov ah,01h
int 21h
;ajunstando el teclado
xor ah,ah
sub al,30h
mov cx,2
; importante lo k se elige se guarda en al y posteriormente se compara al y si JZ esta activada salta ala etiketa indicada
cmp al,1
jz circulo
cmp al,2
jz compara
cmp al,3
jz fin
circulo: call opcion1
compara: call opcion2
fin: call opcion3
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
opcion1 proc near
call cls ; llamada al metodo cls
; imprime titulo
mov ah,09h
lea dx,msj0
int 21h
mov ah,09h
lea dx,msj4
int 21h
; imprime introduce la base mensaje 1
lea dx,msj1
int 21h
; pide la base
mov ah,01h
int 21h
sub al,30h ;
mov radio,al
;*********************** calcula area
mov al,radio
mul radio ; multiplica: al * radioy el resultado queda en al
mov cl,3 ;asigna el valor de pi redondeado
mul cl ;multiplik al por cl que vale 3 se guarda en al o lo kes lo mismo pi *radio^2
mov cl,100
div cl
mov centenas,al
mov al,ah ;el residuo ah es asignado a al para que se realize el desempaquetado
aam ;Instruccion aam divide el registro al , entre 10 y guarda el cociente en ah y el resultant en al.
mov decenas,ah
mov unidades,al
; imprime mensaje 3 el area es
mov ah,09h
lea dx,msj3
int 21h
call imprime3digitos ;llamada a imprimir dos digitos
.exit
;*************************
;Metodos o Procedimientos
imprime3digitos proc near
mov dl,centenas
call impcar
; imprime decenas
mov dl,decenas
call impcar ;primer digito
; imprime unidades
mov dl,unidades
call impcar ;segundo digito
call assemblers ;llamada al metodo assemblers
call menu ;;llamada a menu
ret
endp
assemblers proc near
mov ah,09h
lea dx,msj5
mov ah,09h
lea dx,msj6
int 21h
mov ah,09h
lea dx,msj7
int 21h
mov ah,09h
lea dx,msj8
int 21h
ret
endp
; imprime un solo caracter
impcar proc near
add dl,30h
mov ah,02h
int 21h
ret
endp
; borra
cls proc near
mov ah,00h
mov al,03h
int 10h
ret ;retorna
endp
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;apartir de aki se hace la comparacion
opcion2 proc near
;call cls
mov ah,09h
lea dx,msj0 ;pendiente
int 21h
mov ah,09h
lea dx,msg5
int 21h
mov ah,02h
mov dx,0510h
mov bh,0
int 10h
mov ah,09h
lea dx,msg4
int 21h
mov ah,07h
int 21h
mov ah,02h
mov dl,al
int 21h
mov var1,al
mov ah,07h
int 21h
mov ah,02h
mov dl,al
int 21h
mov var2,al
cmp var1,al
ja primero ;ja mayor ;salta si el bit de acarreo CF o el bit Zero ZF esta desactivado
jb segundo ;salta si el bit de acarreo cf esta activado
je tercero ;salta si la bandera de zero esta prendida
primero: call mayor
segundo: call menor
tercero: call igual
mayor proc near
mov ah,09h
lea dx,msg1
int 21h
jmp salir
ret
mayor endp
menor proc near
mov ah,09h
lea dx,msg2
int 21h
jmp salir
ret
menor endp
igual proc near
mov ah,09h
lea dx,msg3
int 21h
jmp salir
ret
igual endp
; cls proc near
; mov ah,00h
;mov al,03h
;int 10h
;ret ;retorna
;cls endp
salir:
call menu
ret
endp
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
endp
opcion3 proc near
.exit
ret
endp
ret
endp ;fin menu
code ends
end