suma,resta,multiplicacion,divicion con decimales y codigo ascii

calculadora basica

suma,resta,multiplicacion,divicion con decimales y codigo ascii

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