Como en cualquier otro lenguaje de programación, hay ocasiones en las
que es necesario hacer que el programa no siga una secuencia lineal, sino que
repita varias veces una misma instrucción o bloque de instrucciones antes de
continuar con el resto del programa, es para esto que se utilizan los ciclos.
Existen 5 tipos de ciclos predefinidos en ensamblador, aunque también se
pueden crear ciclos personalizados por medio de instrucciones de salto las
cuales se verán en la sección 2.6 de este manual.
Los ciclos predefinidos de ensamblador son los siguientes:
LOOP:
Esta función decrementa el valor del registro contador CX, si el valor
contenido en CX es cero ejecuta la siguiente instrucción, en caso contrario
transfiere el control a la ubicación definida por la etiqueta utilizada al
momento de declarar el ciclo.
Ejemplo:
mov
cx,25 :
Número de veces que se repetirá el ciclo, en este caso 25.
ciclo: Etiqueta que se utilizará como referencia para el ciclo
loop.
int
21h: Instrucción contenida dentro
del ciclo (puede contener más de una instrucción).
loop: Ciclo loop que transferirá el
control a la línea de la etiqueta ciclo en caso de que CX no sea cero.
LOOPE:
Esta función decrementa el valor del registro contador CX, si el valor
contenido en CX es cero y ZF es diferente de uno ejecuta la siguiente
instrucción, en caso contrario transfiere el control a la ubicación definida
por la etiqueta utilizada al momento de declarar el ciclo.
Ejemplo:
ciclo: Etiqueta que se utilizará como
referencia para el ciclo loope.
int
21h: Instrucción contenida dentro
del ciclo (puede contener más de una instrucción).
loope: Ciclo loope que transferirá el
control a la línea de la etiqueta ciclo en caso de que CX no sea cero y ZF sea
igual a uno.
LOOPNE:
Esta función decrementa el valor del registro contador CX, si el valor
contenido en CX es cero y ZF es diferente de cero ejecuta la siguiente
instrucción, en caso contrario transfiere el control a la ubicación definida
por la etiqueta utilizada al momento de declarar el ciclo, esta es la operación
contraria a loope.
Ejemplo:
ciclo: Etiqueta que se utilizará como
referencia para el ciclo loopne.
int
21h: Instrucción contenida dentro
del ciclo (puede contener más de una instrucción).
loopne: Ciclo loopne que transferirá el
control a la línea de la etiqueta ciclo en caso de que CX no sea cero y ZF sea
igual a cero.
LOOPZ:
Esta función decrementa el valor del registro contador CX, si el valor
contenido en CX es cero y ZF es diferente de uno ejecuta la siguiente
instrucción, en caso contrario transfiere el control a la ubicación definida
por la etiqueta utilizada al momento de declarar el ciclo.
Ejemplo:
ciclo: Etiqueta que se utilizará como
referencia para el ciclo loopz.
int
21h: Instrucción contenida dentro
del ciclo (puede contener más de una instrucción).
loopz: Ciclo loopz que transferirá el
control a la línea de la etiqueta ciclo en caso de que CX no sea cero y ZF sea
igual a uno.
LOOPNZ:
Esta función decrementa el valor del registro contador CX, si el valor
contenido en CX es cero y ZF es diferente de cero ejecuta la siguiente
instrucción, en caso contrario transfiere el control a la ubicación definida
por la etiqueta utilizada al momento de declarar el ciclo, esta es la operación
contraria a loopz.
Ejemplo:
ciclo: Etiqueta que se utilizará como
referencia para el ciclo loopnz.
int
21h: Instrucción contenida dentro
del ciclo.
loopnz: Ciclo loopnz que transferirá el
control a la línea de la etiqueta ciclo en caso de que CX no sea cero y ZF sea
igual a cero.