MSP430: cómo verificar los tipos de direccionamiento

Estoy programando un MSP430 en lenguaje C como simulación de un microcontrolador real. Me quedé atascado en los modos de direccionamiento ( https://en.wikipedia.org/wiki/TI_MSP430#MSP430_CPU ), especialmente:

  • Modos de direccionamiento usando R0 (PC)
  • Modos de direccionamiento usando R2 (SR) y R3 (CG), decodificación de casos especiales

    1. No entiendo qué significa 0 (PC), 2 (SR) y 3 (CG). ¿Lo que ellos son?
    2. ¿Cómo comprobar estos valores?
El artículo Wiki explica: R0 (PC) es el contador del programa, R1 (SP) el puntero de la pila, R2 (SR) el registro de estado (indicador de acarreo y modos de ahorro de energía) - y R3 (CG) genera valores constantes sin requerir el espacio que requerirían como valores literales. Como estas son direcciones de registro, no modos, realmente no puedo entender lo que está preguntando. ¿Quizás explicar un poco más lo que no entiendes?
¿Entiendo correctamente que está tratando de escribir un emulador MSP430 en C?

Respuestas (1)

Entonces, para la fuente, si los bits AS son 01 y los bits de registro fuente son 0, que es la PC de referencia, entonces

DIRECCIÓN simbólica. Equivalente a x(PC). El operando está en la memoria en la dirección PC+x.

si el bit de anuncio es un 1 y el destino es un 0, entonces también

DIRECCIÓN simbólica. Equivalente a x(PC). El operando está en la memoria en la dirección PC+x.

x va a ser otra palabra que sigue a esta instrucción, por lo que la CPU buscará la siguiente palabra, la agregará a la PC y esa es la fuente

si los bits as son 11 y la fuente es el registro 0, la fuente es un valor inmediato que se encuentra en la siguiente palabra después de la instrucción.

si los bits as son 01 y la fuente es un 2 que resulta ser el registro SR como referencia, entonces la dirección es x la siguiente palabra después de la instrucción (&ADDR)

si el bit de anuncio es un 1 y el registro de destino es un 2, entonces también es un &ADDR

si los bits as son 10, los bits fuente son 2, entonces la fuente es el valor constante 4 y no tenemos que grabar una palabra en flash después de la instrucción para ese 4.

no tiene sentido que un destino sea un 4 constante, por lo que no es una combinación real.

repita para el resto de la mesa.

puede tener ambos modos de direccionamiento al mismo tiempo

mov #0x5A80,&0x0120

genera

c000:   b2 40 80 5a     mov #23168, &0x0120 ;#0x5a80
c004:   20 01

cual es

0x40b2 0x5a80 0x0120

0100000010110010
0100 opcode mov
0000 source
1 ad
0 b/w
11 as
0010 destination

entonces tenemos un a partir de 11 con fuente de 0 el #x inmediato, un anuncio de 1 con destino 2 por lo que el destino es &ADDR. este es un experimento importante porque cuando tienes 2 x valores, una instrucción de tres palabras básicamente cuál va con la fuente y cuál con el destino

0x40b2 0x5a80 0x0120

entonces la dirección 0x5a80 que es el destino es la primera x en seguir la instrucción, luego la fuente 0x0120 viene inmediatamente después de eso.

si fuera solo un inmediato y un registro entonces

c006:   31 40 ff 03     mov #1023,  r1  ;#0x03ff

0x4031 0x03FF

0100000000110001
0100 mov
0000 source
0 ad
0 b/w
11 as
0001 dest

a partir del 11 y fuente de 0 es #inmediato la X es 0x03FF en este caso la palabra que sigue. el destino es anuncio de 0

Register direct. The operand is the contents of Rn 

donde el destino en este caso es r1

entonces el primer grupo Rn, x(Rn), @Rn y @Rn+ son los casos normales, los que están debajo de los que está preguntando son casos especiales, si obtiene una combinación que encaja en un caso especial, entonces lo hace de otra manera haces el caso normal como el ejemplo anterior de mov inmediato a r1. el destino de r1 era un caso Rn normal.