代写 C MIPS Befehlssatz MIPS-R2000

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 > int
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