Regjistri file (register file) /MIPS

Yep, jemi ne arkitekturen mips, per ata qe e nenvleftesojn ta dine se playstation, perdor proçesor MIPS si dhe gjen aplikim shume ne paisjet elektronike ne saj te arkitektures RISC (reduced instruction set architecture) per shkak se ka shume pak instruksion dhe sipas perkufizimit sa me pak instruksione aq me i shpejt eshte nje proçesor.

RI = Register File , ne shqip faili i regjistrave te sistemit eshte nje komponent elektrik per ruajtjen e te dhenave i ndertuar ne proçesor qe perdoret per veprimet e ndryshme te proçesorit gjat cikleve te tij.

RI ne MIPS eshte i perbere nga 32 rregjistra dhe secili nga keto rregjistra ka kapacitetin qe te ruaj 32 bit informacion te koduar ne numer binar. Keshtu qe ne total 32 rregjistra X 32 bit qe ka kapacitet secili atehere kemi 1024 bit memorje ne dispozicion.

Ja pamja e thjeshtuar e RF

Ne arkitekturen MIPS,  kemi perkufizimin qe ne situata te veçanta perdoren rregjistra te veçant, dhe kjo sepse rregjistrat kane funksione te veçanta.

Le ti shohim scecilin nga ata se ç’fare funksionesh kane, ne rradhe te pare themi se ç’do instruksion ne assembly te arkitektures mips ne pergjithesi vepron duke perdorur nje nga rregijstrat e sistemit dhe kemi dhe sintaksen psh:

add $v1, $s1, $s2  #qe ne pseudoinstruksion eshte ekuivalente me $v1 = $s1 + $s2

E ne shqip do te thote merr bitet qe jane ne rregjistrin $s1 dhe mblidhi me ato qe jane ne rregjistrin $s2 dhe shumen depozitoje ne rregjistrin $v1

Kjo ne fjale te tjera eshte gjuha assembly qe me sintaksen e saj vepron direkt me proçesorin ose me memorjen {ne rastin Mips kur perdorim komanen li (load immediate) } , add normalisht nuk njihet nga proçesori por njihet ekuivalentja e saj ne MIPS ISA dhe kjo enkodohet ne kod binar i cili eshte ekuivalent per ate instruksion te caktuar , perfaqesimin ne haxadecimal (0x) te atij kodi binar qe per arkitekturen do te thote “mblidh” do e quajm opcode ose operation code qe do te thote kodi operacional nese mund ta themi keshtu, pra eshte kod i cili i thote proçesorit te kryej nje veprim te caktuar e ne aspektin gjuhesor eshte ‘folja’ e cila tregon levizje apo nje veprim specifik.

Grupet e Rregjistrave

Siç e shohim ne figuren me siper, rregjistrat fillojn te gjith me $, dhe emertohen me emra te ndryshem , fillojm ti sqarojm 1 nga 1 ne baze grupi.

$zero / ky eshte nje rregjister qe qendron gjithmon 0 , pra eshte konstant dhe per ata te çmendur [ 😀 ] qe kane provuar ti japin nje vlere do te shohin qe eshte e pamundur pasi eshte i ndertuar ne hardware. E thene midis nesh (kush perdor linux) nje /dev/null

$at / ose assembler temporary , eshte i rezevuar nga assembleri (kompilatori assembler) dhe mban vlera te perkohshme te makro instruksioneve , ose pseudo instruksioneve.

$v / ose rregjistrat e vlerave, perdoren per te kthyer vlera nga funksionet, dhe gjen zbatim ne IO , ne rastet kur perdoret “syscall” per te kryer nje sherbim te caktuar dhe programatoret kane caktuar 10 sherbime te mundshme duke karikuar tek $v0 vlera nga 1 tek 10 ku secila nga keto ka nje funksion te caktuar psh nese perdorim komanden li $v0, 4 ku ne fjale te tjera karikojm ne rregjistrin $v0 vleren 4 sipas perkufizimit kodi 4 do te thote Print String, e kodi 5 Read Integer, kodi 1 eshte Print Integer e keshtu me rradhe.

$a / Regjistrat e argumenteve – qe jane shume te lidhur me rregjistrat me siper pasi $v ishte per te kthyer vlera nga funksionet kurse $a si grup perdoren per te kaluar vlera tek funksionet e le te shohim nje rast ku kombinohen te dy: li $v0 4 # thirrja e sistemit per te printuar string (tog fialesh) la $a0 , prsh # i themi load address te mesazhit prsh tek rregjistri a0 dhe prsh neve psh mund ta kemi percaktuar tek .data si prsh: .ascizz “n Pershendetjeeeee!! ”

$t / Rregjistrat temporan – jane rregjistra qe perdoren nga kompilatori assembler ose nga programatori (ne) per te magazinuar vlera te menjehershme e zakonisht jane rregjistrat qe perdoren me shume nga komanda li (load immediate).

$s / Regjistrat temporan te shpetuar – keto jane te ngjashem me me $t me ndryshimin qe vlera mbetet dhe perdoren per te magazinuar vlera akoma me te gjata. (zakonisht kur kemi te bejm me instruksione andi , addi, or, srl etj..

$k / Regjistrat e Kernelit – keto jane regjistra te rezervuar nga kerneli, pra zemra e sistemit operativ dhe nuk mund te perdoren modifikohen nga programatori.

$gp / Global Pointer – shenohet adres qe piketon piken globale ne memorje (do i shohim nese do kemi mundesi te shpjegojm memorjen RAM)

$sp / Stack Pointer – piketon adresen ne te cilen gjate egzekutimit te programit ndodhet stack-u

$fp / Frame Pointer – edhe ky nje rregjister qe vepron me memorjen ku vlera e tij tregon lokacionin e memorjes ne te vilen ndodhet frame. (Do e shohim me ne detaj tek shpjegimi i RAM-it)

$ra / Return Address – regjistri i adreses se kthimit apo pika e kthimit, perdoret per ti thene nje funksioni se ku duhet te kthete (gjithmon ne memorje) gjate egzekutimit te programit.