You are on page 1of 13

2 Arhitektura skupa naredbi

Razmatranja provedena u prethodnom poglavlju pokazala su da je danas RISC temeljen na


arhitekturi sa spremnicima opće namjene najbolji koncept.

Slika 2.1 Koncept procesora sa spremnicima opće namjene

Slijedi projektiranje procesora temeljenog na postavljenom modelu. Kao prvi korak rezimirati
će se polazne pretpostavke:
• osnovni koncept je RISC temeljen na spremnicima opće namjene
• sve aritmetičke i logičke naredbe operande nalaze u spremnicima opće namjene te
u njih pohranjuju rezultat operacije
• prijenos operanada iz memorije u spremnike obavlja se pomoću load naredbe,
odnosno pohrana rezultata iz spremnika u memoriju pomoću store naredbe,
• Radi jednostavnosti sve naredbe su iste dužine.
Temeljem postavljenih polaznih pretpostavki može se pristupiti konkretnom definiranju,
specifikaciji gradivnih elemenata računala.
Veličina memorije: Broj memorijskih lokacija koje procesor može adresirati ovisi trenutnom
stanju tehnologije tako da današnji procesori adresiraju minimalno 4G memorije. Neka se
tako odabere i za projektirani procesor. Slijedi da su adrese 32 bitovne.
U memoriju se upisuju naredbe i podaci. Podaci mogu biti veličine 8, 16, 32 i 64 bita (char,
int, float, double). Radi bolje iskoristivosti dobro je memoriju organizirati sukladno
najmanjem podatku, odnosno da su lokacije 8 bitovne.
Programsko brojilo (PC) je spremnik u kojem je upisana adresa sljedeće naredbe koju
procesor treba izvesti. Ako procesor može adresirati 4G memorijskih lokacija slijedi da
programsko brojilo mora biti 32 bita.
Spremnici opće namjene koriste se za privremenu pohranu operanada i rezultata aritmetičkih
i logičkih operacije. Broj spremnika ovisi o tehnološkim mogućnostima (cijeni izvedbe),
zahtjevima programera te dodatnim zahtjevima vezanim uz učinkovitost sustava. Veći broj
spremnika opće namjene omogućava programerima privremenu pohranu većeg broja varijabli
ali je s druge strane skuplje rješenje, a i ima utjecaja na učinkovitost pri nekim funkcijama
operacijskog sustava, konkretno izmjene konteksta. U praksi se koristi od 8 pa sve do 128
spremnika opće namjene. Neka se za ovaj slučaj odabere kompromisno rješenje od 32
spremnika opće namjene.
U spremnike opće namjene, kako je već spomenuto, pohranjuju se operandi i rezultati
aritmetičkih i logičkih operacija. Neka procesor radi samo s cjelobrojnim podacima (radi
kasnije jednostavnije sklopovske realizacije). Cjelobrojni podaci su 32 bitovni, pa je najbolje i
da spremnici opće namjene budu 32 bita.
Instrukcijski spremnik (IR) privremeno pohranjuje naredbu koja se trenutno izvodi.
Njegova veličina ovisi o formatu naredbe. Kako se radi o RISC računalu neka bude podržano
do 32 naredbe, odnosno za operacijski kod potrebno je 5 bita. Kako ima 32 spremnika za
adresiranje svakog spremnika potrebno je također 5 bita, odnosno za rezultat i dva operanda
15 bita. Ukupno s operacijskim kodom za aritmetičku i logičku naredbu potrebno je 20 bita.
Naravno, ovo se odnosi samo na direktno adresiranje spremnika. Ukoliko se primjene i drugi
adresni modovi, npr. neposredno adresiranje potrebno je imati dodatnog mjesta za konstantu.
Temeljem navedenog može se zadati da naredba bude fiksne veličine, i to 32 bita. Ovakav
zahtjev na fiksnu veličinu naredbe niz prednosti kod sklopovske realizacije procesora.
Nakon provedenih razmatranja predloženo rješenje procesora prikazano je na slici:

Slika 2.2 Koncept procesora sa spremnicima opće namjene

2.1 SKUP NAREDBI PROCESORA


Nakon što su specificirani resursi procesora koji stoje na raspolaganju korisniku, kao i
organizacija memorije slijedi definiranje skupa naredbi procesora. Potrebno je detaljno
definirati:
1. Aritmetičke i logičke naredbe
2. Naredbe za prijenos podataka
3. Naredbe za upravljanje programskim tokom
Sve naredbe procesora jednake su dužine, 32 bita.
2.1.1 Aritmetičke i logičke naredbe

Izvode se isključivo nad sadržajima spremnika procesora. Obuhvaćaju dva operanda i rezultat.
Jedan operand je uvijek varijabla, dok drugi operand može biti varijabla ili konstanta.

2.1.1.1 Naredba za zbrajanje dviju varijabli


z=x+y
gdje su x, y i z spremnici.
Oblik naredbe je:
ADD R[ra],R[rb],R[rc]
Gdje su:
R[ra] spremnik u koji se sprema rezultat
R[rb] spremnik u koji se nalazi prvi operand
R[rc] spremnik u koji se drugi operand
Operacijski kod naredbe je 11,

31 2726 2221 1716 1211 0


01011 ra rb rc x x x x x x x x x x x x

Primjer:
ADD R3,R7,R11

31 2726 2221 1716 1211 0


01011000 1 1 00 11101 0 1100 0 000 0 00000

2.1.1.2 Naredba za zbrajanje varijable i konstante


z = x + c2
gdje su x, z spremnici, a c2 numerička konstanta.
Oblik naredbe je:
ADDI R[ra],R[rb],c2
Gdje su:
R[ra] spremnik u koji se sprema rezultat
R[rb] spremnik u koji se nalazi prvi operand
c2 numerička konstanta
Operacijski kod naredbe je 12,

31 2726 2221 1716 0


01100 ra rb c1

Konstanta c1 ograničena je na 17 bita i kako može poprimiti i negativnu vrijednost njen iznos
ograničen je na -216 do 216-1.
Primjer:
ADDI R3,R7,47
31 2726 2221 1716 0
01100000 1 1 00 11100 0 0000 0 000 1 01111

ili
ADDI R3,R7,-47

31 2726 2221 1716 0


01100000 1 1 00 11111 1 1111 1 111 0 01111

Problem je zbrajanje spremnika 32 bita i konstante c2 koja je sastavni dio IR i veličine je 17


bita. Neka je sadržaj R7 53.

31 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 1 R7

31 2726 2221 1716 0


0 1 1 0 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 IR

odnosno predznak (16 bit) proširi se na sve preostale bitove od 16 do 31:


31 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 1 R7

31 16 0
1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 IR
predznak
te se dobije:
31 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 1 R7

31 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 c2

2.1.1.3 Naredba za oduzimanje dviju varijabli


z=x-y
gdje su x, y i z spremnici.
Oblik naredbe je:
SUB R[ra],R[rb],R[rc]
Gdje su:
R[ra] spremnik u koji se sprema rezultat
R[rb] spremnik u koji se nalazi prvi operand
R[rc] spremnik u koji se drugi operand
Operacijski kod naredbe je 13,
31 2726 2221 1716 1211 0
01101 ra rb rc x x x x x x x x x x x x

Primjer:
SUB R3,R7,R11

31 2726 2221 1716 1211 0


01101000 1 1 00 11101 0 1100 0 000 0 00000

2.1.1.4 Naredba za logičko I dviju varijabli


z = x AND y
gdje su x, y i z spremnici.
Oblik naredbe je:
AND R[ra],R[rb],R[rc]
Gdje su:
R[ra] spremnik u koji se sprema rezultat
R[rb] spremnik u koji se nalazi prvi operand
R[rc] spremnik u koji se drugi operand
Operacijski kod naredbe je 14,

31 2726 2221 1716 1211 0


01110 ra rb rc x x x x x x x x x x x x

Primjer:
AND R3,R7,R11

31 2726 2221 1716 1211 0


01110000 1 1 00 11101 0 1100 0 000 0 00000

2.1.1.5 Naredba za logičko I varijable i konstante


z = x AND c21
gdje su x, z spremnici, a c2 numerička konstanta.
Oblik naredbe je:
ANDI R[ra],R[rb],c2
Gdje su:
R[ra] spremnik u koji se sprema rezultat
R[rb] spremnik u koji se nalazi prvi operand
c2 numerička konstanta
Operacijski kod naredbe je 15,

31 2726 2221 1716 0


01111 ra rb c1
Konstanta c1 ograničena je na 17
Primjer:
ANDI R3,R7,47

31 2726 2221 1716 0


01111000 1 1 00 11100 0 0000 0 000 1 01111

ili
ANDI R3,R7,-47

31 2726 2221 1716 0


01111000 1 1 00 11111 1 1111 1 111 0 01111

2.1.1.6 Naredba za logičko ILI dviju varijabli


z = x OR y
gdje su x, y i z spremnici.
Oblik naredbe je:
OR R[ra],R[rb],R[rc]
Gdje su:
R[ra] spremnik u koji se sprema rezultat
R[rb] spremnik u koji se nalazi prvi operand
R[rc] spremnik u koji se drugi operand
Operacijski kod naredbe je 16,

31 2726 2221 1716 1211 0


10000 ra rb rc x x x x x x x x x x x x

Primjer:
OR R3,R7,R11

31 2726 2221 1716 1211 0


10000000 1 1 00 11101 0 1100 0 000 0 00000

2.1.1.7 Naredba za logičko ILI varijable i konstante


z = x OR c21
gdje su x, z spremnici, a c2 numerička konstanta.
Oblik naredbe je:
ORI R[ra],R[rb],c2
Gdje su:
R[ra] spremnik u koji se sprema rezultat
R[rb] spremnik u koji se nalazi prvi operand
c2 numerička konstanta
Operacijski kod naredbe je 17,
31 2726 2221 1716 0
10001 ra rb c1

Konstanta c1 ograničena je na 17
Primjer:
ORI R3,R7,47

31 2726 2221 1716 0


01111000 1 1 00 11100 0 0000 0 000 1 01111

ili
ORI R3,R7,-47

31 2726 2221 1716 0


01100000 1 1 00 11111 1 1111 1 111 0 01111

2.1.2 Naredbe za prijenos podataka


Naredbe za prijenos podataka koriste se za prijenos podataka iz memorije u spremnik,
odnosno iz spremnika nazad u memoriju. Naredba mora specificirati smjer prijenosa,
spremnik u koji se sprema podatak iz memorije ili iz kojega se podatak prenosi u memoriju, te
memorijsku lokaciju koja se koristi u prijenosu podataka.

2.1.2.1 Naredba za prijenos podatka iz memorije u spremnik

R[ra] = M[adr]
gdje su ra spremnik u koji se podatak upisuje,
adr je adresa sa koje se podatak upisuje u spremnik.
Mogući format naredbe bio bi:

31 2726 2221 1716 1211 0


op.kod ra adr

odakle slijedi da adresa može biti samo 22 bita, odnosno da je moguće adresirati sveg 4MB
memorije, što definitivno nije zadovoljavajuće.
Moguća rješenja su:
• Proširiti naredbu za dodatnih 32 bita

31 2726 2221 1716 1211 0


op.kod ra
31 2726 2221 1716 1211 0
adr
Ovim rješenjem narušava se koncept da su sve naredbe iste dužine.
• Koristiti druge adresne modove osim direktnog adresiranje, npr. indirektno pomoću
registra ili bazno pomoću registra (registar + baza)

31 2726 2221 1716 0


op.kod ra rb c1

gdje je adr = R[rb] + c1


Drugo rješenje puno je bolje te će se koristiti kod projektiranog procesora.

Oblik naredbe je:


LD R[ra],R[rb],c1
Gdje su:
R[ra] spremnik u koji se sprema rezultat
R[rb] spremnik u koji se nalazi baza adrese
c1 konstanta u dvostrukom komplementu koja je indeks adrese.
-216 ≤ c1 < 216
Operacijski kod naredbe je 1.

31 2726 2221 1716 0


00001 ra rb c1

Postupak generiranja adrese prikazan je sljedećom slikom.

31 2726 2221 1716 0


00001 ra rb c1 IR

adresa
+
31 0
R[rb]

Ponekad je zgodno imati mogućnost upisa direktno s adrese bez proračuna adrese uz
ograničenja na adresu kojoj se direktno pristupa. Moguća rješenja su:

31 2726 2221 1716 1211 0


op.kod ra adr

gdje je ovo sada nova naredba s novim operacijskim kodom.


Drugo rješenje je da se iskoristi postojeća naredba uz određene modifikacije, na način da se
direktno adresira ukoliko je polje rb = 0.
31 2726 2221 1716 0
00001 ra 0 0 0 0 0 c1

Ovakvo ograničenje pretpostavlja da se za indirektno adresiranje ne može koristiti spremnik


R[0].
Kod projektiranja procesora koristiti ćemo drugo rješenje.

2.1.2.2 Naredba za prijenos podatka iz spremnika u memoriju


Oblik naredbe je:
ST R[ra],R[rb],c1
Gdje su:
R[ra] spremnik u koji se sprema rezultat
R[rb] spremnik u koji se nalazi baza adrese
c1 konstanta u dvostrukom komplementu koja je indeks adrese.
-216 ≤ c1 < 216
Operacijski kod naredbe je 2.

31 2726 2221 1716 0


00010 ra rb c1

2.1.2.3 Naredba za upis konstante u spremnik


Prethodne dvije naredbe zahtijevaju da se u spremnik R[rb] unese baza. U skladu s navedenim
potrebno je uvesti naredbu za upis konstante (bazne adrese) u spremnik.
Oblik naredbe je:
LDA R[ra],c2
Gdje su:
R[ra] spremnik u koji se sprema konstanta
c1 konstanta u dvostrukom komplementu koja je indeks adrese.
-221 ≤ c1 < 221
Operacijski kod naredbe je 3.

31 2726 2221 0
00010 ra c2

2.1.3 Naredbe za upravljanje programskim tokom


Naredbe za upravljanje programskim tokom mijenjaju slijedno izvođenje naredbi (izvodi se
sljedeća naredba u nizu) na način da se izvođenje prebacuje na neku drugu memorijsku adresu
(preskače se određeni broj naredbi).
Ove naredbe mijenjaju sadržaj programskog brojila.
Razlikuju se:
• Bezuvjetna grananja
• Uvjetna grananja
Bezuvjetno grananje prebacuje automatski izvođenje na adresu naredbe specificirane
naredbom za grananje.
Uvjetne naredbe ispituju uvjet i ukoliko je isti zadovoljen izvodi se grananje na adresu
naredbe specificirane naredbom za grananje. Uvjet je neki aritmetički i logički izraz koji se
izračuna i kao rezultat pohrani u neki spremnik. Slijedi ispitivanje sadržaja spremnika na
jednostavne uvjete:
• Pozitivan (bit predznaka 0)
• Negativan (bit predznaka 1)
• Jednak nula (svi bitovi nula; NILI funkcija svih bitova)
• Različit od nula (barem jedan bit = 1; ILI funkcija svih bitova).
Primjer:
a + b < c – 32;

LDA R1, adr a


LD R2, R1, 0 ; a u R2
LD R3, R1, 4 ; b u R3
LD R4, R1, 8 ; c u R4
ADD R5, R2, R3 ; a + b
ADDI R6, R4, -32 ; c – 32
SUB R5, R5, R6 ; (a + b) – (c – 32)
U spremniku R5 rezultat je operacija i ako je sadržaj R5 negativan uvjet je zadovoljen.

U naredbama za grananja moguće je adresu grananja specificirati na dva načina:


• Relativno u odnosu na trenutnu adresu (sadržaj PC)
• Apsolutno
Temeljem navedenog imati ćemo sljedeće naredbe za relativna i apsolutna grananja.

2.1.3.1 Naredbe za relativna grananja


Naredbe za relativna uvjetna grananja uspoređuju sadržaj spremnika R[ra] s uvjetom i ukoliko
je uvjet zadovoljen grana se na naredbu na adresu PC + c2, odnosno:
PC = PC + c2
Imaju format:

31 2726 2221 0
op.kod ra c2

gdje je -221 ≤ c2 < 221

Naredba koja izvodi grananje ako je sadržaj spremnika R[ra] pozitivan


BRP R[ra], c2
Operacijski kod je 20
Naredba koja izvodi grananje ako je sadržaj spremnika R[ra] negativan
BRM R[ra], c2
Operacijski kod je 21
Naredba koja izvodi grananje ako je sadržaj spremnika R[ra] nula
BRZ R[ra], c2
Operacijski kod je 22
Naredba koja izvodi grananje ako je sadržaj spremnika R[ra] različit od nule
BRNZ R[ra], c2
Operacijski kod je 23
Naredba za relativno bezuvjetno grananje izvodi bezuvjetno grananje od trenutne vrijednosti
programskog brojila za vrijednost c3, odnosno:
PC = PC + c3
Imaju format:

31 2726 0
op.kod C3

gdje je -226 ≤ c3 < 226


Naredba za bezuvjetno relativno grananje
BR c3
ima operacijski kod 24.

2.1.3.2 Naredbe za apsolutna grananja


Naredbe za apsolutna uvjetna grananja uspoređuju sadržaj spremnika R[rb] s uvjetom i
ukoliko je uvjet zadovoljen grana se na naredbu na adresu koja je upisana u spremnik R[ra],
odnosno:
PC = R[ra]
Koristi se indirektni adresni mod budući kao i kod naredbi za prijenos podataka broj
preostalih bita u naredbi nije dovoljan da se adresiraju sve memorijske lokacije. Mogući
format naredbe je:

31 2726 2221 1716 0


op.kod ra rb x

Svaka naredba dobiva svoj operacijski kod.


Kako u naredbi ima 17 neiskorištenih bita, u cilju uštede operacijskih kodova moguće je
sljedeće rješenje:

31 2726 2221 1716 0


op.kod ra rb a bc

Sva apsolutna grananja imaju isti operacijski kod 25 te se tip grananja određuje na osnovu a, b
i c bitova na način:
a b c
0 0 0 bezuvjetno BA
0 0 1 pozitivno BAP
0 1 0 negativno BAM
0 1 1 nula BAZ
1 0 0 raz. nula BANZ
2.1.4 Primjeri prevođenja iz Ca u strojni jezik

1. Odsječak koda prebaci u strojni jezik


int i, j, k, x;
k = i – j -14:
if (k > x)
k=x
else
k = 0;

Rješenje:
adrese:
i = 300
j = 304
k = 308
x = 312
0 LA R0, 300 ; bazna adresa o R0
4 LD R1, R0, 0 ; i u R1
8 LD R2, R0, 4 ; j u R2
12 SUB R3, R1, R2 ;k=i–j
16 ADDI R3, R3, -14 ; k = k -14
20 LD R4, R0, 12 ; x u R4
24 SUB R5, R4, R3 ; u R5 x – k, računa se 0 > x – k
28 BRMI R5, 8 ; granaj se ako je x – k negativno, preskoči 3 naredbe
32 BRZ R5, 4 ; granaj se ako je x – k = 0, preskoči 2 naredbe
36 LA R3, 0 ; ako je x – k > 0 tada je k = 0
40 BR 4 ; preskoči k = x, jednu naredbu
44 ADDI R3, R4, 0 ;k=x
48 ST R3, R0, 8 ; spremi k

2. Odsječak koda prebaci u strojni jezik


int i, j, k,;
if (k -15 > j + i)
k=j+k
else
k = 0;

adrese:
i = 300
j = 304
k = 308
0 LA R0, 300 ; bazna adresa o R0
4 LD R1, R0, 0 ; i u R1
8 LD R2, R0, 4 ; j u R2
12 LD R3, R0, 8 ; k u R3
; računa se 0 > j + i – k + 15
16 ADD R4, R1, R2 ; rez = i + j
20 SUB R4, R4, R3 ; rez = rez - k
24 ADDI R4, R4, 14 ; rez = rez +15
28 BRMI R4, 8 ; granaj se ako je rez negativno, preskoči 3 naredbe
32 BRZ R4, 4 ; granaj se ako je rez = 0 preskoči 2 naredbe
36 LA R3, 0 ; ako je rez > 0 tada je k = 0
40 BR 4 ; preskoči jednu naredbu
44 ADDI R3, R1, R1 ;k=i+j
48 ST R3, R0, 8 ; spremi k

You might also like