Procedimientos en assembler emu8086 [facil]

  • 0 Respuestas
  • 280 Vistas

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado ErielSinh

  • *
  • Underc0der
  • Mensajes: 11
  • Actividad:
    0%
  • Country: 00
  • Reputación 1
  • The karma is a bitch
    • Ver Perfil

Procedimientos en assembler emu8086 [facil]

  • en: Diciembre 10, 2020, 01:27:50 am
En muchos lenguajes de programacion utilizamos las funciones, despues de declarar una funcion la invocacion n veces en la funcion principal, en assembler el equivalente a esto son los procedimientos, empezamos con un ejemplo facil
Programa para imprimir n veces una cadena en assembler utilizando un procedimiento
Código: [Seleccionar]
include 'emu8086.inc'
org 100h     
 ; utilizaremos un loop para imprimir 5 veces nuestro procedimiento
 mov cx,5  ;movemos el valor 5 a cx para que el loop se repita 5 veces
 repetir:
 call programita ; llamamos a nuestro procedimiento
  loop repetir         
ret             
programita proc; creamos un procedimiento llamado programita
    mov ax,2 ; movemos a ax el valor de 2
    call pthis ; 
    db 13,10,'mensaje',0 ; imprimimos la cadena 'mensaje'
    ret
    programita endp ; terminamos el procedimiento con endp

DEFINE_PTHIS
DEFINE_PRINT_STRING
DEFINE_SCAN_NUM
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS   
END
podemos repetir n veces nuestro procedimiento cuando lo necesitemos lo que nos permite ahorrar mucho codigo en programas grandes
ejecutamos en emu8086
seguimos con otro ejemplo, la practica hace al maestro
Programa para imprimir una lista de n valores mediante procedimientos
Código: [Seleccionar]
;imprimir una lista de n valores mediante procedimientos
include 'emu8086.inc'
org 100h 
; DEFINIMOS VARIABLES
mov bx,0
print 'ejercicio 2'
printn ''
print 'ingrese el tamaño de la lista: '
call scan_num ;el se guarda en cx
printn ''       

suma: 
 call ejercicio2
 printn ''
 loop suma       
ret

 ejercicio2 proc
    mov ax,lista[bx]
print '['
    call print_num
    print ']'
    add bx,2     
    ret 
    ejercicio2 endp 
 
DEFINE_PTHIS
DEFINE_PRINT_STRING
DEFINE_SCAN_NUM
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
lista dw 8,1,2,5,4
END
ejecutamos en emu8086
Otro ejercicio
Imprimir el mayor de una lista mediante procedimientos en assembler
Código: [Seleccionar]
include 'emu8086.inc'
org 100h 
mov bx,0
print 'ejercicio 3'
printn ''
call ejercicio3
ret
 ejercicio3 proc
 mov cx,5;definir tamaño de la lista
   
    recorrer:
        mov ax,lista[bx]
        ;call print_num
        ;printn ''
        cmp ax,mayor
        jg cambiar
        jmp continuar
            cambiar:
               mov mayor,ax
            continuar:
           
            add bx,2
    loop recorrer

    mov ax,mayor
    print 'el numero mayor de la lista es: '
    call print_num

    ret 
    ejercicio3 endp 
lista dw 3,1,2,5,4
mayor dw 0
DEFINE_PTHIS
DEFINE_PRINT_STRING
DEFINE_SCAN_NUM
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS

END

otro ejemplo
Buscar un numero en un vector con procedimientos en assembler
Código: [Seleccionar]
include 'emu8086.inc'
org 100h 
mov bx,0 

print 'ejercicio 4'
printn ''
print 'ingrese un numero a buscar en el vector '
call scan_num
printn ''
 call ejercicio4
 fin:
 
ret 
 ejercicio4 proc 
  mov acomparar,cx
  mov cx,5
  recorrer:   
  mov ax,lista[bx]
  call print_num
  print ' '
  add bx,2
  cmp ax,acomparar
  je esIgual
 
 loop recorrer
  printn ''
  printn ' el numero no esta en la lista'
  jmp fin
    ejercicio4 endp   
   
  esIgual proc
    lea si,mensaje1
    printn ''
    call print_string
    ret   
    jmp fin
    esIgual endp
 
   
lista dw 3,1,2,5,4
acomparar dw 0
DEFINE_PTHIS
DEFINE_PRINT_STRING
DEFINE_SCAN_NUM
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
mensaje1 db 13,10,' el valor buscado esta en el vector '
 
END
haciendo la prueba en emu8086
« Última modificación: Diciembre 16, 2020, 09:39:31 pm por ErielSinh »