You are on page 1of 26

11/6/2019

Leksion 4: 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
11/6/2019

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
11/6/2019

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
11/6/2019

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
11/6/2019

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
11/6/2019

Gjuha MIPS Assembler

11

Gjuha MIPS Assembler

12

6
11/6/2019

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
11/6/2019

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
11/6/2019

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
11/6/2019

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
11/6/2019

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
11/6/2019

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
11/6/2019

Instruksioni: Load Word


 Shembull: lw $t0, 4($s0)
Memory
Processor
………..
$s0 8000 8000
8001
$t0
8002
1
8003
Offset = +4
8004
8005
8006
2
8007
………..
• Hapat:
1. Memory Address = $s0 + 4 = 8000+4 = 8004
2. Memory word tek Mem[8004] shkruhet tek $t0
25

Instruksioni: Store Word


 Shembull: sw $t0, 12($s0)
Memory
Processor
………..
$s0 8000 8000
8001
$t0
8002
1
…… ………
Offset = +12
8012
8013
8014
2
8015
………..
• Hapat:
1. Memory Address = $s0 + 12 = 8012
2. Përmbajtja e $t0 ruhet tek fjala në adresën
Mem[8012] 26

13
11/6/2019

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?

27

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. 28

14
11/6/2019

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

29

Konstantja zero

30

15
11/6/2019

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.
31

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)? 32

16
11/6/2019

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 33

Enkodimi i instruksioneve

• Shembull: Konvertoni kodin nga gjuhe makine ne MIPS assembler

34

17
11/6/2019

Enkodimi i instruksioneve

• Shembull: Konvertoni kodin nga gjuhe makine ne MIPS assembler

• Op = 43 = sw
• 16 = $s0
• 11 = $t3
sw $t3, 4($s0) 35

Kod në C – MIPS assembler – Gjuhë makinë


Kod në C
Nëse $t1 ka bazën e A-së dhe $s2 ka h, atëherë kompilohet në:

Konvertohet në gjuhë makinë MIPS:

Ekuivalentja në binar:
36

18
11/6/2019

Formati R dhe I i instruksioneve

Cili instruksion është?

37

Koncepti Stored-Program
• Instruksionet paraqiten si numra
• Programet ruhen në memorje
për t’u shkruar ose lexuar
(ashtu si numrat)

38

19
11/6/2019

Veprimet Logjike
• Shumë herë është e nevojshme të veprohet
në disa bit-e të një fjale (p.sh. Të kapen
karaktere te veçanta: 8 bit për karakter)

39

Veprimi Shift

40

20
11/6/2019

Shembull me sll

• Fushat op dhe rs janë të dyja 0.


• Shift left me i bite është ekuivalente me
shumëzimin me

41

Veprimi AND

42

21
11/6/2019

Veprimi OR

43

Veprimet NOT

44

22
11/6/2019

Veprimet e Kercimit

45

Kompilimi i IF

Etiketë

46

23
11/6/2019

Kompilimi i Cikleve

47

Veprime të tjera të kushtëzuara

48

24
11/6/2019

Instruksione të tjera Branch

49

Pseudoinstruksionet
• Instruksione që nuk janë të implementuara në hardware.
• Lehtësojnë përkthimin nga gjuhë e nivelit të lartë në
assembler. P.sh.
move $t0, $t1 #pseudoinstruksion
• Instruksioni real që do të përkthehet në gjuhë makinë në
këtë rast është:
add $t0, $zero, $t1

50

25
11/6/2019

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

51

26

You might also like