domingo, 31 de marzo de 2013

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

miércoles, 6 de marzo de 2013

Suma de dos número enteros sin signo en ensamblador

El programa que se muestra a continuación se ha compilado con el emulador 8086 para Intel. Se trata de sumar dos números enteros sin signo, la idea es que tengan acceso a un programa bastante sencillo y lo mejoren....

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

start:

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

    mov ah,01h ;leer primer numero
    int 21h   

    sub al,30h ;hacemos el aguste de caracter a numero
    mov bl,al  ;guardar primer numero en bl
   
    mov dx,offset salta  ;saltar a la sig linea
    mov ah,09h
    int 21h
   
    mov ah,09h    ;imprimir segundo msg
    lea dx,msg2
    int 21h

    mov ah,01h ;leer segundo numero
    int 21h   
   
    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