3/26/2019 SOC_05 2017-2018 3
CONȚINUT
Informații Generale
Registrele Procesorului MIPS
Registrele FPU ale Procesorului MIPS
Formate de instrucțiuni MIPS
Instrucțiunii de lucru cu memoria
Instrucțiunii aritmetice
Instrucțiuni logice
Instrucțiuni de ramificare
Instrucțiuni de salt
Instrucțiuni de deplasare
Setul de instrucțiuni MIPS
3/26/2019 SOC_05 2017-2018 4
INFORMAȚII GENERALE
Procesoarele MIPS (inițial un acronim pentru Microprocessor without Interlocked Pipeline Stages) sunt un exemplu tipic de procesoare RISC cu un set de instrucțiuni simple pe 32 sau 64 biți, dezvoltat de firma MIPS Computer Systems (actual MIPS Technologies)
Primele procesoare MIPS foloseau o arhitectură pe 32 de biți în timp ce versiunile următoare folosesc 64 de biți.
Există mai multe revizii ale setului de instrucțiuni MIPS, cum ar fi MIPS I, MIPS II, MIPS III, MIPS IV, MIPS V, MIPS32, și MIPS64.
Reviziile curente sunt MIPS32 (pentru arhitecturi pe 32 de biți) și MIPS64 (pentru arhitecturi pe 64 de biți).
3/26/2019 SOC_05 2017-2018 5
CONȚINUT
Informații Generale
Registrele Procesorului MIPS
Registrele FPU ale Procesorului MIPS
Formate de instrucțiuni MIPS
Instrucțiunii de lucru cu memoria
Instrucțiunii aritmetice
Instrucțiuni logice
Instrucțiuni de ramificare
Instrucțiuni de salt
Instrucțiuni de deplasare
Setul de instrucțiuni MIPS
3/26/2019 SOC_05 2017-2018 6
Registrele Procesorului MIPS
r16
r17
r18
r19
r20
r21
r22
r23
r24
r25
r26
r27
r28
r29
r30
r31
r0
r1
r2
r3
r4
r5
r6
r7
r8
r9
r10
r11
r12
r13
r14
r15
HI
LO
PC
General Purpose Registers Special Purpose Registers
31 0
3/26/2019 SOC_05 2017-2018 8
CONȚINUT
Informații Generale
Registrele Procesorului MIPS
Registrele FPU ale Procesorului MIPS
Formate de instrucțiuni MIPS
Instrucțiunii de lucru cu memoria
Instrucțiunii aritmetice
Instrucțiuni logice
Instrucțiuni de ramificare
Instrucțiuni de salt
Instrucțiuni de deplasare
Setul de instrucțiuni MIPS
3/26/2019 SOC_05 2017-2018 9
Registrele FPU ale Procesorului MIPS
f16
f17
f18
f19
f20
f21
f22
f23
f24
r25
f26
f27
f28
f29
f30
f31
f0
f1
f2
f3
f4
f5
f6
f7
f8
f9
f10
f11
f12
f13
f14
f15
FEXR
FENR
FCSR
General Purpose Registers Special Purpose Registers
FIR
FCCR
31 0
31 0
3/26/2019 SOC_05 2017-2018 10
CONȚINUT
Informații Generale
Registrele Procesorului MIPS
Registrele FPU ale Procesorului MIPS
Formate de instrucțiuni MIPS
Instrucțiunii de lucru cu memoria
Instrucțiunii aritmetice
Instrucțiuni logice
Instrucțiuni de ramificare
Instrucțiuni de salt
Instrucțiuni de deplasare
Setul de instrucțiuni MIPS
3/26/2019 SOC_05 2017-2018 11
Formate de instrucțiuni MIPS
Instrucțiunile MIPS sunt împărțite în trei grupe, în funcție de formatul lor:
Tip I (Immediate) – Acest grup conține instrucțiuni cu un operand imediat, instrucțiuni de ramificare și instrucțiuni de încărcare și salvare. În arhitectura MIPS toate accesele la memorie sunt gestionate de către procesorul principal, deci operațiile de încărcare și salvare ale coprocesorului se găsesc în acest grup.
Toate OPCODE-urile, mai puțin 000000, 00001x și0100xx sunt folosite pentru instrucțiuni de tip I.
opcode immediatertrs
31 26 202125 10111516 56 0
6 1655
3/26/2019 SOC_05 2017-2018 12
Formate de instrucțiuni MIPS
Tip J (Jump) – Acest grup conține cele două instrucțiuni de salt direct (j și jal).
Instrucțiunile de tip J folosesc OPCODE-ul 00001x.
opcode instr_index
31 26 25 0
6 26
3/26/2019 SOC_05 2017-2018 13
Formate de instrucțiuni MIPS
Tip R (Register) – Acest grup conține toate instrucțiunile care nu necesită o valoare imediată sau adresă de memorie pentru a specifica un operand. Include operații aritmetice și logice cu toți operanzii aflați în registre, instrucțiuni de deplasare și instrucțiuni de salt pe registru (jalr and jr).
Toate instrucțiunile de tip R folosesc OPCODE-ul 000000.
Operația efectuată se codifică în câmpul function
opcode sardrtrs function
31 26 202125 10111516 56 0
6 65555
3/26/2019 CSO_05 2016-2017 14
Formate de instrucțiuni MIPS
Instrucțiuni Coprocessor – Procesoarele MIPS folosesc două coprocesoare standard, CP0 și CP1. CP0 (system control coprocessor) oferă instrucțiuni specifice pentru un sistem de operare. CP1 este folosit pentru calcule în virgulă mobilă. Arhitectura MIPS permite adăugare a două noi coprocesoare CP2 și CP3.
Toate instrucțiunile coprocesor folosesc OPCODE-uri cu formatul 0100xx.
opcode fdfsftformat function
31 26 202125 10111516 56 0
6 65555
3/26/2019 SOC_05 2017-2018 15
Formate de instrucțiuni MIPS
Câmp Descriere
opcode Cod operație – 6 biți
rd Adresă registru destinație – 5 biți
rs Adresă registru sursă – 5 biți
rt Adresă registru sursă sau destinație (depinde de instrucțiune) sau cod funcție pentru instrucțiunile cu OPCODE 000001 (REGIMM)
immediate Valoare imediată pe 16 biți (număr întreg cu semn) folosită ca operand sau offset
instr_index Combinație binară pe 26 biți interpretată ca un număr îmtreg fără semn care prin deplasarea spre stânga cu doi biți este utilizată pentru a înlocui cei mai puțini semnificativi 28 biți dintr-o adresă de salt.
sa numărul de biți cu care se realizează deplasarea stânga/ dreapta
function câmpul funcției asociate operației primare SPECIAL (OPCAODE 000000)
3/26/2019 SOC_05 2017-2018 16
CONȚINUT
Informații Generale
Registrele Procesorului MIPS
Registrele FPU ale Procesorului MIPS
Formate de instrucțiuni MIPS
Instrucțiunii de lucru cu memoria
Instrucțiunii aritmetice
Instrucțiuni logice
Instrucțiuni de ramificare
Instrucțiuni de salt
Instrucțiuni de deplasare
Setul de instrucțiuni MIPS
3/26/2019 SOC_05 2017-2018 17
Instrucțiunii de lucru cu memoria
Load Word - Un cuvânt este citit într-un registru de la adresa de memorie specificată
rtMEM[[base]+offset]
LW rt, offset(base)
Store Word – Conținutul registrului cu adresa rt este salvat la adresa de memorie specificată.MEM[[base]+offset][rt]
SW rt, offset(base)
LW
100011offsetrtbase
31 26 202125 1516 0
6 1655
SW
101011offsetrtbase
31 26 202125 1516 0
6 1655
3/26/2019 SOC_05 2017-2018 18
CONȚINUT
Informații Generale
Registrele Procesorului MIPS
Registrele FPU ale Procesorului MIPS
Formate de instrucțiuni MIPS
Instrucțiunii de lucru cu memoria
Instrucțiunii aritmetice
Instrucțiuni logice
Instrucțiuni de ramificare
Instrucțiuni de salt
Instrucțiuni de deplasare
Setul de instrucțiuni MIPS
3/26/2019 SOC_05 2017-2018 19
Instrucțiunii aritmetice
Add Word – Adună conținutul a două registre si salvează rezultatul in al treilea registru.
rd[rs]+[rt]
ADD rd, rs, rt
Add Immediate Word – Adună conținutul unui registru cu o valoare imediată (cu semn) și salvează într-un registru. rt[rs]+immediate
ADDI rt, rs, immediate
SPECIAL
000000
0
00000rdrtrs
ADD
100000
31 26 202125 10111516 56 0
6 65555
ADDI
001000immediatertrs
31 26 202125 10111516 56 0
6 1655
3/26/2019 SOC_05 2017-2018 20
Instrucțiunii aritmetice
Subtract Word – Scade două registre și salvează rezultatul in al treilea registru. rd[rs]-[rt]
SUB rd, rs, rt
SPECIAL
000000
0
00000rdrtrs
SUB
100010
31 26 202125 10111516 56 0
6 65555
3/26/2019 SOC_05 2017-2018 21
CONȚINUT
Informații Generale
Registrele Procesorului MIPS
Registrele FPU ale Procesorului MIPS
Formate de instrucțiuni MIPS
Instrucțiunii de lucru cu memoria
Instrucțiunii aritmetice
Instrucțiuni logice
Instrucțiuni de ramificare
Instrucțiuni de salt
Instrucțiuni de deplasare
Setul de instrucțiuni MIPS
3/26/2019 SOC_05 2017-2018 22
Instrucțiuni logice
And Word - Și logic între două registre și salvează rezultatul în al treilea registru. rd[rs] & [rt]
AND rd, rs, rt
And Immediate Word - Și logic între un registru și o valoare imediată și salvează rezultatul într-un registru. rt[rs] & immediate
ANDI rt, rs, immediate
SPECIAL
000000
0
00000rdrtrs
AND
100100
31 26 202125 10111516 56 0
6 65555
ANDI
001100immediatertrs
31 26 202125 10111516 56 0
6 1655
3/26/2019 SOC_05 2017-2018 23
CONȚINUT
Informații Generale
Registrele Procesorului MIPS
Registrele FPU ale Procesorului MIPS
Formate de instrucțiuni MIPS
Instrucțiunii de lucru cu memoria
Instrucțiunii aritmetice
Instrucțiuni logice
Instrucțiuni de ramificare
Instrucțiuni de salt
Instrucțiuni de deplasare
Setul de instrucțiuni MIPS
3/26/2019 SOC_05 2017-2018 24
Instrucțiuni de ramificare
Branch on Equal – Salt dacă două registre sunt egale. if [rs] == [rt] PC PC+4+(offset << 2);
else PC PC+4
BEQ rs, rt, offset
Branch on Not Equal Salt dacă două registre sunt diferite. if [rs] != [rt] PC PC+4+(offset << 2);
else PC PC+4
BNE rs, rt, offset
BEQ
000100offsetrtrs
31 26 202125 1516 0
6 1655
BNE
000101offsetrtrs
31 26 202125 1516 0
6 1655
3/26/2019 SOC_05 2017-2018 25
BRANCH INSTRUCTIONS
Unconditional Branch – Salt necondiționat.PC PC+4+(offset << 2)
B offset
Branch on Greater than or Equal to Zero and Link – Salt dacă un registru este mai mare sau egal cu zero și salvează adresa de retur in r31.
if [rs] >= 0 r31 PC + 8; PC PC+4+(offset << 2);
else PC PC+4
BGEZAL rs, offset
BEQ
000100offset
0
00000
0
00000
31 26 202125 1516 0
6 1655
REGIMM
000001offset
BGEZAL
10001rs
31 26 202125 1516 0
6 1655
3/26/2019 SOC_05 2017-2018 26
CONȚINUT
Informații Generale
Registrele Procesorului MIPS
Registrele FPU ale Procesorului MIPS
Formate de instrucțiuni MIPS
Instrucțiunii de lucru cu memoria
Instrucțiunii aritmetice
Instrucțiuni logice
Instrucțiuni de ramificare
Instrucțiuni de salt
Instrucțiuni de deplasare
Setul de instrucțiuni MIPS
3/26/2019 SOC_05 2017-2018 27
Instrucțiuni de salt
Jump – Salt la adresa calculată.
PC (PC & 0xf0000000) | (target << 2);
J target
Jump and Link – Salt la adresa calculată și salvează adresa de retur în r31.
r31 PC + 8; PC (PC & 0xf0000000) | (target << 2);
JAL target
J
000010instr_index
31 26 25 0
6 26
JAL
000011instr_index
31 26 25 0
6 26
3/26/2019 SOC_05 2017-2018 28
JUMP INSTRUCTIONS
Jump and Link Register – Salt la adresa conținută in registrul rs (trebuie sa conțină ultimii doi biți egali cu 0) și salvează adresa de retur în rd.
rd PC + 8; PC [rs]
JALR rd,rs
Jump Register - Salt la adresa conținută in registrul rs (trebuie sa conțină ultimii doi biți egali cu 0)
PC [rs]
JR rs
SPECIAL
000000hintrd
0
00000rs
JALR
001001
31 26 202125 10111516 56 0
6 65555
SPECIAL
000000hint
0
00 0000 0000rs
JR
001000
31 26 202125 1011 56 0
6 65555
3/26/2019 SOC_05 2017-2018 29
CONȚINUT
Informații Generale
Registrele Procesorului MIPS
Registrele FPU ale Procesorului MIPS
Formate de instrucțiuni MIPS
Instrucțiunii de lucru cu memoria
Instrucțiunii aritmetice
Instrucțiuni logice
Instrucțiuni de ramificare
Instrucțiuni de salt
Instrucțiuni de deplasare
Setul de instrucțiuni MIPS
3/26/2019 SOC_05 2017-2018 30
Instrucțiuni de deplasare
Shift Word Left Logical – Deplasează un registru la stânga cu “sa” biți și salvează rezultatul în alt registru.
rd [rt ] << sa
SLL rd, rt, sa
Shift Word Right Logical - Deplasează un registru la dreapta (fără semn) cu “sa” biți și salvează rezultatul în alt registru.
rd [rt ] >> sa
SRL rd, rt, sa
SPECIAL
000000sardrt
0
00000
SLL
000000
31 26 202125 10111516 56 0
6 65555
SPECIAL
000000sardrt
0
00000
SRL
100100
31 26 202125 10111516 56 0
6 65555
3/26/2019 SOC_05 2017-2018 31
SHIFTING INSTRUCTIONS
Shift Word Right Arithmetic - Deplasează un registru la dreapta (fără semn) cu “sa” biți și salvează rezultatul în alt registru.
rd [rt ] >> sa
SRA rd, rt, sa
Shift Word Right Arithmetic Variable - Deplasează un registru la dreapta (fără semn) cu “[rs]” biți și salvează rezultatul în alt registru.
rd [rt ] >> [rs]
SRAV rd, rt, rs
SPECIAL
000000sardrt
0
00000
SRA
000011
31 26 202125 10111516 56 0
6 65555
SPECIAL
000000
0
00000rdrtrs
SRL
000111
31 26 202125 10111516 56 0
6 65555
3/26/2019 SOC_05 2017-2018 32
CONȚINUT
Informații Generale
Registrele Procesorului MIPS
Registrele FPU ale Procesorului MIPS
Formate de instrucțiuni MIPS
Instrucțiunii de lucru cu memoria
Instrucțiunii aritmetice
Instrucțiuni logice
Instrucțiuni de ramificare
Instrucțiuni de salt
Instrucțiuni de deplasare