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 R2 (SR) y R3 (CG), decodificación de casos especiales
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.
usuario_1818839
brahans
CL.