martes, 12 de marzo de 2019

Programas implementando la instruccion de LOOP

En esta entrada, veremos diferentes formas de utilizar la instrucción LOOP y sus otras versiones dentro de nuestro emu8086.
Originalmente, loop se utiliza para que un ciclo se realice diferentes veces. Sin embargo,existen otras formas en que loop puede ser implementado.

Sintaxis 1


.model tiny
name "Bucle"

.data
    dato db 10,13 ,'Letrero $'
    
.code
    Inicio:
    mov cx,50
    comienzo:
    mov dx,OFFSET dato
    mov ah,09
    int 21h  
    ;inc cx
   loop comienzo
ret




Sintaxis 2 :Uso de loop con la libreria emu8086
org 100h         
include 'emu8086.inc'
  
  mov cx,10   ;Vueltas que va a dar el programa
  
  comienzo:
  printn 'letrero'
  
 loop comienzo


ret



Sintaxis 3: Uso de variantes del loop
En este ejemplo, utilizamos la instrucción loopne en donde, el loop lo comenzara a realizar solo si cx no es igual a cero(algo parecido a lo que hace normalmente loop)

.model tiny
name "Bucle"

.data
    dato db 10,13 ,'Letrero $'    
.code
    Inicio:
    mov cx,10
    comienzo:
    ;mov dx,OFFSET dato
    mov ah,09   
    lea dx,dato
    int 21h  
    ;inc cx
   loopne comienzo
ret





Con el siguiente ejemplo, aquí ya cambia un poco su funcionamiento. jcxz es un tipo de salto condicional que solo se hará si en nuestro registro cx tenemos un cero.
Así es como, al correr este programa se realiza la impresión una sola vez del mensaje en la pantalla, porque al momento de comparar la instrucción con el registro cx ve que tenemos guardado un 10 en el.
Por lo tanto, no volverá a donde se encuentra la instrucción comienzo.
.model tiny
name "Bucle"

.data
    dato db 10,13 ,'Letrero $'
    
.code
    Inicio:
    mov cx,10
    comienzo:
    ;mov dx,OFFSET dato
    mov ah,09   
    lea dx,dato
    int 21h  
    ;inc cx
   jcxz comienzo ;Solo hara el ciclo cuando cx sea 0


ret



Nota:En varios de estos programas podemos ver que hay un comentario en la linea de un incremento en CX. Esto es porque, si dejamos el incremento dentro del ciclo nunca terminara con su ejecucion aun y que tenga un 1 dentro de cx, con ese incremento no permitira que cx llegue a 0 nunca.
Al iniciar tendriamos en este ultimo programa un 10 en CX, con el incremento sube a 11. Al pasar por el LOOP lo baja a 10,y todo lo anterior vuelve a repetirse en consecuencia, nunca se va a llegar al 0 y siempre se mantendrá entre ese 10 y 11

No hay comentarios.:

Publicar un comentario