miércoles, 13 de marzo de 2013

Ejemplo con procedimientos


Este programa realiza la suma de dos números enteros sin signo en el EMU8086. Lo nuevo de este programa es la declaración y llamada a procedimientos.

Los procedimientos se utilizan para reducir las líneas de código principal y hacerlo más legible. 

org 100h   

jmp start

msg1 db 'digite primer numero: $'
msg2 db 'digite segundo numero: $' 
msg3 db 'resultado= $'
salta db 0Dh,0Ah,24h  
decenas  db ?
unidades db ? 
diez db 0ah    


;procedimiento leer numero
lee_num proc 
    mov ah,01h
    int 21h
    ret 
lee_num endp ;fin de procedimiento  


;procedimiento saltar linea
saltar proc
    mov dx,offset salta  ;saltar a la sig linea
    mov ah,09h
    int 21h
    ret
saltar endp  ;fin de procedimiento


start:

    mov ah,09h ;imprimir primer msg
    lea dx,msg1 
    int 21h    

    call lee_num   

    sub al,30h ;hacemos el ajuste de caracter a numero
    mov bl,al  ;guardar primer numero en bl
    
    call saltar
    
    mov ah,09h    ;imprimir segundo msg
    lea dx,msg2 
    int 21h

    call lee_num   
    
    sub al,30h ;ajustamos el numero
    mov cl,al  ;copiamos a cl

    mov al,bl  ;mover el primer numero a al
    add al,cl  ;sumar los dos numeros
     
    mov ah,0000h  ;pone a cero ah
      
    idiv diez       ;rutina para realizar la 
    mov decenas,al  ;division y encontrar los 
    mov unidades,ah ;numeros en decimal
    mov dx,0000h 
    
    mov ah,00h ;borrar pantalla
    mov al,03h
    int 10h 
    
    mov ah,09h   ;imprimir tercer msg
    lea dx,msg3  ;resultado = ...
    int 21h
    
    add decenas,30h  ;imprimir las decenas
    mov dl,decenas 
    mov ah,02h
    int 21h 
    
    add unidades,30h  ;imprimir las unidades
    mov dl,unidades
    mov ah,02h
    int 21h
      
    mov ah,4ch
    int 21h  

ret

No hay comentarios:

Publicar un comentario