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
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