340 likes | 602 Views
Karakteristike RISC procesora. Arhitektura MIPS procesora
E N D
Arhitektura MIPS procesora MIPS procesori su tipični predstavnici RISC koncepta sa Load/Store arhitekturom. To zapravo znači da se sve operacije izvršavaju nad operandima koji se nalaze u registrima na čipu, a memoriji se pristupa isključivo preko Load (memorija-registar) i Store (registar-memorija) instrukcija. Na taj način značajno se poboljšavaju performanse procesora jer je vreme pristupa memoriji znatno duže od vremena pristupa registrima. Takođe, spoljnu magistralu MIPS procesora čine dve posebne magistrale, jedna za pristup instrukcijama, a druga za pristup podacima. Time se pristup podacima obavlja paralelno sa pribavljanjem instrukcija čime se eliminišu konflikti između instrukcija i podataka koji realno postoje kod sistema zasnovanih na jedinstvenoj magistrali.
Memorija Memorija je bajt adresabilna sa 32-bitnim adresama (od 0x00000000 do 0xffffffff). Koristi se tzv. little- endian način rada, što zapravo znači da se u memoriju na LS bajt poziciju upisuje bajt najmanje težine.
Registri MIPS arhitektura definiše sledeće CPU registre: - 32 registra opšte namene, svi obima 32 bita, ovi registri čine RF polje - par specijalnih registara HI i LO koji se koriste za čuvanje međurezultata kod izvršavanja operacija množenja i deljenja. - programski brojač (PC),koji čuva adresu naredne instrukcije. Kako su sve instrukcije MIPS arhitekture dužine 32 bita PC se nakon izvršenja svake instrukcije uveća za 4. Na sledećoj slici prikazani su registri RF polja i njihova namena.
Formati instrukcija Korišćeni su sledeći simboli: - op- 6-bitni opkod instrukcije - rs- 5-bitni specifikator izvorišnog registra - rd- 5-bitni specifikator odredišnog registra - rt - 5-bitni specifikator cilnog (izvorišnog/ odredišnog) registra ili uslova grananja - imm- 16-bitni neposredni razmeštaj koji se odnosi na grananje ili adresni razmeštaj - ciljna adresa - 26-bitna ciljna adresa grananja/skoka - shamt- 5-bitna informacija koja ukazuje na iznos pomeranja - funct- 6-bitno funkcijsko polje
Načini adresiranja operanada Procesor MIPSxx koristi sledeća četiri adresna načina rada: 1. registarsko adresiranje:operand je u registru 2. bazno adresiranjesa razmeštajem:operand je u memorijskoj lokaciji čija je adresa zbir sadržaja registra i polja "adresa" instrukcije 3. neposredno adresiranje: operand je konstanta i sastavni je deo instrukcije (polje "imm") 4. PC relativno adresiranje: adresa predstavlja zbir PC-a i sadršaja polja "adresa" instrukcije
Skup instrukcija Sve instrukcije MIPS arhitekture imaju fiksni obim od 32 bita i mogu se podeliti na sledeće tri grupe: - regularne instrukcije za manipulisanje integer vrednostima - makro-instrukcije ili tzv. pseudoinstrukcije - regularne instrukcije za manipulisanje float-point vrednostima
Primeri pseudo instrukcije MIPSxx arhitekture Kao što je već naglašeno u MIPS arhitekturi postoji određen broj makro ili pseudo instrukcija za manipulisanje integer vrednostima. Svaku od ovih instrukcija asembler radi izvršenja prevodi u skup od jedne ili više osnovnih (regularnih) instrukcija. Na sledujućim slajdovima dat je detaljniji opis nekoliko pseudo instrukcija. Za svaku od njih naveden je naziv (na engleskom), sintaksa, broj reči koje instrukcija zauzima, vreme potrebno za izvršenje instrukcije (broj ciklusa), zatim kratak opis i skup regularnih instrukcija kojima se data pseudoinstrukcija zamenjuje.
Absolute Value:abs Rd, Rs3/3 U registar Rd smešta se apsolutna vrednost sadržaja registra Rs. addu Rd, $0, Rs bgez Rs, skip sub Rd, $0, Rs skip: Primer: lui $1, 0xffff or $t1, $1, -5 # $t1 = -5 addu $t2, $0, $t1 # abs $t2, $t1 bgez $t1, skip sll $0, $0, 0 sub $t2, $0, $t1 skip:
Load Address: la Rd, Label 2/2 Adresa koja odgovara labeli Label se učitava u registar Rd. lui $1, HI(Label) ori Rd, $1, LO(Label) Primer: la $t0, target jr $t0 ... target: ...
Load Immediate:li Rd, value2/2 32-bitna vrednost value se učitava u registar Rd. lui $1, HI(value) ori Rd, $1, LO(value) Primer: lui $1, 0xffff # negativne vrednosti or $t1, $1, -354 ori $t2, 45000 # pozitivne vrednosti # do 16 bita (0...65 536) lui $1, 0x1234 # pozitivne vrednosti od or $t3, $1, 0x5678 # 16 od 32 bita
Unaligned Load Word: ulw Rd, n(Rs) 2/2 Reč sa adrese n(Rs) se učitava u registar Rd. Adresa ne mora biti poravnata. lwl Rd, (n+3)(Rs) lwr Rd, n(Rs) Primer: lui $t0, 0x1000 # $t0=0x10000000 lui $1, 0x0123 ori $1, 0x4567 # $1=01234567 sw $1, 0($t0) lui $1, 0x89AB ori $1, 0xCDEF sw $1, 4($t0) # 0 1 2 3 4 5 6 7 # 67 45 23 01 EF CD AB 89 lwl $t1, 6($t0) # ulw $t1, 3($t0) lwr $t1, 3($t0) # $t1 = 0xABCDEF01
Unaligned Store Halfword: ush Rd, n(Rs) 3/3 Niža polureč iz registra Rd se smešta na adresu n(Rs). Adresa ne mora biti poravnata. sb Rd, n(Rs) srl $1, Rd, 8 sb $1, (n+1)(Rs) Primer: lui $t0, 0x1000 # $t0=0x10000000 ori $t1, 0x1234 # $t1=0x00001234 sb $t1, 3($t0) # ush $t1, 3($t0) srl $1, $t1, 8 sb $1, 4($t0) # 0 1 2 3 4 5 6 # 00 00 00 34 12 00 00
Makro naredbe Asemblerski jezik MIPS arhitekture pruža mogućnost korišćenja makro naredbi. Makro naredba predstavlja sekvencu regularnih instrukcija koja se definiše jedanput a može se koristiti više puta u toku izvornog programa. Svaka makro naredba sastoji se od 3 celine: - zaglavlje predstavlja zapravo ime makro naredbe sa zadatim formalnim parametrima (npr. addx2 ($rd, $rs, $rt) - telo čini sekvenca reglarnih instrukcija u koju asembler prevodi makro pri pozivu - direktiva koja se odnosi na kraj definicije Pri pozivu makroa zadaje se ime i aktuelni parametri.
Kod MIPS mikroprocesora makro naredbe imaju sledeću sintaksu: .macro ime naredbe ($parametri) sekvenca instrukcija koje čine makro .end_macro Primer: definisanje makroa: .macro addx2 ($rd, $rs, $rt) sll $1, $rs, 1 addu $rd, $1, $rt .end_macro poziv makroa: addx2 ($t2, $t1, $t0) Slede primeri instrukcija koje bi se mogle definisati kao makro naredbe.
Add with Shift by 1 : addx2 Rd, Rs, Rt2/2 Sadržaj registra Rs se množi sa 2, pa se sabira sa sadržajem registra Rt. Dobijeni rezultat se upisuje u registar Rd. sll $1, Rs, 1 addu Rd, $1, Rt Primer: ori $t0, $0, 8 # $t0 = 8 ori $t1, $0, 1 # $t1 = 1 sll $1, $t0, 1 # addx2 $t2, $t1, $t0 addu $t2, $1, $t1 # $t2 = 17
Branch if All Bits Set: ball Rs, Rt, Label3/3 Ukoliko su postavljeni svi bitovi u registru Rs označeni maskom u registru Rt vrši se grananje na adresu Label. nor $1, Rs, $0 and $1, $1, Rt beq $1, $0, Label Primer: ori $t1, $0, 12 # $t1 = 1100 ori $t0, $0, 11 # $t0 = 1011 nor $1, $t1, $0 # ball $t1, $t0, lab and $1, $1, $t0 beq $1, $0, lab sll $0, $0, 0 ori $t2, $0, 1 # ako nije doslo do lab: # grananja $t2=1
Maximum Value: max Rd, Rs, Rt 4/4 U registar Rd se upisuje veća od vrednosti u registrima Rs i Rt. Sadržaji registara Rs i Rt se porede kao označeni brojevi. slt $1, Rs, Rt beq $1, $0, skip or Rd, Rs, $0 or Rd, Rt, $0 skip: Primer: lui $1, 0xffff ori $t0, $1, 0xfffb # t0 = -5 ori $t1, $0, 7 # t1 = 7 slt $1, $t1, $t0 # max $t2, $t1, $t0 beq $1, $0, labela or $t2, $t1, $0 # u slotu grananja or $t2, $t0, $0 labela:
Primer Dat je niz a od 4 elementa tipa reč (32 bita). Generisati nizove b i c čiji su elementi tipa polureč (16 bitova) tako što se u niz b smešta niža, a u niz c viša polureč odgovarajućeg elementa niza a. Pretpostaviti da su nizovi a, b i c smešteni počev od adresa NizA, NizB i NizC, respektivno, pri čemu ove adrese ne moraju biti poravnate.
Prvo definišemo nizove: .data NizA: .word 0x11112222, 0x33334444, 0x55556666, 0x77778888 NizB: .half 0, 0, 0, 0, 0 NizC: .half 0, 0, 0, 0, 0 .text
Rešenje: la $t0, NizA addi $t0, $t0, 16# kraj niza a la $t1, NizB addi $t1, $t1, 8# kraj niza b la $t2, NizC addi $t2, $t2, 8# kraj niza c la $t7, NizA petlja: addi $t0, $t0, -4 # pomeramo se za addi $t1, $t1, -2 # jedan element unazad addi $t2, $t2, -2 # u svim nizovima ulw $t5, 0($t0) # ucitaj rec ush $t5, 0($t1) # sacuvaj nizu polurec u b srl $t5, $t5, 16 ush $t5, 0($t2) # sacuvaj visu polurec u c bne $t0, $t7, petlja # dok ne stignemo do # pocetka niza
korak 1: Pokrenuti MIPSter (Start→All Programs→MIPSter). Na označena mesta uneti rešenje primera koje je dato na predhodnom slajdu. Sekcija za definisanje podataka Sekcija za programsku sekvencu
korak 2: Selektovati file→save as iz padajućeg meny-ja i u dialog box-u koji se otvori upisati “primer.s”i kliknuti na taster save (ili pritisnuti taster enter). Ovde upisati: primer.s
korak 3: Pokrenuti program PCSpim (Start→All Programs→PCSpim). Otvoriće se aplikaconi prozor koji je prikazan na slici. register Text segment data segment messages
Aplikacioni prozor sastoji se iz četiri dela: - sekcija na vrhu je meny-bar. Omogućava selekciju File operacije, postavljanje konfiguracije-opcijom Simulator, selekciju načina i vrste prikaza-opcijom Windows i dobijanje pomoćnih informacija-opcijom Help. - odmah ispod meny-bar-a je toolbar. Omogućava brzi bristup preko miša do svih alata koje koristi PCSpim. - najveća sekcija u sredini ekrana je sekcija prikaza koja ima četiri celine:Register (vrednosti svih registara CPU i MPU jedinica MIPS procesora), Text Segment (instrukcije iz korisničkog programa i sistemski kod), Data Segment (podaci koji se nalaze u memoriji i kojima korisnički program manipuliše) i Messages (ispisuju se pouke PCSpim-a). - na dnu velikog prozora nalazi se sekcija Status bar. Ova sekcija sadrži informacije o tekućim aktivnostima istatusu simulatora.
korak 4: Postaviti konfiguraciju simulatora selektovanjem Simulator→Settings iz menu bar-a tako da dialog box koji se otvori izgleda kao na slici
korak 5: Loadovati fajl primer.s selekcijom Open tastera iz toolbar-a (alternativno može se selektovati File→Open iz menu bar-a). Ukoliko program ne može da se loaduje PCSpim će pružiti mogućnost promene konfiguracje okoline i automatski će izvršiti reload fajla. Po učitavanju dialog box za otvaranje fajlova se zatvara i pojavljuje se glavni aplikacioni prozor sa prikazima instrukcija i podataka. Ako to nije slučaj treba promeniti izgled ekrana selekcijom Windows→Tile iz menu bar-a. Svaka instrukcija u tekstualnom segmentu prikazana je u liniji sličnoj sledećoj: [0x0040000c] 0x00041080 sll $2, $4, 2 ; 143: sll $v0, $a0, 2 Prvi broj u liniji, smešten između uglastih zagrada je heksadecimalna memorijska adresa instrukcije. Drugi broj je heksadecimalni kod instrukcije. Iza tačke i zareza sledi linija iz fajla koja generiše instrukciju, a broj 143 je broj linije u fajlu. Ako iza tačke i zareza nema nikakve linije znači da je instrukciju generisao PCSpim u procesu prevođenja pseudonstrukcije ili makro naredbe.
korak 6: Pratiti izvršavanje programa uz pomoć tastera F10 ili selektovati Simulator→Single _Step iz menu bar-a (program se izvršava instrukcija po instrukcija). Izvršenje programa postiže se i pritiskom Go tastera iz toolbar-a (alternativno može se selektovati Simulator→Go iz menu bar-a).