MSP430 - cómo verificar los tipos de direccionamiento

1

Estoy programando un MSP430 en lenguaje C como una simulación de un microcontrolador real. Me quedé atascado en los modos de direccionamiento ( enlace ), especialmente:

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

    1. No entiendo lo que significa 0 (PC), 2 (SR) y 3 (CG). ¿Qué son?
    2. ¿Cómo verificar estos valores?
pregunta ziom

1 respuesta

1

así que para la fuente si los bits como 01 son y los bits del registro de fuente son un 0, que es la PC para referencia entonces

ADDR simbólico. 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

ADDR simbólico. Equivalente a x (PC). El operando está en la memoria en la dirección PC + x.

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

si los bits como 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 como son 01 y la fuente es un 2, que es el registro SR para referencia, 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, también es un & ADDR

si los bits como son 10, los bits fuente son 2, entonces la fuente es el valor constante 4 y no tenemos que quemar una palabra en flash después de las instrucciones para ese 4.

no tiene sentido que un destino sea una constante 4 para que no sea una combinación real.

repita para el resto de la tabla.

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

que es

0x40b2 0x5a80 0x0120

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

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

0x40b2 0x5a80 0x0120

por lo que la dirección 0x5a80, que es el destino, es la primera x que sigue las instrucciones, luego el origen 0x0120 inmediatamente después.

si solo fuera un registro inmediato y luego

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 de 11 y la fuente de 0 es # inmediata, la X es 0x03FF en este caso, la palabra que sigue. el destino es un anuncio de 0

Register direct. The operand is the contents of Rn 

donde el destino en este caso es r1

por lo que el primer grupo Rn, x (Rn), @Rn y @ Rn + son los casos normales, los que se encuentran debajo son los casos especiales, si obtiene una combinación que se adapta a un caso especial, entonces haga lo contrario, de lo contrario, haga el caso normal, como el movimiento inmediato a r1 ejemplo anterior. el destino de r1 era un caso normal de Rn.

    
respondido por el old_timer

Lea otras preguntas en las etiquetas