Die folgenden Befehle sind nicht optional, d.h. sie sind in jeder Implementierung der F-CPU vorhanden:
add r3, r2, r1; | r1 = r2 + r3 |
sub, mul, div; | ähnlich wie add |
shiftl r3, r2, r1; | r1 = r2 << r3, schiebe nach links |
shiftr r3, r2, r1; | r1 = r2 >> r3, schiebe nach rechts |
shiftra r3, r2, r1; | ähnlich wie shiftr, das Vorzeichen bleibt jedoch erhalten |
rotl r3, r2, r1; | r1 = r2 <@ r3, rotiere nach links |
rotr r3, r2, r1; | r1 = r2 @> r3, rotiere nach rechts |
or, orn, and, andn, xor, nxor, nor, nand; |
bitweise Verknüpfung zwischen r1 und r2, das Ergebnis wird in r3 gespeichert |
load r2, r1; | r1 = mem[r2] |
store r2, r1; | mem[r2] = r1 |
move r3, r2, r1; | if r3 == 0 then r1 = r2 |
loadcons.n Imm16,r1; | Imm16 wird um ein n-Vielfaches von 16 verschoben und dann in r1 geschrieben |
loadconsx.n Imm16,r1; | ähnlich wie loadcons, aber unter Berücksichtigung des Vorzeichens |
get r2, r1; | r1 = SPR(r2), Inhalt des Registers, auf das r2 zeigt, wird in r1 geschrieben |
put r2, r1; | SPR(r2) = r1, Inhalt von r1 wird in das Register gespeichert, auf das r2 zeigt |
jmpa r3, r2, r1; | if (negation XOR true (condition,r3)) then r1 = PC, PC = r2 |
loadaddr r2, r1; | r1 = PC + 4 + r2 |
loopentry r1; | r1 = PC + 4, Spezialfall von loadaddr ohne Offset, sollte vor einem Sprung in eine Schleife verwendet werden und mit jmpa kombiniert werden |
loadaddri Imm16, r1; | r1 = PC + 4 + Imm16 |
loop r2, r1; | r1 = r1 - 1; if r1 != 0 then PC = r2 |
syscall Imm16, r1; | Supervisormodus wird eingeschaltet und die Systemroutine Nr Imm16 wird ausgeführt. r1 wird zur Zeit nicht benutzt. |
halt; | hält die CPU an, bis eine Exception auftritt (wie ein sched_yield()) |
rfe; | beendet eine Exceptionbehandlung z.B. einen Interrupt. Die vorhergehende Arbeit wird wieder aufgenommen. |