martes, 9 de diciembre de 2008

Condicional. Mayor que.

En este apartado nos vamos a ocupar de comparar dos datos de 8-bits y ver si el Dato1 es mayor que el Dato2.




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

if (Dato1 > Dato2)
{
sentencia 1; // En caso de ser cierto se ejecuta el Bloque de sentencia 1
}
else
{
sentencia
2;
// En caso contrario se ejecuta el Bloque de sentencia 2
}

La forma de actuar esta sentencia de control es la siguiente: En caso de que los dos datos a comparar, Dato1 sea mayor que el Dato2, se ejecuta el bloque de código denominado sentencia1, en caso contrario, que no sea mayor, se ejecutará el bloque de código llamado sentencia2.

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

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

movfw Dato1 ; Se carga W con el valor Dato1

subwf Dato2,W ; Dato2 - (W) -> (W)
btfss STATUS,Z ; ¿Dato1 == Dato2?
goto NoIgual ; NO -> Salta a NoIgual
goto NoMayor ; SI -> Salta a NoMayor

NoIgual
        btfsc    STATUS,C  ; ¿Dato1 > Dato2?
goto
NoMayor ; NO -> Salta a NoMayor

····· ········
; SI -> Aquí código correspondiente si Dato1 > Dato2

NoMayor
        ·····    ········  ; Aquí código correspondiente si Dato1 no es mayor Dato2

Para esta opción, la primera comprobación que se hace si ambos datos son iguales, ya que si en efecto lo son, sería inmediato, ya que Dato1 no sería mayor que el Dato2. En esta opción, los ciclos de máquina empleados son los siguientes:

+1 +1 +2 +2 = +6

Serían seis ciclos de máquina, ya que la primera comprobación, de que ambos datos sean iguales, daría positivo, por lo que nos mandaría directamente a la porción de código, denominada en este caso, NoMayor.

En caso de que no sea iguales sendos datos, se pasaría a la siguiente comprobación (en este caso, se saltaría a la etiqueta denominada NoIgual), donde se establecerá si el Dato1 es mayor al Dato2. Para ello, se evaluará el estado del bit de borrow (bit C del registro STATUS), el cual hay que prestar mucha atención, ya que su resultado está en lógica inversa, es decir, si se activa, en caso de que sea mayor Dato1 a Dato2, se pondrá a '0', en caso contrario a '1'. Los ciclos de máquina que empleará el PIC para tal propósito será de:

+1 +1 +2 +2 +2 = +8

Y por última opción, es que Dato1 y Dato2 no sean iguales y que Dato1 no sea mayor que Dato2, los ciclos de máquina que se consumirán serán:

+1 +1 +2 +2 +1 +2 = +9

Como se puede apreciar, son sentencias bastantes simples y óptimas por su rapidez de ejecución.

0 comentarios: