viernes, 21 de noviembre de 2008

Condicional. Mayor o igual que

En este apartado nos vamos a ocupar de comparar dos datos de 8-bits y ver si el Dato1 es mayor o igual 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,C ; ¿Dato1 >= Dato2?
goto NoIgual ; NO -> Salta a NoIgual

····· ········ ; SI -> Aquí código correspondiente
NoIgual
····· ········ ; Aquí código correspondiente si no es igual

Para comprobar o analizar si dos datos son iguales en código ensamblador, se restan entre sí, en caso de que Dato1 sea mayor o igual que el Dato2, el bit de carry, bit C, del registro STATUS se pondrá a '1' lógico y saltará la siguiente instrucción, ejecutándose el bloque de código de la sentencia 1.

En caso contrario, que los datos no sean iguales, el bit de carry, bit C, del registro STATUS se pondrá a '0' lógico, por lo que se ejecutará la siguiente instrucción que saltará al bloque de código de la sentencia 2.

Como se puede apreciar, el código ensamblador es compacto y reducido, los cíclos de máquina en caso de que el Dato1 sea mayor o igual que el Dato2 son:

+1 +1 +2 = +4

Un ciclo de máquina para cargar el registro de trabajo W con el dato a comparar, Dato1, y otro ciclo de máquina más, para la operación de resta entre Dato1 y Dato2. Posteriormente, en caso de que Dato1 sea mayor o igual que el Dato2, se saltará la siguiente instrucción, por lo que consumirá dos ciclos de máquina. En total, la operación condicional de analizar si dos datos son iguales son de cuatro ciclos de máquina.

En caso contrario, que ambos datos sean distintos, tendremos:

+1 +1 +1 +2= +5

Un ciclo de máquina para cargar el registro de trabajo W con el dato a comparar, Dato1, y otro ciclo de máquina más, para la operación de resta entre Dato1 y Dato2. Posteriormente, en caso de no ser los dos datos iguales o que el Dato1 sea menor que el Dato2, se ejecutará la siguiente instrucción, por lo que consumirá otro ciclo de máquina más. Posteriormente se saltará al bloque de código de sentencia 2. En total, el consumo de ciclos de máquina son cinco.

Como se ha podido demostrar y mencionado anteriormente, el uso de la instrucción condicional para analizar si dos datos son iguales, es óptimo por el bajo consumo de ciclos de máquina.

0 comentarios: