1.-Compara 2 num(><=) 2.-area d un circulo

Menu

1.-Compara 2 num(><=) 2.-area d un circulo

Búsqueda de ejemplos en Ensamblador
;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