Documente Academic
Documente Profesional
Documente Cultură
2 Arhitectura setului de
instruciuni ISA
Programarea CPU
Programele scrise n limbaje de
nivel nalt trebuie compilate
pentru a obine un program
executabil
Din punctul de vedere al
procesorului, programul este un
set de instruciuni pe care le
execut. Ele trebuie s fie
nelese de ctre acesta
limbajul main, specific
fiecrui procesor n parte
Compilator
Fiier executabil
Unitate Control
Software
Hardware
Cod instruciuni
Core CPU
Compilarea
Un compilator traduce un program scris ntr-un
limbaj de nivel nalt n cod main pentru a putea fi
executat de CPU
A nu se confunda un compilator cu un interpretor
(vechiul Basic, Perl, Lisp etc)
La procesoarele simple era preferabil scrierea
programelor direct n cod main deoarece se obineau
executabile mai mici i mai rapide dect cele furnizate
de compilatoare
Programele i procesoarele de astzi sunt mult prea
complexe pentru a putea scrie, ntreine i obine
eficiena maxim a codului main
Copyright Paul GASNER
operanzi
R0,
R1,
R0 R1 + R2
destinaie sourse
Alte instruciuni:
NOT
R0, R1
R0 R1
ADD
R3, R3, #1
R3 R3 + 1
SUB
R1, R2, #5
R1 R2 - 5
Write
DA
D address
Register File
AA
A address
Constant
BA
B data
MB
S D1 D0
Q
FS
FS
V
C
N
Z
D0
Q D1
S
B address
A data
R1 M[R3]
D data
WR
RAM
+5V
MW
ADRS
DATA
CS
WR
OUT
ALU
F
MD
Write
DA
D address
Register File
AA
A address
B address
A data
Constant
BA
B data
MB
M[R3] R1
S D1 D0
Q
FS
FS
V
C
N
Z
D0
Q D1
S
D data
WR
RAM
+5V
MW
ADRS
DATA
CS
WR
OUT
ALU
F
MD
LD R1, #0
R1 0
Write
DA
D address
Register File
AA
A address
B address
A data
Constant
BA
B data
MB
S D1 D0
Q
FS
FS
V
C
N
Z
D0
Q D1
S
D data
WR
RAM
+5V
MW
ADRS
DATA
CS
WR
OUT
ALU
F
MD
10
ST (R3),#0
M[R3] 0
D data
WR
Write
DA
D address
Register File
AA
A address
B address
A data
Constant
BA
B data
MB
S D1 D0
Q
FS
FS
V
C
N
Z
D0
Q D1
S
RAM
+5V
MW
ADRS
DATA
CS
WR
OUT
ALU
F
MD
11
Importana notaiilor
Simbolurile # i () specific moduri diferite de adresare
Modul de adresare determin datele utilizate de
operanzi:
LD
LD
R0, #1000
R0, 1000
// R0 1000
// R0 M[1000]
LD
LD
R3, R0
R3, (R0)
// R3 R0
// R3 M[R0]
12
Exemplu
O simpl operaie de transfer de regitri:
M[1000] M[1000] + 1
R0, #1000
R3, (R0)
R3, R3, #1
(R0), R3
//
//
//
//
R0 1000
R3 M[1000]
R3 R3 + 1
M[1000] R3
13
LD
LD
ADD
ST
R0, #1000
R3, (R0)
R3, R3, #1
(R0), R3
//
//
//
//
R0 1000
R3 M[1000]
R3 R3 + 1
M[1000] R3
14
Jump
O instruciune jump modific valoarea PC
operandul specific exact cum se schimb PC
pentru simplitate vom utiliza etichete n locul adreselor
LD
LD
JMP
K LD
LD
L ADD
ST
R1, #10
R2, #3
L
R1, #20 // Aceste dou instruciuni
R2, #4
//
nu sunt executate acum
R3, R3, R2
(R1), R3
15
Branch
O instruciune branch modific valoarea PC n funcie
de starea de adevr a unei condiii
LD
LD
BZ
K LD
LD
#10
#3
L
// Jump to L dac R4==0
#20 // Aceste dou instruciuni
#4
// sunt executate sau nu
// n funie de R4
L ADD R3, R3, R2
ST (R1), R3
R1,
R2,
R4,
R1,
R2,
16
Branch
Condiiile pentru branch sunt de obicei rezultate ALU
Aici intervin biii de stare ai ALU: V, C, N i Z. Cu
ajutorul acestora se pot implementa o serie de
instruciuni branch
Branch
Branch
Branch
Branch
Branch
Branch
Branch
Branch
Condiie
on overflow
on no overflow
if carry set
if carry clear
if negative
if positive
if zero
if non-zero
Prescurtare
BV
BNV
BC
BNC
BN
BNN
BZ
BNZ
17
if-then
Un set de instruciuni n C se traduce n asamblor n
felul urmtor
R1 = *X;
if (R1 < 0)
R1 = -R1;
R3 = R1 + R1;
LD
BNN
MUL
ADD
R1,
R1,
R1,
R3,
(X)
//
L
//
R1, #-1 //
R1, R1 //
R1 =
Skip
R1 =
R3 =
*X
MUL if R1 este pozitiv
-R1
R1 + R1
18
loop
... sau pentru o bucl, utiliznd o funcie ipotetic BGT
R1 = 0;
for (R2 = 1; R2 <= 5; R2++)
R1 = R1 + R2;
R3 = R1 + R1;
LD
LD
FOR BGT
ADD
ADD
JMP
L
ADD
R1,
R2,
R2,
R1,
R2,
FOR
R3,
#0
#1
#5, L
R1, R2
R2, #1
//
//
//
//
//
//
R1, R1 //
R1 = 0
R2 = 1
Stop when R2 > 5
R1 = R1 + R2
R2++
Go back to the loop test
R3 = R1 + R1
19
CPU
Program
Control
Unit
Semnale Control
Semnale Status
Core
20
Limbaj main
Limbajul main este expresia binar a instruciunilor
limbajului de asamblare, specifice CPU
Sunt 3 tipuri de instruciuni, deci 3 reprezentri binare:
instruciuni format registru doi operazi din regitri
instruciuni format constant un operand din regitri i
cellalt este constant
instruciuni format jump i branch o surs registru i o
adres din constant
21
Format registru
15
9 8
6 5
Registru
Destinaie
(DR)
3 2
Surs
Registru A
(SA)
Surs
Registru B
(SB)
De exemplu
ADD R1, R2, R3
22
Format constant
15
9 8
6 5
Registru
Destinaie
(DR)
3 2
Surs
Registru A
(SA)
Operand
(OP)
De exemplu
ADD R1, R2, #3
23
9 8
6 5
Adresa
bit 5-3
(AD)
3 2
Surs
Registru A
(SA)
Adresa
bit 0-2
(AD)
De exemplu
BZ R3, -24
JMP 18
24
Formatul instruciunilor
15
9 8
Registru
Destinaie
(DR)
6 5
9 8
15
6 5
9 8
Surs
Registru A
(SA)
Registru
Destinaie
(DR)
3 2
Surs
Registru B
(SB)
3 2
Surs
Registru A
(SA)
6 5
Adresa
bit 5-3
(AD)
Operand
(OP)
3 2
Surs
Registru A
(SA)
Adresa
bit 0-2
(AD)
25
Organizarea instruciunilor
Criterii:
instruciuni similare au cmpuri opcod similare
dup semnalele de control, instruciunile se pot grupa n 8
categorii distincte
Tip instruciuni
Operaie Format Registru ALU
Operaie Deplasare Format Registru
Scriere Memorie (din regitri)
Citire Memorie (n regitri)
Operaie ALU cu constant
Operaie deplasare constant
Branch Condiional
Jump
26
D
DA
Register file
AA
constant
1
Mux B
FS
V
C
N
Z
MB
0
ADRS
MW
0
ALU
G
Mux D
BA
DATA
Data RAM
OUT
MD
0
27
D
DA
Register file
AA
constant
1
Mux B
FS
V
C
N
Z
MB
0
ADRS
MW
1
ALU
G
Mux D
BA
DATA
Data RAM
OUT
MD
X
28
bit
15
bit
14
bit
13
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
29
1011000 indic:
101 instruciune format constant
1000 deplasare spre stnga cu un
bit
Copyright Paul GASNER
FS
00000
00001
00010
00011
00100
00101
00110
00111
01000
01010
01100
01110
10000
10100
11000
Operaie
F=A
F=A+1
F=A+B
F=A+B+1
F = A + B
F = A + B + 1
F=A1
F=A
F = A B (AND)
F = A B (OR)
F=AB
F = A
F=B
F = sr B (shift right)
F = sl B (shift left)
30
Instruciuni branch
Avem 8 condiii diferite, deci sunt
necesari 3 bits
Biii 11-9 din opcod sunt ocupai cu
cei 3 bii care indic tipul de branch
De exemplu, instruciuna branch if
zero va avea codul 110x011
primii 3 bii pentru instruciunea tip
branch
ultimii 3 bii pentru if zero
Condiie
If carry set
If negative
If overflow
If zero
If carry clear
If positive
If no overflow
If non-zero
BC
000
001
010
011
100
101
110
111
31
LD
R1, (R0)
011 (load)
xxxx (unused)
BZ
R1, +4
110 (branch)
x011
0100 (subtract)
0010 (add)
JMP 3
111 (jump)
xxxx (unused)
(branch on zero)
32
Exemple instruciuni
Cteva exemple de instruciuni complete:
Instruciune
LD R1, (R0)
BZ R1, +4
SUB R5, R5, #1
ADD R1, R0, R5
JMP 3
Bits 15-9
(Opcode) Bits 8-6 Bits 5-3 Bits 2-0
Format
011xxxx
001
000
xxx Constant
110x011
000
001
100 Jump/branch
1000100
101
101
001 Constant
0000010
001
000
101 Registru
111xxxx
111
xxx
101 Jump/branch
33
ISA. Concluzii
Un program trebuie tradus n cod main pentru a putea
fi executat
Exist o coresponden biunivoc ntre limbajul de
asamblare i limbajul main (binar)
Exist trei tipuri de instruciuni:
manipularea datelor (operaii ALU)
operaii cu regitri i cu RAM
instruciuni de salt control flow
34