Merkhilfe (Kurzfassung)

AKK ist der Arbeitsakku. LOAD adr lädt [adr] in den AKK, LOADI k lädt die Konstante k. STORE adr speichert den AKK nach [adr].

Arithmetik: ADD/SUB/MUL/DIV/MOD adr verwenden Speicherinhalte, die Varianten ADDI/SUBI/… k nutzen Konstanten. CMP adr bzw. CMPI k setzen Flags nach AKK − Operand.

Sprünge reagieren auf Flags: JMPZ (Zero), JMPN (Negativ), JMPP (positiv), JMPNN (nicht negativ), JMPNZ (nicht 0), JMPNP (negativ oder 0), JMPV (Überlauf), JMP (unbedingt). HOLD stoppt.

Daten mit WORD, Labels mit name:. Zahlen: dezimal, 0x…, 0b…, oder label±k.

Flags & Sprünge (Cheatsheet)

Flags

  • Z = 1, wenn Ergebnis == 0
  • N = 1, wenn Ergebnis < 0
  • V = Überlauf (anzeigbar; bei Basisbefehlen hier nicht zentral genutzt)

Flags werden gesetzt nach den meisten Rechenbefehlen sowie CMP/CMPI.

Sprünge

BefehlBed. (in Worten)
JMP lblimmer
JMPZ lblZ == 1 (Ergebnis 0)
JMPNZ lblZ == 0 (Ergebnis ≠ 0)
JMPN lblN == 1 (negativ)
JMPNN lblN == 0 (nicht negativ)
JMPP lblpositiv (N==0 & Z==0)
JMPNP lblnegativ oder 0 (N==1 oder Z==1)
JMPV lblÜberlauf V==1

Vollständiger Befehlssatz

KategorieMnemonikOperandWirkung (sprachlich)FlagsBeispiel
Laden/SpeichernLOADadrAKK := [adr]Z,NLOAD x
Laden/SpeichernLOADIkAKK := kZ,NLOADI 5
Laden/SpeichernSTOREadr[adr] := AKKSTORE y
ArithmetikADDadrAKK := AKK + [adr]Z,NADD y
ArithmetikSUBadrAKK := AKK - [adr]Z,NSUB y
ArithmetikMULadrAKK := AKK * [adr]Z,NMUL y
ArithmetikDIVadrAKK := AKK / [adr] (ganzzahlig)Z,NDIV y
ArithmetikMODadrAKK := AKK % [adr]Z,NMOD y
VergleichCMPadrt := AKK - [adr], setzt FlagsZ,NCMP y
Arithmetik (imm.)ADDIkAKK := AKK + kZ,NADDI 1
Arithmetik (imm.)SUBIkAKK := AKK - kZ,NSUBI 1
Arithmetik (imm.)MULIkAKK := AKK * kZ,NMULI 2
Arithmetik (imm.)DIVIkAKK := AKK / k (ganzzahlig)Z,NDIVI 2
Arithmetik (imm.)MODIkAKK := AKK % kZ,NMODI 3
Vergleich (imm.)CMPIkt := AKK - k, setzt FlagsZ,NCMPI 0
LogikANDadrAKK := AKK & [adr]Z,NAND m
LogikORadrAKK := AKK | [adr]Z,NOR m
LogikXORadrAKK := AKK ^ [adr]Z,NXOR m
LogikNOTAKK := ~AKKZ,NNOT
ShiftSHLadrAKK := AKK << [adr]Z,NSHL s
ShiftSHRadrAKK := AKK >>> [adr] (logisch)Z,NSHR s
ShiftSHRAadrAKK := AKK >> [adr] (arithmetisch)Z,NSHRA s
Logik (imm.)ANDIkAKK := AKK & kZ,NANDI 255
SprüngeJMPPlblspringt, wenn positiv (N==0 & Z==0)JMPP weiter
SprüngeJMPNNlblspringt, wenn nicht negativ (N==0)JMPNN weiter
SprüngeJMPNlblspringt, wenn negativ (N==1)JMPN minus
SprüngeJMPNPlblspringt, wenn negativ oder 0 (N==1 oder Z==1)JMPNP nichtPos
SprüngeJMPZlblspringt, wenn Zero (Z==1)JMPZ gleich
SprüngeJMPNZlblspringt, wenn nicht Zero (Z==0)JMPNZ weiter
SprüngeJMPVlblspringt, wenn Überlauf (V==1)JMPV overflow
SprüngeJMPlblunbedingter SprungJMP loop
SonstigesWORDxdefiniert Datenwortx: WORD 5
SonstigesHOLDstoppt das ProgrammHOLD

Mini-Beispiele

1) Kopiere x → y

LOAD x
STORE y
HOLD
x: WORD 7
y: WORD 0

2) Mittelwert m = (x+y)/2

LOAD x
ADD y
DIVI 2
STORE m
HOLD
x: WORD 5
y: WORD 8
m: WORD 0

3) if (x == y) eq=1 else eq=0

LOAD x
CMP y
JMPZ gleich
LOADI 0
STORE eq
JMP ende

gleich:
LOADI 1
STORE eq

ende:
HOLD

4) Absolutwert |x| → absx

LOAD x
CMPI 0
JMPN neg
STORE absx
JMP ende

neg:
LOADI 0
SUB x
STORE absx

ende:
HOLD

5) Rest a % 3 (per Schleife)

loop:
LOAD a
SUBI 3
JMPN ende
STORE a
JMP loop

ende:
LOAD a
STORE rest
HOLD