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.
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.
No hay comentarios.:
Publicar un comentario