Professional Documents
Culture Documents
Napredne Arhitekture Računala: Vježbe 1
Napredne Arhitekture Računala: Vježbe 1
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)
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
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
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
Zbrajanje i oduzimanje
instrukcije add i sub moramo navesti 3 varijable Primjer:
add a, b, c
sub d, a, e
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;
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
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
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]
Prikaz memorije
MIPS adrese moraju biti viekratnik broja 4 !
12
Adresa bytea
Proceso r
Memorija
Podac i
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
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
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
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
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)
Rjeenje
A[3] = b (A[2] + 7) lw $t0, 8($s3) # u registar $t0 spremamo A[2]
18
# raunamo A[2] + 7
# u $t1 spremamo b (A[2]+7) # rezultat iz $t1 spremamo u
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
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
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
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++;
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
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