Documentos de Académico
Documentos de Profesional
Documentos de Cultura
* 0 *
* 0 *
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 *
* 0 *
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 *
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 *
* 0 *
* 0 *
* 0 *
* 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 *
* 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 *
........... cmp Reg, datoRef jz (jnz) DireccDest ;o jc (jnc) NoCumplCond: ........... ;no cumple condicin ........... DireccDest: ........... ;si cumple condicin ...........
* 0 *
* 0 *
* 0 *
* 0 *
............... 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 *
* 0 *
* 0 *
............. 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 *
........... 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 *
* 0 *
* 0 *
* 0 *
* 0 *
* 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 *
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.