sábado, 13 de diciembre de 2008

SC. For con postdecremento

En este apartado nos vamos a ocupar de realizar un bucle de repetición con postdecremento. 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=numero; Contador==0; 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 cero.

Hay que tener en cuenta, que en este caso, el bucle es postdecremento, esto quiere decir que primero se evaluará la variable Contador y posteriormente se decrementará en una unidad.

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

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

movlw numero ; Número de repeticiones: numero
addlw d'1' ; (W) + 1 -> (W)
movwf Contador ; Se carga a Contador

FOR

decfsz Contador,f ; ¿--Contador == 0?
goto Bucle_For ; Ejecuta el bloque de sentencia
goto Salir ; NO -> Sal del FOR

Bucle_For

       ·····    ········          ;  Aquí el código a repetir
goto FOR ; Vuelve al FOR

Salir
····· ········
; Fin de repeticiones

El código, es bastante parecido al expuesto en: Bucle For con predecremento. Lo que cambia es que se incrementa en una unidad la variable Contador para asegurarnos que realmente haga las funciones de un verdadero bucle for con postdecremento.

Por ello, se añade un ciclo de máquina más por la instrucción de incrementar en una unidad la variable Contador:

+1 +1 +1 +(numero - 1)·(+1 +2 +2 +Bloque_Código) +2 +2 = +7 +(numero - 1)·(+5 +Bloque_Código)

Donde en numero es el número de repeticiones (menos una, ya que este bucle es predecremento) y Bloque_Código corresponde a los ciclos de máquina correspondiente a la porción de código que se va a repetir.

Como se puede apreciar, son sentencias bastantes simples y óptimas por su rapidez de ejecución, donde los ciclos de máquina varía dependiendo del código a repetir y del número de veces.

0 comentarios: