MSP430 Assembler-Befehle

Hier gibt es eine Übersicht aller Assembler-Befehle für den MSP430. Insgesmt bietet der MSP430 27 Hauptbefehle und 24 emulierte Befehle. Die emulierten Befehle sollen für eine bessere Code-Übersicht sorgen bzw. das Programmieren leichter und schneller machen.

Die Befehle werden in 3 Gruppen geordnet:

  • Dual-operand
  • Single-operand
  • Jump

Der MSP430 ist ein 16bit-Prozessor, bietet also die Möglichkeit zwischen Byte (8bit) und Word (16bit) Befehlen zu unterscheiden. Dazu wird hinter dem ASM-Befehl “.w” oder “.b” geschrieben.  Wird keine Ergänzung hinter einem ASM-Befehl geschrieben, wird standardmäßig von einem “Word”-Befehel ausgegangen (Vorsicht ist hier geboten! Solche Fehler findet man (je nachdem wie lang der Code ist, sehr schwer).

Status-Bits:

  • V = Overflow-Flag
  • N = Negative-Flag
  • Z = Zero-Flag
  • C = Carry

1. Dual-Operand-Instructions (Zweifach-Operand-Befehle)
1.1 Übersicht

Status-Bits
MnemonicSource/DestinationOperationVNZC
MOVsrc,dstsrc = dstnononono
ADDsrc,dstdst = src + dstyesyesyesyes
ADDCsrc,dstdst = src + dst + Cyesyesyesyes
SUBsrc,dstdst = dst – srcyesyesyesyes
SUBCsrc,dstdst = dst – src – Cyesyesyesyes
CMPsrc,dstdst – srcyesyesyesyes
DADDsrc,dstdst = src + dst + Cyesyesyesyes
BITsrc,dstsrc & dstclearedyesyesyes
BICsrc,dstdst = !src & dstnononono
BISsrc,dstdst = src | dstnononono
XORsrc,dstdst = src ^ dstyesyesyesyes
ANDsrc,dstdst = src & dstclearedyesyesyes

Info:

no = Status-Bit wird nicht verändert
yes = Status-Bit wird verändert
set = Status-Bit wird gesetzt (1)
cleared = Status-Bit wird geleert (0)

1.2 Kurzbeschreibung der Befehle

MOV (move) Kopiere Quelle in das Ziel
ADD (addition)Addiere Quelle und Ziel, Ergebnis im Ziel
ADDC Addiere Quelle, Ziel und Carry; Ergebnis im Ziel
SUB (subtract)Subtrahiere Ziel von Quelle, Ergebnis im Ziel
SUBCSubtrahiere Ziel von Quelle und subtrahiere das Carry, Ergebnis im Ziel
CMP (compare)Vergleiche Ziel und Quelle, Ergebnis in Status-Bits
DADD Addiere Quelle und Ziel (dezimal)
BIT (bit-test)Teste ob ein bestimmtes Bit(s) (Quelle) gesetzt ist/sind (Ziel), Ergebnis in Status-Bits
BIC (bit-clear)Leere Bit(s) (Quelle) im Ziel
BIS (bit-set)Setze Bit(s) (Quelle) im Ziel
XOREine XOR-Verknüpfung zwischen Quelle und Ziel (Toggle), Ergebnis im Ziel
ANDUND-Verknüpfung zwischen Quelle und Ziel, Ergebnis im Ziel

2. Single-Operand-Instructions (Einzel-Operand-Befehle)
2.1 Übersicht

Status-Bits
MnemonicSource/DestinationOperationVNZC
RRCdstrotate through carry (right)yesyesyesyes
RRAdstdst = dst >> 1 (arithmetically)clearedyesyesyes
PUSHsrcSP = SP -2 ; @SP = PC + 2nononono
SWPBdstBits 15 to 8 <-> Bits 7 to 0nononono
CALLdstSP = SP -2 ; @SP = PC + 2nononono
RETIyesyesyesyes
SXTdstBit 8 to Bit 15 = Bit 7clearedyesyesyes

Info:

no = Status-Bit wird nicht verändert
yes = Status-Bit wird verändert
set = Status-Bit wird gesetzt (1)
cleared = Status-Bit wird geleert (0)

2.2 Kurzbeschreibung der Befehle

RRC (rotate right carry)Rotiere nach rechts durch das Carry, es wird ein Bit nach rechts geschoben (LSB landet im Carry danach in MSB)
RRA (rotate right arithmetically)Das selbe wie RRC aber ohne Carry
PUSHEs wird ein Byte/Word auf das Stack gelegt
SWPB (swap bytes)Bit 15 bis 8 werden mit Bit 7 bis 0 vertauscht/gewechselt
CALLRufe ein Unterprogramm auf
RETI (return from interrupt)Falls ein Interrupt ausgelöst wurde, wird wieder in die Hauptroutine zurück gesprungen
SXT (extend sign)Bit 7 wird in Bit 8 bis Bit 15 geschrieben

3. Jump-Instructions (Sprung-Befehle)
3.1 Übersicht

Status-Bits
MnemonicSource/DestinationOperationVNZC
JEQ/JZLabelJump to label if zero bit is set////
JNE/JNZLabelJump to label if zero bit is reset////
JCLabelJumpf to label if carry bit is set////
JNCLabelJump to label if carry bit is reset////
JNLabelJump to label if negative bit is set////
JGELabelJump to label if (N ^ V) = 0////
JLLabelJump to label if (N ^ V ) = 1////
JMPLabelJump to label unconditionally////

 

3.2 Kurzbeschreibung der Befehle

JEQ/JZ (jump euqal / jump zero)Springe zum Label falls das Zero-Bit = 1 / Springe falls gleich
JNE/JNZ (jump not equal / jump not zero)Springe zum Label falls das Zero-Bit = 0 / Springe falls ungleich
JC (jump carry)Springe zum Label falls Carry = 1
JNC (jump not carry)Springe zum Label falls Carry = 0
JN (jump negative)Springe zum Label falls Negative-Flag=1
JGE (jump greater equal)Springe zum Label falls größer oder gleich
JL (jump less)Springe zum Label falls kleiner
JMP (jump)Springe zum Label (IMMER)

4. Emulated-Instructions (Emulierte-Befehle)
4.1 Übersicht

Status-Bits
MnemonicSrc/DstBasic-InstructionOperationVNZC
ADCdstADDC #0,DSTdst = dst + Carryyesyesyesyes
BRdstMOV @PC+,PCPC = dstnononono
CLRdstMOV #0,DSTdst = 0nononono
CLRCdstBIC #1,SRC = 0nononocleared
CLRNdstBIC #4,SRN = 0noclearednono
CLRZdstBIC #2,SRZ = 0nonoclearedno
DADCdstDADD #0,DSTdst (decimally) = dst + Cyesyesyesyes
DECdstSUB #1,DSTSUB R3,DSTdst = dst – 1yesyesyesyes
DECDdstSUB #2,DSTdst = dst – 2yesyesyesyes
DINTGIE = 0nononono
EINTGIE = 1nononono
INCdstADD #1,DSTADD 0(R3),DSTdst = dst + 1yesyesyesyes
INCDdstADD #2,DSTdst = dst + 2yesyesyesyes
INVdstXOR 0xFFFF,DSTdst = !dstyesyesyesyes
NOPMOV R5,R5nononono
POPdstdst = @SP ; SP = SP + 2nonononono
RETPC = @SP ; SP = SP + 2nononono
RLAdstADD DST.DSTdst = dst << 1yesyesyesyes
RLCdstADDC DST,DSTdst = (dst,C) << 1yesyesyesyes
SBCdstSUBC #0,DSTdst = dst + 0xFFFF + Cyesyesyesyes
SETCBIS #1,SRC = 1nononoset
SETNBIS #4,SRN = 1nosetnono
SETZBIS #2,SRZ = 1nonosetno
TSTdstCMP #0,DSTN = (dst < 0) ; Z = (dst == 0)clearedyesyesset

Die Befehle in der “Basic-Instructions”-Spalte sind nur Vorschläge wie es mit den Basis-Instruktionen gelöst werden könnte. Der DEC-Befehl wird z.B. über das Konstantenregister R3 nachgebildet (-1,0,1,2). Somit gibt es dort mehrere Möglichkeiten.

Eine Übersicht (mit ausführlicher Beschreibung und kurzen Beispielen) gibt es im User-Guide (MSP430x2xx Family), ab Seite 56.

Leave a Reply

Your email address will not be published.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

This site uses Akismet to reduce spam. Learn how your comment data is processed.