You are on page 1of 24

Napredne arhitekture raunala

Vjebe 1

MIPS - assembler
32 registra:
$s0 - $s7; $t0 - $t9; $a0 - $a3; $zero; $gp; $fp

svaki registar 32 bita pristup memoriji skup instrukcija (aritmetike, podatkovne, logike, grananje)

Napredne arhitekture raunala - PMFST 2013/14

MIPS
osnovne instrukcije add zbrajanje sub oduzimanje lw uitaj iz memorije sw spremi u memoriju slt, slti logika usporedba beq, bne uvjetni skok j bezuvjetni skok

Napredne arhitekture raunala - PMFST 2013/14

Tri formata instrukcija

R-type

0
31:26

rs
25:21

rt
20:16

rd
15:11

shamt
10:6

funct
5:0

Load/ Store

35 or 43
31:26

rs
25:21

rt
20:16

address
15:0

Branch

4
31:26 opcode

rs
25:21 always read

rt
20:16 read, except for load

address
15:0 write for R-type and load sign-extend and add

Napredne arhitekture raunala - PMFST 2013/14

Instructions
add: Assembler simbolini strojni oblik add rd,rs,rt // spremi zbroj registara rs i rt u registar rd add R3,R2, R1 // spremi zbroj R2 i R1 u R3

Strojni oblik op rs rt rd shtm function code 6 5 5 5 5 6 0000.00I00.010I0.0001.I0001.1I000.00I10.0000 Strojni oblik , skraeni zapis u hex obliku 0 0 4 1 1 8

Napredne arhitekture raunala - PMFST 2013/14

Zbrajanje i oduzimanje
instrukcije add i sub moramo navesti 3 varijable Primjer:

add a, b, c
sub d, a, e

# zbraja se vrijednost od b i c i sprema se u a # oduzimaju se a i e te se rezultat sprema u d

Napredne arhitekture raunala - PMFST 2013/14

Zbrajanje
Programski jezik C

7
MIPS
add a, b, c sub d, a, e
ili ako koristimo imena registara

a = b + c;
d = a e;

add $s1, $s2, $s3 sub $s4, $s1, $s5

Napredne arhitekture raunala - PMFST 2013/14

Zadatak 1
Napiite skup instrukcija koji e izraunati zadani izraz: a = (b + c) (d + e)

Rjeenje: add $t0, $s1, $s2 add $t1, $s3, $s4 sub $s0, $t0, $t1

#registar $t0 sadri b + c #registar $t1 sadri d + e

# u registar $s0 se spremi $t0 - $t1

Napredne arhitekture raunala - PMFST 2013/14

Memorijski operandi
sloenije podatkovne strukture (polja, nizovi, strukture) ne moemo spremiti u registre njih spremamo u memoriju potrebne su nam instrukcije za prijenos podataka izmeu registara i memorije da bi pristupili elementu memorije moramo znati njegovu adresu koristimo store i load naredbe (sw i lw)
Napredne arhitekture raunala - PMFST 2013/14

Prikaz memorije

10

Napredne arhitekture raunala - PMFST 2013/14

Primjer

11

Imamo polje A sa 100 rijei i varijable a i b povezane sa registrima $s1 i $s2, te neka je adresa polja zapisana u $s3. Potrebno je zbrojiti vrijednosti varijable b i elementa A[8] i rezultat spremiti u a

Kod u C jeziku
a = b + A[8];

Kod u MIPS-u
lw $t0, 8($s3)
# u $t0 spremamo vrijednost A[8]

add $s1, $s2, $t0


# zbrajamo $s2 i $t0 u $s1
Napredne arhitekture raunala - PMFST 2013/14

Prikaz memorije
MIPS adrese moraju biti viekratnik broja 4 !

12

Adresa bytea

Proceso r

Memorija

Podac i

Napredne arhitekture raunala - PMFST 2013/14

Ispravak primjera

13

Imamo polje A sa 100 rijei i varijable a i b povezane sa registrima $s1 i $s2, te neka je adresa polja zapisana u $s3. Potrebno je zbrojiti vrijednosti varijable b i elementa A[8] i rezultat spremiti u a

lw $t0, 32($s3)
# u $t0 spremamo vrijednost A[8] # 8 * 4 = 32, offset je 32

add $s1, $s2, $t0


# zbrajamo $s2 i $t0 u $s1
Napredne arhitekture raunala - PMFST 2013/14

Zadatak 2
U registru $s2 se nalazi varijabla b te u registru $s3 adresa polja A. Napiite skup instrukcija za dobivanje sljedeeg izraza: A[12] = b + A[8];

14

Za spremanje u memoriju koristimo naredbu: sw $t0, offset($s1)


#registar $s1 sadri adresu rijei u memoriji # na tu adresu + offset se sprema vrijednost registra $t0

Napredne arhitekture raunala - PMFST 2013/14

Rjeenje:
A[12] = b + A[8]; lw $t0, 32($s3) add $t0, $s2, $t0 sw $t0,48($s3)
# u registar $t0 spremamo A[8] # u registar $t0 zbrajamo $s2 i $t0 (b + A[8]) # rezultat b + A[8] spremamo u A[12]

15

Napredne arhitekture raunala - PMFST 2013/14

Koritenje konstanti
esto u programu moramo koristiti konstante Koristei samo dosad nauene naredbe bilo bi potrebno prvo uitati konstantu iz memorije da bi je mogli koristiti lw $t0, offset($s1) # uitaj konstantu iz memorije u $t0 add $s3, $s3, $t0
#zbroji vrijednost iz $s3 + $t0 u $s3

16

Ovo se moe jednostavnije izvesti: addi $s3, $s3,4


# zbraja $s3 sa konstantom 4

Napredne arhitekture raunala - PMFST 2013/14

Zadatak
Imamo polje A ija je adresa spremljena u $s3 te varijablu b koja je pridruena registru $s1. Napiite instrukcije da dobijete sljedei izraz:

17

A[3] = b (A[2] + 7)

Napredne arhitekture raunala - PMFST 2013/14

Rjeenje
A[3] = b (A[2] + 7) lw $t0, 8($s3) # u registar $t0 spremamo A[2]

18

addi $t0, $t0, 7


sub $t1, $s1, $t0 sw $t1,12 ($s3) A[3]

# raunamo A[2] + 7
# u $t1 spremamo b (A[2]+7) # rezultat iz $t1 spremamo u

Napredne arhitekture raunala - PMFST 2013/14

Zadaci za vjebu
Napiite instrukcije za raunanje sljedeih izraza: a = (b a) + (a + 4) A[3] = b (A[5] + 7) a = a + b + c + A[2] A[4] = A[4] + (b c) b = 6 + (c a)
neka su varijable a,b i c povezane sa registrima $s0, $s1 i $s2 te neka je poetna adresa od polja A spremljenja u $s3.

19

Napredne arhitekture raunala - PMFST 2013/14

Donoenje odluka
beq r1, r2, L1

20

ova naredba govori da program skoi na labelu L1 ako su vrijednosti u registrima r1 i r2 jednake
bne r1,r2,L1

skok na L1 ako vrijednosti registra nisu jednake


uvjetno grananje

Napredne arhitekture raunala - PMFST 2013/14

Primjer
C: if ( i == j) f = g + h; else

21
MIPS: bne $s3, $s4, Else add $s0, $s1 , $s2 j Kraj Else: sub $s0, $s1 , $s2 Kraj:

f=g-h

nova naredba: jump bezuvjetni skok f,g,h,i,j $s0 $s4


Napredne arhitekture raunala - PMFST 2013/14

Petlje
C: i = 5; while ( i != 10)
MIPS: addi $s0, $s0, 5 addi $s1, $s1, 10 Petlja: beq $s0,$s1, Kraj addi $s0, $s0, 1 j Petlja Kraj:

22

i++;

Napredne arhitekture raunala - PMFST 2013/14

Grananje
U prolom primjeru:
ne znamo da li je broj manji ili vei moramo vrijednost za usporeivanje spremati u registar

23

Dvije nove naredbe: slt r1, r2, r3 # r1 = 1 ako je r2 < r3 slti r1, r2, C # r1 = 1 ako je r2 < C

Napredne arhitekture raunala - PMFST 2013/14

Zadaci za vjebu
Zad 1:
a = 6; b = 3;

24
Zad 3:
a = 5; b = 7; for ( i = 1, i < 10, i++) if ( a < b) a += i; else b += i;

Zad 2:
a = 2; b = 10; c = 1; while (c =< b) c += a; a++;

if (a < b)
a += 2; else a -= 2

Napredne arhitekture raunala - PMFST 2013/14

You might also like