viernes, 26 de diciembre de 2008

SC. FOR con preincremento

En este apartado, se tratará cómo realizar que una porción de código, cualquiera, se repita n veces, con la peculiaridad de que todo esté controlado por un "contador" que se va incrementando una vez se ejecute dicho bloque de código deseado.


Declararemos un índice o contador que se encargará de fijar el número de repeticiones, al ser dicha variable de 8-bits, su tamaño máximo, por lo tanto, las repeticiones máximas que serán posibles será de 255 veces.

La sintaxis en un lenguaje de medio-alto nivel es la siguiente:

for(Contador=0; Contador==numero; ++Contador)
{
sentencia; // Bloque de Código
}


La forma de actuar esta sentencia de control es la siguiente: Repetir la sentencia hasta que la variable contador sea igual a la constante numero que determinará el número de repeticiones.

La traducción a código ensamblador sería tal como sigue:

       ·····    ········

clrf Contador ; 0 -> Contador

       movlw numero       ; Número de repeticiones
movwf Numero ; Se carga a Numero

FOR
incf Contador,f ; Contador++
subwf Contador,w ; (Contador) - (W) -> (W)
btfss STATUS,Z ; ¿Contador == numero?
goto Bucle_FOR ; NO -> Sigue con el bucle for
goto Salir ; SI -> Sal del bucle for

Bucle_FOR
       ·····    ········     ; Aqí el bloque de código a repetir
movf Numero,w ; Numero -> (W)
goto FOR ; Sigue con el for
Salir
····· ········
; Fin de repeticiones

Primero se hace un reset a la variable Contador, que será la que se encargue del número de repeticiones del bucle for, posteriormente, se inicializará la variable Numero con la cantidad total de repeticiones.

Una vez inicializadas las variables, se incrementará en una unidad la variable Contador y se comprobará si es igual a Numero, en caso negativo, se ejecutará la sentencia del bucle for, en caso contrario, ser afirmativo, se saldrá del bucle.

Los ciclos de máquina que el código anterior, el cual compone la sentencia for con preincremento, son:

+1 +1 +1 +(+1 +1 +1 +2 +1 +2 +Bloque_Código)·(Contador -1) + (+1 +1 +2 +2) = +9 +(+8 +Bloque_Código)·(Contador -1)

Se puede observar, que el consumo de ciclos de máquina se ve incrementado, si el número de repeticiones es elevado.

0 comentarios: