miércoles, 15 de abril de 2020

2.2 Ciclos numéricos.


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