You are on page 1of 33

* 0 *

1.- Decisiones con Procesadores


(Sin esta capacidad, servira muy poco esta electrnica.)
sbm/UTFSM Sede Concepcin

* 0 *

2.- Para tomar una decisin.


(Racionalmente, se entiende) Cuando debemos tomar una decisin, en primer lugar EVALUAMOS el estado de una situacin, para luego, en funcin de la evaluacin, tomar una ruta de accin u otra. La evaluacin ms elemental consiste en comparar el estado actual del caso, contra un patrn o una referencia dada.

* 0 *

3.- La comparacin (1)


(Comparar es RESTAR)

Una comparacin es bsicamente establecer la diferencia entre el estado actual del caso y el patrn o referencia dada. La comparacin es siempre una sustraccin o resta, la que en el mundo binario puede producir, 0, si el estado actual es mayor o igual a la referencia dada. 1, si el estado actual es menor a la referencia dada.

* 0 *

4.- La comparacin (2)


(Comparar es Restar) Una comparacin se hace tambin con el objeto de conocer si el estado del caso es IGUAL o DISTINTO al de una referencia dada. Entonces, al hacer la resta produce en el mundo binario, 0, si el estado actual es igual al de la referencia dada. 1, si el estado actual difiere al de la referencia dada.

* 0 *

5.-Dos sealizadores bsicos


Sealizadores o banderas (flags); son BITS.

Producida la comparacin (resta), electrnicamente es posible detectar los casos (1) y (2) establecidos anteriormente, usando un par de sealizadores o banderas bsicas. Estos sealizadores son: C (o CY), bandera de Acarreo o Prstamo (carry) Z, bandera de Cero (zero)

* 0 *

6.- Banderas de Cero (Z) y Acarreo (C, CY)


Banderas infaltables en todo Procesador

La bandera Z (zero) anuncia con el estado 1 (Z=1) si la comparacin produjo 0, lo que significa que los valores comparados son iguales. Si son distintos, la bandera se pone en el estado 0, es decir, Z=0.
La bandera C (o CY) anuncia con el estado 1 (C=1) si la comparacin detect que el valor es menor que el valor de referencia dado. En cambio, si el valor es mayor o igual, anuncia con C=0 esta condicin.

* 0 *

7.- La electrnica interna


En el Procesador, a nivel de la ALU o RALU

* 0 *

8.- La sustraccin y la comparacin


Para los Procesadores no es lo mismo. La Resta o sustraccin produce una diferencia que se deposita en el Acumulador (o en el registro definido para el resultado). La COMPARACION es una resta que tan slo produce un resultado booleano, afectando las banderas. No produce resultado diferencia, con lo que el estado del registro (o Acumulador) que contiene el estado del caso, no se afecta.

* 0 *

9.- Algunos ejemplos.


Veamos como se generan los estados de Z y C La instruccin tpica: cmp A, datoRef Sea datoRef=45H Si A= 56H, 56H-45H = 11H y Z=0, C=0 Si A= 45H, 45H-45H = 0 y Z=1, C=0 Si A= 32H, 32H-45H = 1EDH y Z=0, C=1 Note en este ltimo caso que se produce un bit de prstamo (borrow) o bit de acarreo. En realidad el resultado es FFFFF....FFFFEDH = 111111...111 1110 1101B

* 0 *

10.- Ms claro an ...


32H - 45H = ?
12 H 32H -45H 1EDH (2-5) necesita prstamo del 3, el que queda en 2. Entonces 12H-5 = DH. Sigue entonces con (2-4), el que necesita un bit de prstamo; ste bit excede la capacidad de la barra y se anuncia como Acarreo. Entonces 12H-4=EH.

* 0 *

11.- En resumen
Al momento Entonces, contando con la instruccin de COMPARACION (resta que slo afecta banderas), ms las banderas de CERO (Z) y ACARREO (C), es posible detectar cualquier situacin numrica.

Note: CMP A, B A>B Produce Z=0 y C=0 A=B Produce Z=1 y C=0 A<B Produce Z=0 y C=1
(Z=1 y C=1 carece de sentido al comparar.)
(En una suma se puede producir Z=C=1)

* 0 *

12.- Las instrucciones de bifurcacin condicional.


jz (jnz) Direcc, jc (jnc) Direcc
Para tomar decisiones los Procesadores tienen instrucciones de bifurcacin (o salto = jump) condicional. Estas instrucciones consultan el estado de las banderas antes de ejecutarse y se ejecutan de una u otra manera dependiendo de esos estados. Las instrucciones bsicas son

JZ (JNZ) DirecDestino JC (JNC) DirecDestino

* 0 *

13.- JZ (JNZ)
Bifurcar si cero (o no cero)
Estas instrucciones siguen siempre despus de una instruccin de comparacin. JZ DirecDest, Saltar o bifurcar (jump) si la comparacin produjo cero (Z=1), a la direccin DirecDest especificada. Si no es el caso, el programa sigue con la instruccin siguiente. JNZ DirecDest, Saltar o bifurcar (jump) si la comparacin NO produjo cero (Z=0), a la direccin DirecDest especificada. Si no es el caso, el programa sigue con la instruccin siguiente.

* 0 *

14.- JC (JNC)
Bifurcar si aCarreo (o si no aCarreo)
Estas instrucciones siguen siempre despus de una instruccin de comparacin. JC DirecDest, Saltar o bifurcar (jump) si la comparacin produjo acarreo (C=1), a la direccin DirecDest especificada. Si no es el caso, el programa sigue con la instruccin siguiente. JNC DirecDest, Saltar o bifurcar (jump) si la comparacin NO produjo acarreo (C=0), a la direccin DirecDest especificada. Si no es el caso, el programa sigue con la instruccin siguiente.

* 0 *

15.- La estructura bsica


Para hacer una decisin usando un programa

........... cmp Reg, datoRef jz (jnz) DireccDest ;o jc (jnc) NoCumplCond: ........... ;no cumple condicin ........... DireccDest: ........... ;si cumple condicin ...........

* 0 *

16.- El caso Intel MCS51 (1)


Pareciera no tener instruccin CMP
Algunos Procesadores combinan la instruccin de la bifurcacin condicional con la de comparacin, en una sla instruccin. Es el caso de Intel MCS51, que NO TIENE instruccin CMP; tiene en cambio: cjne A, #dato, DireccDest Comparar el contenido de A (o R0 ... R7) con un dato, y si no son iguales (Not Equal) bifurca (jump) a la direccin indicada. Si son iguales, el Procesador lee y ejecuta la instruccin que sigue.

* 0 *

17.- El caso Intel MCS51 (2)


Puede usarse SUBB (clr C) En lugar de CMP puede usarse SBB (substraccin con borrow), haciendo previamente clr C (C=0). Adems, estos Procesadores poseen ( cmo no ! ) JZ, JNZ, JC, JNC Usando adecuadamente CJNE, en conjunto con JC y JNC es posible hacer cualquier decisin.

* 0 *

18.- Decisiones con Intel MCS51 (1)


Caso 1: A = datoR
.......... cjne A, #datoR, NOCUMPLE SICUMPLE: ............ ;NO EXISTE CJE, ... ............ NOCUMPLE: ........... ........... Si A=datoR, la comparacin produce Z=1 y C no interesa. Basta con detectar Z.

* 0 *

19.- Decisiones con Intel MCS51 (2)


Caso 2: A distinto datoR

............... cjne A, #datoR, CUMPLE NOCUMPLE: .............. ;OJO: no existe CJE, ... .............. CUMPLE: .............. .............. Si A es distinto de datoR, Z=0 y el estado de C no interesa. Basta con detectar Z.

* 0 *

20.- Decisiones con Intel MCS51 (3)


Caso 3: A > datoR
......... cjne A, #datoR, NOIGUAL jmp NOCUMPLE ;bifurca sin condicin NOIGUAL: jnc SICUMPLE NOCUMPLE: ............... ............. SICUMPLE: ............. ............. Si A>datoR produce Z=0 y C=0.

* 0 *

21.- Decisiones con Intel MCS51 (4)


Caso 4: A mayor o igual a datoR
.......... cjne A, #datoR, NOIGUAL jmp SICUMPLE ;bifurca incondicionalmente NOIGUAL: jnc SICUMPLE NOCUMPLE: ................ ................ SICUMPLE: ............... ............... Si A es mayor o igual a datoR, entonces Z=1 o bien C=0.

* 0 *

22.- Decisiones con Intel MCS51 (5)


Caso 5: A menor que datoR

............. cjne A, #datoR, NOIGUAL jmp NOCUMPLE NOIGUAL: jc SICUMPLE NOCUMPLE: .............. .............. SICUMPLE: ............... .............. Si A < datoR se produce Z=0 y C=1. En realidad, basta con detectar C=1 dado que si C=1, Z=0 y en caso alguno puede producirse Z=1.

* 0 *

23.- Decisiones con Intel MCS51 (6)


Caso 6: A menor o igual a datoR

........... cjne A, #datoR, NOIGUAL jmp SICUMPLE ;salto incondicional NOIGUAL: jc SICUMPLE NOCUMPLE: ............ ............ SICUMPLE: ............ ............ Si A es menor o igual a datoR, se produce Z=1 o bien C=1.

* 0 *

29.- Iteracin con CJNE


.. mov R3, #0 ;contador TAREA: inc R3 ;hacemos una .. ;la tarea . . cjne R3, #TOTAL, TAREA HECHO: ..

* 0 *

30.- Otras Banderas tpicas


Existen otras banderas, facilitan las decisiones. Adems de las bandera de Cero y de Acarreo, Acarreo Auxiliar; anuncian rebalse a nivel de 4 bits y es usada en aritmtica en BCD. Paridad, para la deteccin de errores a nivel de bytes, en comunicaciones simples. Overflow, anuncia rebalse a nivel de 7 bits y es usada en aritmtica CON signo. Signo, anuncian con un 0 si la cantidad es positiva o cero; con un 1 si es negativa.

* 0 *

31.- Otras instrucciones


Facilitan las decisiones
Otros Procesadores procesan internamente el estado de las banderas para ampliar la cantidad de instrucciones para hacer decisiones. Por ejemplo, en Intel x86: jz, jnz je (jne) jc, jnc jb (jnb) ja (jna) jbe (jnbe) jae (jnae) etc., etc..
e=equal (igual), b=bellow (debajo), a=above (encima)

* 0 *

32.- Algunos procesadores


Poseen instrucciones para realizar comparaciones (decisiones) a partir de valores enteros CON SIGNO. Diferencian la expresin de las instrucciones. Por ejemplo: ja, jb, . above, bellow, para valores SIN signo. jg, jl, . greater, lower, para valores CON signo.

* 0 *

33.- Particularidades de INTEL MCS51 ( ATENCION !!! ).


DEC, INC no afectan banderas. (.. dec Reg, jz DIRECC.. no funciona !) JZ, JNZ consultan el estado del Acumulador, no el estado de la bandera Z. (no hay bandera Z (cero) disponible). CJNE es propia de estos Procesadores.

* 0 *

34.- Un ejemplo
Dato entre 30H y 39H, ambos inclusive, hacer TAREA1, Dato menor que 30H y mayor que 39H, hacer TAREA2. .. cjne A, #30H, SIGUE1 jmp TAREA1 ;A=30H SIGUE1: jc TAREA2 ;A<30H cjne A, #39H, SIGUE2 ;A>30H jmp TAREA1 ;A=39H SIGUE2: jnc TAREA2 ;A>39H TAREA1: .. ;A<39H . TAREA2: ..

* 0 *

35.- Ejemplo
Contar la cantidad de datos iguales a 100 que hay en un conjunto de datos terminado con la marca 0. INICIO: ATRS: movc A, @A+DPTR cjne A, #0, SIGUE0 jmp FINAL ;es 0, termina. cjne A, #100, SIGUE1 inc R7 ;Es 100. R7 es contador inc DPTR jmp ATRS ..

SIGUE0: SIGUE1:

* 0 *

36.- Otro Ejemplo.


INICIO:

mov R2, #150 COMPARA: cjne A, 2, SEGUIR jmp PONE_0 SEGUIR: jc PONE_1 PONE_0: clr P1.0 mov R2, #125 jmp COMPARA PONE_1: setb P1.0 mov R2, #150 jmp COMPARA

* 0 *

37.- Discutir
En todas las otras tecnologas de uP, las instrucciones equivalente siguientes tienen sentido. movx A, @DPTR add A, #0 ;raro objetivo? jnz NOCERO SICERO: ;add A, #0 tambin orl A, #0 anl A, #0FFH y otras.
En cambio, en INTEL MCS51 (y slo en esos) puede usar lo siguiente correctamente: movx A, @DPTR jnz NOCERO SICERO: ..

* 0 *

38.- FIN
Fin con este tema. Ahora hay que hacer prcticas.

sbm/UTFSM Sede Concepcin.