Leksion 3

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 17

10/31/2018

Leksion 2: Arkitektura e Set-it te


Instruksioneve

Përgatiti: Dr. Ina Papadhopulli

Arkitektura e Set-it të
Instruksioneve (ISA)
• Fjalet që përdor kompiuteri: instruksione
• Fjalori i kompjuterit: set-i i instruksioneve
• Gjuhët që përdorin kompjuterat nuk janë shumë
të ndryshme nga njëra-tjetra.
• Arsyet:
– Teknologjitë hardware janë të ngjashme
– Ka disa veprime bazë që çdo kompjuter duhet ti
kryejë (krahasime, mbledhje etj.).
• Qëllimi është që të gjendet një gjuhë që lehtëson
ndërtimin e hardware-it dhe të kompilatorit. 2

1
10/31/2018

Si kontrollohet hardware?
• Ne shkruajmë programe në gjuhë të
nivelit të lartë:

A + B
• Kompilatori përkthen në gjuhë
assembler:

add A, B

• Asemblatori përkthen në instruksione


makine që mund të ekzekutohen nga
proçesori:

1000 1100 1010 0000

Arkitektura e Set-it të Instruksioneve (ISA)


• Shërben si ndërfaqe midis hardware-it dhe software-it.
• Na mundëson një mekanizëm me anë të të cilit software i
tregon hardware-it çfarë duhet të bëjë.
• Abstaksion i cili lejon makina që kanë kosto dhe
performancë të ndryshme të ekzekutojnë software identike.
High level language code : C, C++, Java, Fortran,
compiler
Assembly language code: architecture specific statements
assembler
Machine language code: architecture specific bit patterns

software

instruction set
hardware

2
10/31/2018

Klasifikimi i ISA
Accumulator (para 1960, p.sh. 68HC11):
1-address add A acc acc + mem[A]

Stack (1960s to 1970s):


0-address add tos tos + next

Memory-Memory (1970 - 1980):


2-address add A, B mem[A] mem[A] + mem[B]
3-address add A, B, C mem[A] mem[B] + mem[C]

Register-Memory (CISC) (1970 deri më sot p.sh.80x86):


2-address add R1, A R1 R1 + mem[A] Këtë klasë do
load R1, A R1 mem[A] të studiojmë

Register-Register (Load/Store, RISC) (1960 deri më sot p.sh. MIPS):


3-address add R1, R2, R3 R1 R2 + R3
load R1, R2 R1 mem[R2]
store R1, R2 mem[R1] R2

Vendndodhjet e operandëve në 4 klasat e ISA

3
10/31/2018

MIPS
• MIPS: Microprocessor without Interlocked
Pipeline Stages
• Projektimi RISC (Reduced Instruction Set
Computer)
• Tipi: Regjistër-Regjistër
• Regjistër: element memorje që ndodhet brenda
në proçesor
• Nr. i biteve: nga 32 (32 bit = 1 word), sot është 64

Aksesimi i memorjes është i ngadaltë


• Për të evituar eksesimet e shpeshta të memorjes
– Vendosen elemente memorjeje në processor
(registrat)
Memory
Processor
Inst ………..
Bus res  res + i
i i+1
r0
if i < 10,
r1 ALU
.. …
………
i 1
res 0

………..

4
10/31/2018

Operand-ët e MIPS

• Regjistrat $s0 - $s7, perdoren per variablat e gjuhes se


nivelit te larte (p.sh. gjuha C). Ato i korrespondojne
numrave nga 16-23
• Regjistrat $t0 - $t7, perdoren per variablat e
perkohshem qe duhen gjate kompilimit. Ato i
korrespondojne numrave nga 8-15
9

Gjuha MIPS Assembler

10

5
10/31/2018

Gjuha MIPS Assembler

11

Gjuha MIPS Assembler

12

6
10/31/2018

Gjuha MIPS Assembler

13

Veprimi aritmetik: Addition


C Statement MIPS Assembly Code
a = b + c; add $s0, $s1, $s2

• Supozojmë se vlerat e "a", "b" dhe "c" janë në


registrat "$s0", "$s1" dhe "$s2"

7
10/31/2018

15

Veprimi aritmetik: Subtraction

C Statement MIPS Assembly Code


a = b - c; sub $s0, $s1, $s2

$s0  variable a
$s1  variable b
$s2  variable c

Shprehje komplekse
C Statement MIPS Assembly Code
a = b + c - d; ??? ??? ???
$s0  variable a
$s1  variable b
$s2  variable c
$s3  variable d

• Një instruksion MIPS mund të ketë maksimumi dy operandë


input-i
 Duhet të bëhet zbërthim në disa instruksione

MIPS Assembly Code


Përdor një “temporary
add $t0, $s1, $s2 # tmp = b + c
register” $t0
sub $s0, $t0, $s3 # a = tmp - d

8
10/31/2018

17

Shprehje komplekse: Shembull


C Statement Variable Mappings
$s0  variable f
f = (g + h) – (i + j); $s1  variable g
$s2  variable h
$s3  variable i
$s4  variable j

• Zbërthehet në disa instruksione


– Përdoren dy “temporary registers” $t0, $t1
add $t0, $s1, $s2 # tmp0 = g + h
add $t1, $s3, $s4 # tmp1 = i + j
sub $s0, $t0, $t1 # f = tmp0 – tmp1

18

Shembuj
C Statement Variable Mappings
$s0  variable a
z = a + b + c + d; $s1  variable b
$s2  variable c
add $s4, $s0, $s1 $s3  variable d
add $s4, $s4, $s2 $s4  variable z
add $s4, $s4, $s3

C Statement Variable Mappings


$s0  variable a
z = (a – b) + c; $s1  variable b
$s2  variable c
sub $s3, $s0, $s1 $s3  variable z
add $s3, $s3, $s2

9
10/31/2018

Operandet
• Ne gjuhën C, çdo variabel është një zonë në
memorje.
• Në hardware, çdo aksesim i memorjes është
i “kushtueshëm”. Nëse variabli a do të
aksesohet vazhdimisht atëherë nevojitet të
vendoset në regjistër.
• Instruksionet veprojnë me regjistra.
• Numri i variablave në C është shumë i
madh; në assembler është fiks!

19

Regjistrat e MIPS
• 32 regjistra nga 32 bit (64 sot)
• Pse janë kaq regjistra?
• Arsyeja: më e vogël më e shpejtë
• Më shumë regjistra do të rrisnin periodën e
clock-ut pasi do të duhej më shumë kohë
për të përhapur sinjalet
• Më shumë regjistra do te sillnin më shumë
bit në formatin e instruksioneve. Pse?
20

10
10/31/2018

Adresimi i memorjes
• Njësia më e vogël e adresueshme: byte
• Adresa e një fjale (fjala perbehet nga 4 byte):
adresa e nje prej byte-ve të fjalës.
• Dy mënyra:
-Big-endian (si p.sh. MIPS)
-Little-endian

21

Operand-ët e memorjes
• Po nëse duam të ruajmë një matricë që ka
më shumë elemente se sa numri i
regjistrave?
• Matrica do të ruhet në memorje!
• Duhet të ketë instruksione që të transferojnë
të dhënat (Load/Store).
• Memorja konsiderohet si një matricë e
madhe një-dimensionale dhe adresa është
indeksi i matricës.
22

11
10/31/2018

Operand-ët e memorjes
• Vlerat duhet të merren nga memorja para se të kryhen
veprimet (p.sh. veprimet add dhe sub)
Më pas instruksionet (p.sh. add), mund të veprojnë me to.
• Instruksionet e transferimit të të dhënave:

Load word Register Memory


lw $t0, memory-address

Store word Register Memory


sw $t0, memory-address
23

Formati i Instruksionit Load

Regjistri destinacion
adresa burim

lw $t0, 8($t3)

çdo regjistër
Një konstante që i shtohet regjistrit në kllapa

24

12
10/31/2018

Shembull
• Supozojmë se A është matricë me 100
elemente
• Variablat g dhe h kompilatori i ka vendosur
tek $s1 dhe $s2
• Adresa e fillimit të matricës është ruajtur tek
$s3
• Si do të kompilohej shprehja?
Zgjidhje: Pse 32?

25

Regjistrat
• Kompilatori vendos variablat që përdoren
më shumë në regjistra, ndërsa të tjerat në
memorje
• Regjistrat aksesohen më shpejt
• Nëse dy të dhëna janë në regjistra, me to
mund të kryhen veprime aritmetike; në të
kundërt, duhet të kryhen dy veprime load
pastaj veprimi aritmetik.
• Përdorimi efiçient i regjistrave ul energjinë e
konsumuar. 26

13
10/31/2018

Operand-ët konstant (të menjëhershëm)


• Nëse duam ti shtojme vleren 4 përmbajtjes së
regjistrit $s3:

• Vlera 4 nuk ruhet diku në memorje, po është


pjesë e instruksionit
• (Principi 3: Ndërto rastin e zakonshëm të
thjeshtë)
• a

27

Konstantja zero

28

14
10/31/2018

Si paraqiten instruksionet në
kompjuter?
• Instruksionet në kompjuter ruhen si një
bashkësi sinjalesh elektronike (low dhe
high)
• Prandaj ato mund të paraqiten si numra
(instruksioni binar)
• Paraqitja e intruksionit përbëhet nga fusha
(grupe bit-esh) edhe quhet formati i
instruksionit.
• Ekzistojnë 3 lloje formatesh instruksionesh.
29

Formati R (Register Format)

• op: opcode
• rs: operand-i i pare regjistër burim
• rt: operand-i i dyte regjistër burim
• rd: operand-i regjistër destinacion
• shamt: shift amount
• funct: zgjedh variantin specifik te veprimit në fushën op.
• Po sikur instruksioni te kërkojë fusha me më shume bit
(p.sh. Load)? 30

15
10/31/2018

Formati I (Immediate type)


• Madhësia e instruksionit prape 32 bit.
• Përdoret për instruksionet që kane konstante

• offset: konstante ose adresë

• rs: do marre vlerën 19 (për $s3)


• rt: do marrë vlerën 8 (për $t0)
• offset: do marë vlerën 32 31

Referenca
• Libri:
Computer Organization and Design. The
Hardware/Software Interface, 4th Edition
Kapitulli 2 (faqe 74-94)

32

16
10/31/2018

FALEMINDERIT!

33

17

You might also like