MSP430 - So überprüfen Sie die Adressierungstypen

Ich programmiere einen MSP430 in C-Sprache als Simulation eines echten Mikrocontrollers. Ich bin in den Adressierungsmodi stecken geblieben ( https://en.wikipedia.org/wiki/TI_MSP430#MSP430_CPU ), insbesondere:

  • Adressierungsmodi mit R0 (PC)
  • Adressierungsmodi mit R2 (SR) und R3 (CG), Sonderfalldecodierung

    1. Ich verstehe nicht, was 0 (PC), 2 (SR) und 3 (CG) bedeutet. Was sie sind?
    2. Wie überprüft man diese Werte?
Der Wiki-Artikel erklärt: R0 (PC) ist der Programmzähler, R1 (SP) der Stapelzeiger, R2 (SR) das Statusregister (Carry-Flag und Energiesparmodi) - und R3 (CG) generiert konstante Werte, ohne dass dies erforderlich ist Platz, den sie als wörtliche Werte benötigen würden. Da dies Registeradressen und keine Modi sind, kann ich Ihre Frage nicht wirklich verstehen. Vielleicht erklärst du etwas genauer, was du nicht verstehst?
Verstehe ich richtig, dass Sie versuchen, einen MSP430-Emulator in C zu schreiben?

Antworten (1)

Also für die Quelle, wenn die as-Bits 01 sind und die Quellregisterbits eine 0 sind, was dann der PC als Referenz ist

ADDR Symbolisch. Entspricht x(PC). Der Operand befindet sich im Speicher an der Adresse PC+x.

Wenn das Ad-Bit eine 1 ist und das Ziel eine 0 ist, dann auch

ADDR Symbolisch. Entspricht x(PC). Der Operand befindet sich im Speicher an der Adresse PC+x.

x wird ein weiteres Wort sein, das dieser Anweisung folgt, also holt die CPU das nächste Wort, fügt es dem PC hinzu und das ist die Quelle

wenn die as-Bits 11 sind und die Quelle das Register 0 ist, ist die Quelle ein unmittelbarer Wert, der sich im nächsten Wort nach der Anweisung befindet.

Wenn die as-Bits 01 sind und die Quelle eine 2 ist, die zufällig das SR-Register als Referenz ist, dann ist die Adresse x das nächste Wort nach der Anweisung (&ADDR)

wenn das ad-Bit eine 1 ist und das Zielregister eine 2 ist, dann ist es auch ein &ADDR

Wenn die as-Bits 10 sind, sind die Quellbits eine 2, dann ist die Quelle der konstante Wert 4 und wir müssen nach der Anweisung für diese 4 kein Wort in Flash brennen.

Es macht keinen Sinn, dass ein Ziel eine Konstante 4 ist, also ist das keine echte Kombination.

Wiederholen Sie dies für den Rest der Tabelle.

Sie können diese beiden Adressierungsmodi gleichzeitig haben

mov #0x5A80,&0x0120

erzeugt

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

welches ist

0x40b2 0x5a80 0x0120

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

also haben wir eine ab 11 mit einer Quelle von 0 das unmittelbare #x, eine Anzeige von 1 mit einem Ziel 2, also ist das Ziel &ADDR. Dies ist ein wichtiges Experiment, denn wenn Sie 2 x-Werte haben, ist dies eine Drei-Wort-Anweisung, die im Wesentlichen zur Quelle und welche zum Ziel gehört

0x40b2 0x5a80 0x0120

Die Adresse 0x5a80, die das Ziel ist, ist also das erste x, das der Anweisung folgt, dann kommt die Quelle 0x0120 unmittelbar danach.

wenn es nur ein Unmittelbares und dann ein Register wäre

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

ab 11 und Quelle von 0 ist #immediate das X ist 0x03FF in diesem Fall das folgende Wort. das Ziel ist eine Anzeige von 0

Register direct. The operand is the contents of Rn 

wobei das Ziel in diesem Fall r1 ist

Die erste Gruppe Rn, x(Rn), @Rn und @Rn+ sind also die Normalfälle, die darunter liegenden, nach denen Sie fragen, sind Sonderfälle. Wenn Sie eine Kombination erhalten, die in einen Sonderfall passt, tun Sie dies ansonsten Sie tun den Normalfall wie das obige Beispiel für sofortige Bewegung nach r1. das Ziel von r1 war ein normaler Rn-Fall.