Befehlssatz MIPS-R2000
1 Befehlssatz MIPS-R2000
2
0 Notation
seq
sne
sgt
sge
⋄ sgtu
Rd, Rs, RI Rd, Rs, RI Rd, Rs, RI Rd, Rs, RI Rd, Rs, RI Rd, Rs, imm Rd, Rs, RI
set equal
set not equal
set greater than
set greater than equal set less than
set less than immediate set less than equal
Rd ←Rs =RI?1:0 Rd ←Rs ̸=RI?1:0 Rd ←Rs >RI?1:0 Rd ←Rs ≥RI?1:0 Rd ←Rs
int1 [±int2]
[symbol] [±dist] [(Rs)]
dist/2int
Distanzangabe int1 + int2
Adressangabe fu ̈r Speicherstelle symbol + dist + Rs
n Bytes großer Wert an der Speicherstelle x
Bits b1 bis bn des Wertes X
Symbolischer Name des Sprungziels: bei absoluten Spru ̈ngen (j∗) 26-Bit Instruktionsadresse, bei relativen Spru ̈ngen (b∗) eine 16-Bit Distanzangabe
⋄ sleu
Logische Operationen
symbol
not ⋆ and
Rd,Rs
Rd, Rs, RI Rd, Rs, imm Rd, Rs, RI Rd, Rs, imm Rd, Rs, RI Rd, Rs, imm Rd, Rs, RI
bitwise logical negation bitwise AND
bitwise AND immediate bitwise OR
Rd←¬Rs Rd←Rs∧RI Rd←Rs∧imm Rd←Rs∨RI Rd←Rs∨imm Rd←Rs⊕RI Rd←Rs⊕imm Rd←¬(Rs∨RI)
1 Registerbelegung
⋆⋄ sll ⋆⋄ sllv ⋆⋄ srl ⋆⋄ srlv
Rd, Rt, imm Rd,Rt,Rv Rd, Rt, imm Rd,Rt,Rv Rd, Rt, imm Rd,Rt,Rv Rd,Rt,RI Rd,Rt,RI
shift left logical
shift left logical variable
Rd ← Rt ∗ 2imm mod 32 Rd ← Rt ∗ 2Rv mod 32
$0 $zero
$1 $at
$2–$3 $v0 –$v1 $4–$7 $a0 –$a3 $8–$15 $t0 –$t7 $16–$23 $s0 –$s7 $24–$25 $t8 –$t9 $26–$27 $k0 –$k1 $28 $gp
constant 0 assembler
value
argument temporary
saved temporary temporary kernel
Konstante 0
reserviert fu ̈r den Assembler
Ausdruck- bzw. Funktionsergebnis Funktionsargument
frei, wird bei Funktionsaufrufen u ̈berschrieben frei, wird bei Funktionsaufrufen gerettet
frei, wird bei Funktionsaufrufen u ̈berschrieben reserviert fu ̈r Betriebssystem
Zeiger auf globalen Datenbereich Stack-Pointer
Zeiger auf lokalen Datenbereich einer Funktion Ru ̈cksprungadresse
shift right shift right shift right shift right rotate left rotate right
Rd ← Rt/2imm mod 32 Rd ← Rt/2Rv mod 32
$29 $sp
$30 $fp
$31 $ra
global pointer stack pointer frame pointer return address
b ⋆j
label label Rs label label Rd,Rs
branch instruction jump
jump register
jump and link
branch and link
jump and link register
Sprung nach label
Sprung nach label
Sprung nach Rs
$31 ← IP + 4, Sprung nach label $31 ← IP + 4, Sprung nach label Rd ← IP + 4, Sprung nach Rs
2 Ganzzahlarithmetik
⋆jr ⋆ jal bal
abs
Rd,Rs Rd,Rs
Rd, Rs, RI Rd, Rs, imm Rd, Rs, RI Rs,Rt
absolute value negate value addition
addition immediate subtract
Rd ← |Rs|
Rd ← −Rs
Rd ← Rs + RI
Rd ← Rs + imm
Rd ← Rs − RI
(hi,lo)←Rs ×Rt
Rd ← Rs × RI
Rd ← Rs × RI
lo ← Rs/Rt,hi ← Rs mod Rt Rd ← Rs/RI
Rd ←Rs modRI
⋆ jalr
7 Bedingte
neg ⋆† add
⋄ negu ⋆⋄ addu ⋆⋄ addiu ⋆⋄ subu ⋆⋄ multu
Spru ̈nge nach Vergleich
⋆† addi ⋆† sub
⋆∗ bc1f ⋆∗ bc1t ⋆∗ beq ⋆∗ bne
label
label Rs,RI,label Rs,RI,label Rs,RI,label Rs,RI,label Rs,RI,label Rs,RI,label
branch coprocessor 1 false branch coprocessor 1 true branch on equal
branch on not equal
branch on greater than branch on greater than equal branch on less than
Sprung nach label, wenn CF1 = 0 Sprung nach label, wenn CF1 = 1 Sprung nach label, wenn Rs = RI Sprung nach label, wenn Rs ̸= RI Sprung nach label, wenn Rs > RI Sprung nach label, wenn Rs ≥ RI Sprung nach label, wenn Rs < RI Sprung nach label, wenn Rs ≤ RI
⋆ mult mul ‡ mulo
‡ mulou ⋆⋄ divu ⋄‡ divu ⋄‡ remu
Rd, Rs, RI Rd, Rs, RI Rs,Rt
Rd, Rs, RI Rd, Rs, RI
multiply
multiply
multiply with overflow divide
divide
remainder
bgt
bge
blt
ble
⋄ bgtu ⋄ bgeu ⋄ bltu ⋄ bleu
⋆ div
‡ div
‡ rem
branch on less than equal
Befehlssatz MIPS-R2000
3
Ganzzahlvergleiche
⋆ Hardware-Instruktion des Prozessors
∗ delayed-Instruktion; Ausfu ̈hrung endet nach dem na ̈chsten Befehl
⋄ Vorzeichen wird ignoriert
† Instruktion kann Exception auslo ̈sen
‡ Pseudo-Instruktion lo ̈st beim Fehlerfall Exceptions durch break aus
⋆ andi ⋆or
⋆ ori ⋆ xor ⋆ xori ⋆ nor
bitwise OR immediate bitwise XOR
bitwise XOR immediate bitwise NOR
symbol + dist
⃝c Copyright 1996, 1998, 1999 FG Systemprogrammierung, FB20, TU Darmstadt e-mail: inf2@iti.informatik.tu-darmstadt.de
4
5 Shift-Operationen
6
Unbedingte Spru ̈nge
⋆ sra ⋆ srav ⋄ rol ⋄ ror
logical
logical variable arithmetic arithmetic variable
Rd ← Rt/2imm mod 32 Rd ← Rt/2Rv mod 32
Rd ← Rt[((31−RI) mod 32)...0,31...((31−RI−1) mod 32)] Rd ← Rt[((RI−1) mod 32)...0,31...(RI mod 32)]
Befehlssatz MIPS-R2000
3
Befehlssatz MIPS-R2000
4
8 Bedingte Spru ̈nge nach Vergleich mit 0
11 Speicherbefehle
beqz
Rs,label Rs,label Rs,label Rs,label
branch on equal zero
branch on not equal zero branch on greater than zero branch on greater than equal zero
branch on greater than equal zero and link
branch on less than zero branch on less than and link
Sprung nach label, wenn Rs = 0 Sprung nach label, wenn Rs ̸= 0 Sprung nach label, wenn Rs > 0 Sprung nach label, wenn Rs ≥ 0
⋆sb ⋆sh ⋆sw ⋆ swl ⋆ swr
Rt , addr Rt , addr Rt , addr Rt , addr Rt , addr
store byte
store halfword store word store word left store word right
C (addr )1 ← Rt[7…0] C(addr)2 ← Rt[15…0] C(addr)4 ← Rt
bnez ⋆∗ bgtz ⋆∗ bgez
C(addr)4−addr mod 4 ← Rt[31…(addr mod 4)∗8] C(addr + 4 − addr mod 4)addr mod 4
⋆∗ bgezal ⋆∗ bltz
Rs,label Rs,label
$31 ← IP + 4,
Sprung nach label, wenn Rs ≥ 0 Sprung nach label, wenn Rs < 0 $31 ← IP + 4,
Sprung nach label, wenn Rs < 0 Sprung nach label, wenn Rs ≤ 0
← Rt[(addr mod 4)∗8−1...0]
⋆∗ bltzal ⋆∗ blez
Rs,label Rs,label
branch on less than equal zero
sd
⋆ swc1 s.s s.d ush usw
Rt , addr Fd , addr Fd , addr Fd , addr Rt , addr Rt , addr
store double-word
store word coprocessor 1 store floating-point single store floating-point double unaligned store halfword unaligned store word
C(addr)8 C(addr)4 C(addr)4 C(addr)8 C(addr)2 C(addr)4
← (Rt, Rt+1) ←Fd
←Fd
← (Fd+1, Fd) ← Rt[15...0] ←Rt
9 Registertransfer
12 Gleitkomma-Arithmetik
move Rd,Rs ⋆ mfhi Rd
⋆ mflo Rd
⋆ mthi Rd
move register
move from hi
move from lo
move to hi
move to lo
move from coprocessor 1 move to coprocessor 1 move double from coprocessor 1
Rd←Rs
Rd←hi
Rd←lo
hi←Rd
lo←Rd
Rd←Fs
Fs←Rd
(Rd, Rd+1) ← (Fs, Fs+1)
⋆ abs.s ⋆ add.s ⋆ sub.s ⋆ mul.s ⋆ div.s
⋆ abs.d ⋆ add.d ⋆ sub.d ⋆ mul.d ⋆ div.d
Fd,Fs Fd,Fs,Ft Fd,Fs,Ft Fd,Fs,Ft Fd,Fs,Ft
absolute value addition subtract multiply divide
Fd ←|Fs|
Fd ← Fs + Ft Fd ← Fs − Ft Fd ← Fs × Ft Fd ← Fs/Ft
⋆ mtlo Rd
⋆ mfc1 Rd,Fs
⋆ mtc1 Rd,Fs
13 Gleitkomma-Vergleiche
mfc1.d Rd,Fs mov.s Fd,Fs
move floating-point single move floating-point double
Fd←Fs
(Fd, Fd+1) ← (Fs, Fs+1)
⋆ c.un.s ⋆ c.eq.s ⋆† c.seq.s
⋆ c.un.d ⋆ c.eq.d ⋆† c.seq.d
Fs,Ft compare unordered Fs,Ft compare equal
Fs,Ft compare equal
Fs,Ft compare unordered equal
CF1 ←(Fs =NaN)∨(Fs =NaN) CF1 ←Fs =Ft
CF1 ←Fs =Ft
CF1 ←(Fs =Ft)∨
mov.d Fd,Fs
10 Ladebefehle
⋆ c.ueq.s ⋆† c.lt.s
⋆ c.ueq.d ⋆† c.lt.d
Fs,Ft compare less than
Fs,Ft compare ordered less than Fs,Ft compare unordered less than
(Fs = NaN) ∨ (Fs = NaN) CF1 ←Fs