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
Mnemonic Source/Destination Operation V N Z C
MOV src,dst src = dst no no no no
ADD src,dst dst = src + dst yes yes yes yes
ADDC src,dst dst = src + dst + C yes yes yes yes
SUB src,dst dst = dst – src yes yes yes yes
SUBC src,dst dst = dst – src – C yes yes yes yes
CMP src,dst dst – src yes yes yes yes
DADD src,dst dst = src + dst + C yes yes yes yes
BIT src,dst src & dst cleared yes yes yes
BIC src,dst dst = !src & dst no no no no
BIS src,dst dst = src | dst no no no no
XOR src,dst dst = src ^ dst yes yes yes yes
AND src,dst dst = src & dst cleared yes yes yes

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
SUBC Subtrahiere 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
XOR Eine XOR-Verknüpfung zwischen Quelle und Ziel (Toggle), Ergebnis im Ziel
AND UND-Verknüpfung zwischen Quelle und Ziel, Ergebnis im Ziel

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

Status-Bits
Mnemonic Source/Destination Operation V N Z C
RRC dst rotate through carry (right) yes yes yes yes
RRA dst dst = dst >> 1 (arithmetically) cleared yes yes yes
PUSH src SP = SP -2 ; @SP = PC + 2 no no no no
SWPB dst Bits 15 to 8 <-> Bits 7 to 0 no no no no
CALL dst SP = SP -2 ; @SP = PC + 2 no no no no
RETI yes yes yes yes
SXT dst Bit 8 to Bit 15 = Bit 7 cleared yes yes yes

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
PUSH Es wird ein Byte/Word auf das Stack gelegt
SWPB (swap bytes) Bit 15 bis 8 werden mit Bit 7 bis 0 vertauscht/gewechselt
CALL Rufe 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
Mnemonic Source/Destination Operation V N Z C
JEQ/JZ Label Jump to label if zero bit is set / / / /
JNE/JNZ Label Jump to label if zero bit is reset / / / /
JC Label Jumpf to label if carry bit is set / / / /
JNC Label Jump to label if carry bit is reset / / / /
JN Label Jump to label if negative bit is set / / / /
JGE Label Jump to label if (N ^ V) = 0 / / / /
JL Label Jump to label if (N ^ V ) = 1 / / / /
JMP Label Jump 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
Mnemonic Src/Dst Basic-Instruction Operation V N Z C
ADC dst ADDC #0,DST dst = dst + Carry yes yes yes yes
BR dst MOV @PC+,PC PC = dst no no no no
CLR dst MOV #0,DST dst = 0 no no no no
CLRC dst BIC #1,SR C = 0 no no no cleared
CLRN dst BIC #4,SR N = 0 no cleared no no
CLRZ dst BIC #2,SR Z = 0 no no cleared no
DADC dst DADD #0,DST dst (decimally) = dst + C yes yes yes yes
DEC dst SUB #1,DSTSUB R3,DST dst = dst – 1 yes yes yes yes
DECD dst SUB #2,DST dst = dst – 2 yes yes yes yes
DINT GIE = 0 no no no no
EINT GIE = 1 no no no no
INC dst ADD #1,DSTADD 0(R3),DST dst = dst + 1 yes yes yes yes
INCD dst ADD #2,DST dst = dst + 2 yes yes yes yes
INV dst XOR 0xFFFF,DST dst = !dst yes yes yes yes
NOP MOV R5,R5 no no no no
POP dst dst = @SP ; SP = SP + 2no no no no no
RET PC = @SP ; SP = SP + 2 no no no no
RLA dst ADD DST.DST dst = dst << 1 yes yes yes yes
RLC dst ADDC DST,DST dst = (dst,C) << 1 yes yes yes yes
SBC dst SUBC #0,DST dst = dst + 0xFFFF + C yes yes yes yes
SETC BIS #1,SR C = 1 no no no set
SETN BIS #4,SR N = 1 no set no no
SETZ BIS #2,SR Z = 1 no no set no
TST dst CMP #0,DST N = (dst < 0) ; Z = (dst == 0) cleared yes yes set

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. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.