Frage

ich auf einem Simulator für den MSP430-Befehlssatz arbeite. Gnu Assembler können Sie kodieren Anweisungen wie diese:

fc0a: 12 10 00 02 rrc &0x0200       
fc0e: 22 11       rra #4        
fc10: 23 52       add #4,#2

Meine Vermutung ist, dass rrc & 0x0200 wird von der Adresse 0x0200 holen führen die drehen dann die Antwort schreiben zurück 0x0200 zu adressieren, richtig? Aber was wäre ein RRA # 4 tun? Die Quelle wäre ein unmittelbares 4 Ich gehe davon aus, aber ist es ein Ziel nach der Operation? Das Add # 4, # 2 zusammengebaut in dem, was Sie (als 2B10, source = r2, ad = 1B0, dest = r3) erwarten würden, obwohl der binutils Disassembler nicht wußte, was mit dieser Anweisung zu tun.

Sind diese gültig Anweisungen?

War es hilfreich?

Lösung

Obwohl es keine definitive Online Bezug auf diesen Effekt zu sein braucht erscheint, neige ich dazu, mit der OP, die die beiden Befehle gezeigt (und einige andere) sind wahrscheinlich nicht gültig , obwohl zustimmen sie entsprechen dem Format in den Datenblättern definiert sind.

Mit anderen Worten, nicht alle möglichen Kombinationen der verschiedenen Teile, die ein Befehlswort bilden, sind gültig. Insbesondere viele einzelnen Operanden-Befehle, die den unmittelbaren Adressierung Modus zu verwenden, und viele Doppeloperanden-Befehle, die einen sofortigen Adressierungsmodus für das Ziel hat, sind wahrscheinlich nicht semantisch sinnvoll ist.

Es gibt nur ein paar Hinweise zu diesem Zweck in der Dokumentation, zum Beispiel in der Bedienungsanleitung, Abschnitt 3.3.7 (auf dem unmittelbaren Adressierungsmodus), ein Kommentar zeigt „ Gilt nur für einen Quelloperanden. “(und, BTW, dies für alle Fälle der unmittelbaren Adressierungsmodus ist, nicht nur die Kurz Hand Fällen durch die R2 oder R3 konstant Generation Trick erlaubt.)

Die Tatsache, dass die Disassembler nicht wissen, was mit solchen Codes zu tun, ist auch ein weiterer Hinweis (obwohl ... einige Disassembler leicht ausgelöst bekommen ...).

Aus Gründen der Dokumentation, entnahm ich unten ein paar nützliche Hinweise für die MSP430:

Andere Tipps

In den aktuellen Benutzer zu lesen, in Abschnitt 3.4.4.2, es empfiehlt für den Befehl RRA den unmittelbaren Modus (#N) im Zielfeld nicht verwenden, da es dazu führt, „unberechenbar Programmbetrieb.“

Es ist möglich, sie sind. Mit Blick auf den Befehlssatz auf Wikipedia kodieren die Opcodes das Register und verschiedene Optionen. Es ist also nicht eine einfache Zuordnung. Es sieht aus wie die Ausgabe, die Sie haben, ist Little-Endian, so folgt aus:

fc0a: 12 10 00 02 rrc &0x0200  

entspricht die Instruktion 1012, welche in binär 0001 0000 0001 0010.

Dieser setzt sich wie folgt zusammen:

6 bits: 0001 00 - fixed; defines the instruction family
3 bits: 00 0    - instruction (RRC)
1 bit : 0       - byte or word parameter (0 = 16 bit parameter; 1 = 8 bit)
2 bits: 01      - addressing mode (01 = indexed;)
4 bits: 0010    - register

Also in diesem Fall ein Dreh-rechts auf dem Wert auftritt bei der Offset in dem Register 2 von Adresse & 0200.

Sie müssen die anderen Anweisungen nach unten auf eine ähnliche Art und Weise brechen, um vollständig zu verstehen. Für den ADD-Befehl, die sowohl Quell- und Zielregister / Adressen werden in der codierten 5223 Anweisung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top