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