Ir al contenido

Comparar dos registros

Todas las comparaciones entre dos registros A y B pasan por calcular A − B con MOVF B,W y SUBWF A,W, luego leer C y Z.

MOVF B,W
SUBWF A,W
BTFSS STATUS,Z ; Z=1 → iguales
GOTO A_NO_IGUAL_B
GOTO A_IGUAL_B
Si A=BA−BZC
Si011
MOVF B,W
SUBWF A,W
BTFSC STATUS,C ; C=0 → A < B
GOTO A_ES_MENOR_B
GOTO A_NO_ES_MENOR_B

Cuando A < B (unsigned), hay prestamoC = 0.

MOVF B,W
SUBWF A,W
BTFSS STATUS,C ; ¿C=1?
GOTO A_NO_ES_MAYOR_B
BTFSS STATUS,Z ; ¿Z=0? (no iguales)
GOTO A_ES_MAYOR_B
GOTO A_NO_ES_MAYOR_B

A > B requiere C = 1 y Z = 0 (sin prestamo y resultado no cero).

Solo necesitas C = 1 (incluye el caso A = B donde Z = 1):

MOVF B,W
SUBWF A,W
BTFSS STATUS,C
GOTO A_MENOR_B
; aqui A >= B

C = 0 o Z = 1:

MOVF B,W
SUBWF A,W
BTFSS STATUS,Z ; A = B
GOTO A_IGUAL_B
BTFSC STATUS,C ; A < B si C=0
GOTO A_MENOR_B
; ...
Operacion A−BCZComprobar (nota del PDF)
A = B11Z
A > B10C y Z
A < B00C
A ≥ B10 o 1C
A ≤ B0 o 11C o Z

Tras MOVF B,W y SUBWF A,W:

CasoABA−BCZ
a)1010011
b)53210
c)27prestamo00

Ejercicio · Parcial

Completar tabla

A=15, B=8 → ¿C? ¿Z?
A=0, B=1 → ¿C? ¿Z?

Solucion: A=15,B=8 → C=1,Z=0. A=0,B=1 → C=0,Z=0.

Enunciado: Si REG1 es mayor que REG2, saltar a la etiqueta MAYOR.

COMPARAR
MOVF REG2,W
SUBWF REG1,W ; REG1 - REG2
BTFSS STATUS,C ; C=0 → no es mayor (REG1 < REG2)
GOTO FIN_COMP
BTFSS STATUS,Z ; Z=1 → son iguales
GOTO MAYOR ; C=1 y Z=0 → REG1 > REG2
FIN_COMP
RETURN
MAYOR
; codigo cuando REG1 > REG2
RETURN

Variante con una sola rama a MAYOR y RETURN en otro lado segun pida el enunciado.

Si el enunciado dice “¿REG2 mayor que REG1?”, calcula REG2 − REG1:

MOVF REG1,W
SUBWF REG2,W ; REG2 - REG1
; luego mismas pruebas de C y Z
  • MOVF,F + Z para cero (teoria)
  • Explicar C y Z en resta (teoria)
  • Tabla A=10,B=10 / 5,3 / 2,7
  • Subrutina REG1 > REG2
  • Saber cuando usar solo C, solo Z, o ambos
Examen interactivo

Comparar dos registros — parcial

Basado en: Clase Tema 4 y 5.pdf

0 de 0 respondidas

Para saber si un registro es igual a CERO se usa preferentemente...
MOVF REGISTRO,F compara con cero usando la bandera...
Para comparar si A = B (registros) la secuencia base es...
Tras MOVF B,W y SUBWF A,W (A-B), si A=10 y B=10, Z y C valen...
Si A=5 y B=3, tras A-B la bandera Z es...
Si A=2 y B=7 (A<B en unsigned), tras A-B la bandera C es...
Para A > B debes comprobar que C=1 y...
Es correcto afirmar que A-B y B-A dan el mismo resultado en STATUS...
Tras A-B con A=2 y B=7 (unsigned), C y Z son...
Para A=B tras MOVF B,W y SUBWF A,W, Z vale...