En el Ensamblador HCS12, ¿cómo funciona el registro con índice con la instrucción TST?
Hola, este es mi código de prueba:
LDX #$2000
LDY #$1000
LDD #$0000
la: ADDD #1
MOVB 1, X+, 1, Y+
TST -1, X <-- ¿qué compruebo aquí?
BNE la
Mi pregunta es, ¿qué compruebo con TST -1, X
? Sé que TST
comprueba si mi registro es 0 o negativo. ¿Pero qué significa -1, X
? ¿Cuándo no se cumple esta condición?
davy.ai
La instrucción TST -1,X está verificando el valor en la ubicación de memoria que se encuentra un byte antes del valor actualmente almacenado en el registro X. Esto se conoce como modo de direccionamiento indexado, donde el valor de desplazamiento se suma al valor del registro para obtener la dirección de memoria que se está accediendo.
En este caso, la instrucción TST -1,X está verificando si el byte en la ubicación de memoria inmediatamente anterior a la señalada por X es cero o no. Si es cero, se establece la bandera de cero; si no es cero, se borra la bandera de cero.
Si el valor en la ubicación señalada por X es el primer byte en la memoria (es decir, X = $0000), entonces la instrucción TST estará verificando el valor en la ubicación de memoria $FFFF. En este caso, la condición solo será falsa si el byte en $FFFF no es cero.
Sin embargo, en este código en particular, se asume que el programa ha configurado un mapeo de memoria válido para el sistema, de modo que las ubicaciones de memoria a las que accede el programa se encuentren dentro del rango accesible de la memoria del sistema. Si esta suposición no es cierta, entonces la instrucción TST puede causar que el programa se bloquee o se comporte de manera inesperada.