Anda di halaman 1dari 45

1.

Arquitectura dun computador

Estructura bsica dun computador


El 1946, A. W. Burks, H. H. Goldstine i J. von Neumann, investigadors de lInstitute for
Advanced Study, van publicar un article titulat Preliminary discussion of the logical design of
an electronic computing instrument, que va establir les bases per al disseny de computadors
que shan seguit fins al dia davui.
El disseny bsic que van proposar, que es coneix com a Arquitectura von Neumann
(Figura 1.1), estructura els computadors en tres mduls principals:

la Memria guarda els programes, que sn un conjunt de dades que es


modificaran o consultaran en executar el programa, ms un conjunt
dinstruccions que indiquen les operacions que shan de fer sobre les dades. La
memria est estructurada com un conjunt de paraules, cadascuna de les quals
s capa de guardar una instrucci o una dada individual. A la ubicaci de cada
paraula dins de la memria se li diu adrea.

la Unitat Central de Procs, processador o CPU (Central Processing Unit)


executa els programes. Al seu torn, sestructura en dos blocs: la Unitat de
Procs (UP) s el conjunt de dispositius electrnics necessaris per a executar
programes, i la Unitat de Control (UC) s un sistema seqencial encarregat de
governar la circuiteria de la Unitat de Procs.

la Unitat dEntrada/Sortida (Input/Output) permet relacionar el computador amb


lexterior, mitjanant diversos dispositius perifrics (teclat, pantalla, disc etc.)

Bus de dades
Bus dadreces
Bus de control

CPU
UP

UC

MEMRIA

E/S

Figura 1.1. Arquitectura von Neumann

Els tres mduls es comuniquen a travs de tres busos:

el Bus de Dades permet la transferncia de dades entre tots tres mduls, i la


dinstruccions des de la memria cap a la CPU.

el Bus dAdreces permet a la CPU indicar a la memria (o a la Unitat dE/S)


quina de les paraules vol llegir (obtenir-ne el valor) o escriure (modificar-ne el
valor).

a travs del Bus de Control es transmeten els senyals que possibiliten que les
tres unitats actun de manera coordinada.

Els tres mduls de larquitectura von Neumann constitueixen la circuiteria electrnica o nivell
fsic dun computador, o hardware. El hardware s gestionat pels programes, que
constitueixen el software. El software sestructura en nivells (Figura 1.2):

Llenguatge mquina, o llenguatge de baix nivell: els programes daquest nivell


sn els que interactuen directament amb el hardware. Les instruccions sn ordres
senzilles que es dnen a la circuiteria, escrites en binari.

Sistema operatiu: conjunt de programes que possibiliten un s cmode del


computador per part dun o ms usuaris, permetent que aquests no hagin de
conixer en detall la circuiteria. Alguns sistemes operatius sn Windows95, Unix o
OSF.

Llenguatges dalt nivell: llenguatges ms propers al llenguatge natural que el


binari, que permeten per tant escriure programes de manera cmoda. Sn
lleguatges dalt nivell el C, el Fortran i el VisualBasic.
Els programes escrits en alt nivell shan de traduir a llenguatge mquina per ser
executats. A la traducci se li diu compilaci.

Aplicacions: programes escrits en algun llenguatge dalt nivell i posats a


disposici dels usuaris del computador. Aquests noms han de conixer
laparincia de les aplicacions per a utilitzar el computador, podent ignorar tots els
nivells inferiors.

Aplicacions
Llenguatges dalt nivell
Sistema operatiu
Llenguatge mquina
Nivell fsic

Figura 1.2. Jerarquia de nivells dun computador.

Funcionament dels computadors


El funcionament bsic dun computador s el segent. La Unitat dE/S permet carregar
programes a la memria, ja sigui des duna unitat de disc (disc dur, CD-Rom etc.) o a travs
del teclat. Per executar el programa, les instruccions es transmeten duna en una des de la
memria cap a la CPU; aquesta les examina i activa els circuits apropiats per dur a terme les
operacions indicades per cada instrucci. Per fer una operaci sobre unes dades
determinades, aquestes tamb shan dhaver transferit prviament des de la memria cap al
processador. Les dades que resulten de lexecuci dels programes es transfereixen de la
CPU cap a la memria.
Habitualment, els programes es guarden a la memria de manera que les instruccions
ocupen un bloc de paraules consecutives i les dades ocupen un altre bloc de paraules
consecutives. Les instruccions sexecuten segons el seqenciament implcit: es comena
per la instrucci que hi ha en una adrea inicial i a continuaci sexecuten en seqncia les
instruccions que hi ha en adreces successives. Aquest seqenciament es pot trencar
mitjanant un tipus dinstruccions que sanomenen instruccions de salt.

Arquitectura de la Mquina Rudimentria


La Mquina Rudimentaria s un computador senzill i pedaggic basat en larquitectura von
Neumann. No t Unitat dE/S, donat que el funcionament daquest mdul sestudiar en
cursos posteriors. Aix, assumirem que els programes sn a la memria sense preguntar-nos
com hi han arribat.
A la Figura 1.3 es pot veure larquitectura de lMR. Observem que disposa de dos busos de
dades per comunicar la CPU i la memria, un en cada sentit.

CPU

Memria
Bus de dades

UP
3
11

UC

16

Min
Mout

M@

L/E

16

Bus dadreces

Bus de control

Figura 1.3. Arquitectura de la Mquina Rudimentria

La memria
Les instruccions i les dades de lMR es codifiquen en 16 bits; per tant, les paraules de
memria i els busos de dades sn de 16 bits damplada. La memria t 256 paraules, i per
tant el bus dadreces s de 8 bits. Pel bus de control hi viatja un sol senyal, L/E, que indica en
cada moment a la memria si es vol realitzar una operaci de lectura (0) o una escriptura (1).
Per referir-nos al contingut de la paraula que hi ha a ladrea a usarem la notaci M[a]. Per
exemple, a la Figura 1.4 es compleix que M[FDh] = D964h.
ADREA

CONTINGUT

01h

2346h

02h

8675h

03h

0005h

04h

0087h
...

6D62h

...

00h

FDh

D964h

FEh

CA10h

FFh

0091h

Figura 1.4. Exemple de memria

Les dades amb qu treballa la Mquina Rudimentria sn nmeros enters codificats en 16


bits i en complement a 2. Pot representar per tant el rang [-32.768, 32.767].

La Unitat Central de Procs (CPU)


Com ja hem vist, la CPU es divideix en la Unitat de Procs (UP) i la Unitat de Control (UC). La
segona rep 3 bits dinformaci de la primera, i li envia ordres a travs d11 senyals. En les
seccions 3 i 4 veurem el significat daquests 14 senyals.
La UP ha de ser capa de realitzar totes les accions necessries per a lexecuci
dinstruccions. Disposa, entre daltres, dels dispositius segents:

Registre dInstruccions (Instruction Register, IR): s un registre de 16 bits que


guarda en cada moment la instrucci que sest executant.

Comptador de Programa (Program Counter, PC): s un registre de 8 bits


encarregat de guardar en tot moment ladrea segent a la de la instrucci que
sest executant.

Banc de Registres: conjunt de registres que permeten guardar les dades amb
qu treballen els programes quan es porten de la memria a la CPU per a operar
amb elles o consultar-les. Hi ha 8 registres de 16 bits, que sidentifiquen pels
noms R0, R1, ..., R7. El registre R0 t la particularitat que no shi pot escriure i
sempre cont un 0.

Unitat Aritmtica i Lgica (Arithmetic-Logic Unit, ALU): s el circuit capa de fer


les operacions aritmtiques i lgiques requerides pels programes.

Bits de Condici (flags): sn dos bits que indiquen en tot moment si el resultat
de lltima operaci realitzada per lALU ha estat negatiu (bit N) o zero (bit Z).

Unitat de Control

Unitat de Procs

11

Banc
de
Registres

PC
IR

3
Bits N Z
de condici

Figura 1.5. Esquema de la CPU de lMR.

ALU

2. Llenguatge Mquina de la Mquina


Rudimentria

El Llenguatge Mquina (LM) dun computador s un conjunt dinstruccions senzilles


codificades en binari que actuen directament sobre la circuiteria de la CPU. Donat que una
tira de 0s i 1s s incmoda de manejar pels humans, tots els computadors disposen del que
sanomena Llenguatge Assemblador (LA), que t les mateixes instruccions que el
Llenguatge Mquina per escrites usant termes mnemotcnics. Els programes escrits en LA
sn traduts a LM pel programa assemblador. En aquest captol veurem quines sn les
instruccions de la Mquina Rudimentria, primer en LA i desprs en LM. Les instruccions LM
de la Mquina Rudimentria es codifiquen en 16 bits.

Tipus dinstruccions
El Llenguatge Mquina de lMR t tres tipus dinstruccions:

Instruccions dAccs a Memria: donen ordre de transferir una dada de la


memria cap a la CPU (concretament cap al Banc de Registres) o al revs.

Instruccions Aritmtiques i Lgiques (A-L): donen ordre de fer operacions


aritmtiques o lgiques sobre dades dels programes.

Instruccions de Salt: donen ordre de trencar el seqenciament implcit si es


compleix una condici determinada.

Cada instrucci t un cert nombre doperands. Els operands font indiquen on sn les dades
que ha de fer servir la instrucci, i loperand dest indica on sha de guardar el resultat de
lexecuci de la instrucci, en cas que nhi hagi. Les instruccions de salt no utilitzen cap dada
ni generen cap resultat, noms indiquen a quina adrea shaur de saltar en cas que es
compleixi la condici.
Lexecuci dalgunes instruccions (no totes) fa que els bits de condici sactualitzin dacord
amb el resultat:
1 si el resultat < 0
N :=
0 si no

1 si el resultat = 0
Z :=
0 si no

Instruccions daccs a memria


En aquestes instruccions lacci que es fa s un moviment duna dada entre el processador i
la memria. Nhi ha dues, una per cada sentit de la transferncia:
LOAD font, dest
Crrega, transferncia del contingut duna paraula de memria cap a un registre
del Banc de Registres. Loperand font indica per tant una adrea de memria i
loperand dest un registre del Banc. Els bits de condici sactualitzen dacord amb
el valor de la dada transferida.
STORE font, dest
Emmagatzematge, transferncia del contingut dun registre cap a una adrea de
memria. Els bits de condici no es modifiquen.
Per indicar un registre en Llenguatge Assemblador es fa servir el seu nom; per exemple, R3.
Per indicar una adrea de memria sescriu

adrea_base(Ri)
on adrea_base s un nmero natural en el rang [0, 255] i Ri s el nom dun registre del
Banc, que en aquest context es diu que fa el paper de registre ndex. Ladrea efectiva de
loperand, s a dir, la seva adrea a la memria, es calcula aix:

adrea_efectiva = adrea_base + desplaament


essent desplaament el nmero enter guardat en els 8 bits ms baixos del registre ndex.
Aquesta suma la fa el processador durant lexecuci de la instrucci.
Aquesta manera despecificar una adrea efectiva (mode base+desplaament) permet
accedir de manera cmoda tant a dades simples com a dades estructurades (vectors).
A continuaci es mostren alguns exemples dexecuci dinstruccions daccs a memria;
els valors modificats per la instrucci estan en negreta.
LOAD 0(R3), R1
ABANS

DESPRS

0Ch

1101 0100 0101 0101

1101 0100 0101 0101

R1

xxxx xxxx xxxx xxxx

1101 0100 0101 0101

R3

xxxx xxxx 0000 1100

xxxx xxxx 0000 1100

Bit Z

Bit N

Memria

Registres

LOAD 12(R2), R2
ABANS

DESPRS

0Bh

0110 1111 0101 1011

0110 1111 0101 1011

0Ch

xxxx xxxx xxxx xxxx

xxxx xxxx xxxx xxxx

R2

1111 1111 1111 1111

0110 1111 0101 1011

Bit Z

Bit N

ABANS

DESPRS

0Bh

xxxx xxxx xxxx xxxx

0000 0000 0000 1011

R0

0000 0000 0000 0000

0000 0000 0000 0000

R5

0000 0000 0000 1011

0000 0000 0000 1011

Bit Z

Bit N

Memria

Registres

STORE R5, 11(R0)

Memria

Registres

Codificaci en LM
Les instruccions daccs a memria es codifiquen en Llenguatge Mquina de la manera
segent:
2
CO
15

3
Rd/Rf
13

adrea_base

Ri
10

LOAD

00

Rd

Ri

adrea_base

STORE

01

Rf

Ri

adrea_base

el camp CO (Codi dOperaci, bits 15:14) indica de quin tipus dinstrucci es


tracta

els camps que codifiquen registres (Rd, Rf i Ri) tenen 3 bits, donat que el Banc t
8 registres; per fer referncia al registre Rx es codifica el nmero x en binari
natural
8

el camp adrea_base t 8 bits, donat que ha de poder guardar nmeros naturals


entre 0 i 255.

Vegem alguns exemples de codificaci dinstruccions daccs a memria en Llenguatge


Mquina:

Llenguatge
Assemblador

Llenguatge Mquina

en hexadecimal:

LOAD 10(R3), R1

00 001 011 00001010

0B0Ah

LOAD 0(R0), R1

00 001 000 00000000

0800h

STORE R0, 100(R3)

01 000 011 01100100

4364h

STORE R7, 255(R7)

01 111 111 11111111

7FFFh

Instruccions aritmtiques i lgiques


Les instruccions aritmtiques i lgiques (A-L) de la Mquina Rudimentria sn les segents:
ADD font1, font2, dest
ADDI font1, font2, dest

Addition, suma de dos enters.


SUB font1, font2, dest
SUBI font1, font2, dest

Substraction, resta de dos enters.


ASR font, dest

Arithmetic shift right, desplaament aritmtic cap a la dreta dun bit; el bit de ms
pes es replica per tal de mantenir el signe. s equivalent a una divisi entera per
2.
AND font1, font2, dest

And lgica de dos operands.


Desprs dexecutar-se qualsevol instrucci A-L, els bits de condici sactualitzen segons el
valor del resultat.
Totes les instruccions aritmtiques i lgiques obtenen els operands font del Banc de
Registres i escriuen el resultat al Banc de Registres, excepte les instruccions ADDI i SUBI.
En aquestes dues instruccions, el segon operand font es diu operand immediat i s un
nmero enter entre -16 i 15. Per indicar un operand immediat sescriu

#nmero
on nmero [-16, 15].
A continuaci es mostren alguns exemples dexecuci dinstruccions A-L.

ADD R4, R3, R5


ABANS

DESPRS

R3

1000 1110 1111 1011

1000 1110 1111 1011

R4

0011 1000 1010 1010

0011 1000 1010 1010

R5

xxxx xxxx xxxx xxxx

1100 0111 1010 0101

Bit Z

Bit N

ABANS

DESPRS

R1

0000 0000 0001 1000

0000 0000 0001 1000

R2

xxxx xxxx xxxx xxxx

0000 0000 0000 1011

Bit Z

Bit N

ABANS

DESPRS

R2

1101 0011 0010 0001

1101 0011 0010 0001

R5

xxxx xxxx xxxx xxxx

1110 1001 1001 0000

Bit Z

Bit N

ABANS

DESPRS

R0

0000 0000 0000 0000

0000 0000 0000 0000

R1

0110 1111 0101 1011

0000 0000 0000 0000

Bit Z

Bit N

SUBI R1, #13, R2

ASR R2, R5

AND R1, R0, R1

10

Codificaci en LM
Les instruccions A-L es codifiquen en Llenguatge Mquina de la manera segent:
2
Instruccions A-L amb un
operand immediat

CO
15

Rd
13

immediat

Rf1
10

3
OP

ADDI

11

Rd

Rf1

immediat

000

SUBI

11

Rd

Rf1

immediat

001

Instruccions A-L amb


operands a registres

Rd

CO
15

13

3
7

00

Rf2

Rf1
10

2
4

OP
0

ADD

11

Rd

Rf1

Rf2

00

100

SUB

11

Rd

Rf1

Rf2

00

101

ASR

11

Rd

Rf2

00

110

AND

11

Rd

Rf2

00

111

Rf1

En totes elles el camp CO t el valor 11. Per distingir entre elles es fa servir el camp OP
(Operaci, bits 2:0); observem que hi ha dues combinacions daquests 3 bits que no es fan
servir, donat que noms hi ha 6 instruccions A-L.
Per codificar els operands immediats calen 5 bits (7:3), donat que el rang de valors
possibles s [-16, 15] i es codifiquen en complement a 2. En les instruccions amb tots els
operands en registres els bits 4:3 no es fan servir, i contenen el valor 00.
La instrucci ASR t un valor indefinit en els bits 10:8 (camp Rf1), donat que noms t un
operand font.
A continuaci es mostren alguns exemples de codificaci dinstruccions A-L en LM.

Llenguatge
Assemblador

Llenguatge Mquina

en hexadecimal:

ADD R4, R0, R5

11 101 100 000 00 100

EC04h

SUBI R3, #1, R3

11 011 011 00001 001

DB09h

ASR R2, R2

11 010 000 010 00 110

D046h

AND R7, R7, R7

11 111 111 111 00 111

FFE7h

11

Instruccions de salt
Les instruccions de salt donen al processador la possibilitat de trencar el seqenciament
implcit. Per qu es produeixi aquest trencament sha de complir la condici de salt. Si no es
compleix, es segueixen executant les instruccions en seqncia; si es compleix, es diu que el
processador salta o pren el salt. Les instruccions de salt sn necessries per implementar
sentncies dalt nivell de tipus condicional i iteratiu.
Hi ha diverses instruccions de salt, que es distingeixen perqu la condici de salt que
savalua s diferent en cadascuna delles. La sintaxi s

codi_doperaci adrea_dest_del_salt
on codi_doperaci s el nom de la instrucci i adrea_dest_del_salt indica ladrea de la
instrucci que sexecutar a continuaci en cas que es prengui el salt; per tant, s un nmero
entre 0 i 255.
La condici de salt savalua en funci del resultat de lltima instrucci aritmtica o de
crrega que ha executat el processador; la utilitat dels bits de condici s justament facilitar
aquesta avaluaci. En concret, les instruccions de salt de la Mquina Rudimentria sn les
segents:

Instrucci: Branch if...


BL

...lower

BG

...greater

BEQ

...equal

BNE

...not equal

BLE

...lower or equal

BGE

...greater or equal

BR

Branch

Condici de salt: si lltim


resultat ha estat...

Qu savalua

...menor que 0

N=1

...ms gran que 0

N=0iZ=0

...igual a 0

Z=1

...diferent de 0

Z=0

...menor o igual que 0

N=1oZ=1

...ms gran o igual que 0

N=0

Salt incondicional

En la instrucci de salt incondicional, BR, no savalua cap condici, sempre es pren el salt. En
executar les instruccions de salt no es modifiquen el bits de condici.
A continuaci es mostren alguns exemples dexecuci dinstruccions de salt.

BR 25
ABANS

DESPRS

xxxx xxxx

0001 1010

Bit Z

Bit N

PC

12

BGE 174
ABANS

DESPRS

0001 1000

0001 1001

Bit Z

Bit N

ABANS

DESPRS

0001 1000

1010 1111

Bit Z

Bit N

PC

BGE 174

PC

Codificaci en LM
Les instruccions de salt es codifiquen en LM aix:
2

CO COND
15

13

@_dest_del_salt

000
10

BR

10

000

000

@_dest_del_salt

BEQ

10

001

000

@_dest_del_salt

BL

10

010

000

@_dest_del_salt

BLE

10

011

000

@_dest_del_salt

BNE

10

101

000

@_dest_del_salt

BGE

10

110

000

@_dest_del_salt

BG

10

111

000

@_dest_del_salt

En totes elles el camp CO t el valor 10. Per distingir entre elles es fa servir el camp COND
(Condici, bits 13:11); observem que hi ha una combinaci daquests 3 bits que no es fa
servir, donat que noms hi ha 7 instruccions de salt.
El camp dels bits 10:8 no susa, i t el valor 000 per totes les instruccions de salt. Els bits
7:0 codifiquen ladrea dest del salt.

13

A continuaci es mostren alguns exemples de codificaci dinstruccions de salt.

Llenguatge
Assemblador

Llenguatge Mquina

en hexadecimal:

BR 25

10 000 000 00011001

8019h

BL 0

10 010 000 00000000

9000h

BEQ 136

10 001 000 10001000

8888h

Exemple de programaci en Llenguatge Mquina de la Mquina


Rudimentria
A continuaci es presenta la traducci dun programa en alt nivell a Llenguatge Mquina de
lMR. El que fa el programa s la multiplicaci de dues variables a i b mitjanant una suma
acumulada da sobre la variable mul b vegades.

Programa en alt nivell:

var a,b,mul: enter;


a:= 10;
b:= 5;
mul:= 0;
mentre b>0 fer
mul:= mul+a;
b:= b-1;
fmentre

En la traducci a Llenguatge Assemblador sha suposat que:


-

les variables a, b i mul es guarden a les adreces 00h, 01h i 02h respectivament

les variables ja estan inicialitzades (s a dir, no cal traduir les 3 primeres


sentncies dalt nivell).

14

Programa en baix nivell:


Llenguatge Assemblador

M[@]: Llenguatge Mquina

en hexadecimal

LOAD 0(R0), R1
LOAD 1(R0), R2
ADDI R0, #0, R3
SUBI R2, #0, R0
BLE 0Bh
ADD R3, R1, R3
SUBI R2, #1, R2
BR 06h
STORE R3, 2(R0)

00h
01h
02h
03h
04h
05h
06h
07h
08h
09h
0Ah
0Bh

0000 0000 0000 1010


0000 0000 0000 0101
0000 0000 0000 0000
0000 1000 0000 0000
0001 0000 0000 0001
1101 1000 0000 0000
1100 0010 0000 0001
1001 1000 0000 1011
1101 1011 0010 0100
1101 0010 0000 1001
1000 0000 0000 0110
0101 1000 0000 0010

000Ah
0005h
0000h
0800h
1001h
D800h
C201h
980Bh
DB24h
D209h
8006h
5802h

carregar
dades

clculs

guardar
resultat

Durant lexecuci del programa les variables a, b i mul es guarden a R1, R2 i R3


respectivament. Les instruccions del programa comencen a ladrea 03h.
Es pot observar que, tal com s tpic, el programa en baix nivell consta de tres parts. En la
primera es porten les dades amb les que treballa el programa cap al processador, en la
segona es fan els clculs requerits pel programa, i en lltima els resultats es guarden a la
memria.
-

La instrucci ADDI R0, #0, R3 inicialitza R3 a 0. Aix es pot fer de diverses


maneres:
AND R0, R1, R3
LOAD 2(R0), R3
etc.

La instrucci SUBI R2, #0, R0 s la traducci de lavaluaci de la condici del


bucle (b > 0). Com que a R0 no shi pot escriure, lnic efecte de la instrucci s
que el bits de condici sactualitzen dacord amb el valor dR2 (que guarda la
variable b).

15

Resum del Llenguatge Mquina de lMR

LOAD

00

Rd

Ri

adrea_base

15

13

2
STORE

10
15

A-L AMB IMMEDIAT

A-L ENTRE
REGISTRES

Rd
13

5
7

Rf2

Rf1

OP
0

3
10

immediat

Rf1
10

11
15

@_dest_del_salt
7

Rd

000
10

13

COND

11
15

adrea_base
7

Ri
10

13

Rf
13

2
SALTS

01
15

10

3
OP

00
4

Instrucci
de salt

COND

Instrucci
A-L

OP

BR

000

ADDI

000

BEQ

001

SUBI

001

BL

010

ADD

100

BLE

011

SUB

101

BNE

101

ASR

110

BGE

110

AND

111

BG

111

Figura 2.1. Llenguatge Mquina de la Mquina Rudimentria.

16

3. Unitat de Procs de la Mquina


Rudimentria

Tal com ja havem vist, la Unitat de Procs s el conjunt de dispositius electrnics de la CPU
que permeten dur a terme totes les tasques necessries per a lexecuci dinstruccions.
Vegem quines sn aquestes funcions que la UP ha de ser capa de fer.
En totes les figures daquesta secci sescriuen en cursiva els noms dels senyals generats
per la Unitat de Control (que sestudiaran a la secci segent).

Guardar la instrucci que sest executant


Ja hem vist que les instruccions es porten duna en una de la memria al processador, on
sn executades. Lexecuci dura un cert nombre de cicles, durant els quals la instrucci es
guarda al Registre dInstruccions (IR). s un registre de 16 bits que t lentrada de dades
connectada amb la sortida de dades de la memria (Mout), tal com es mostra a la Figura 3.1.
El senyal de crrega Ld_IR el governa la Unitat de Control, que tamb dna ordre de llegir de
la memria posant a 0 el senyal L/E.

16

Memria

load

Mout

IR
L/E

Ld_IR

L/E

Figura 3.1. Circuiteria per carregar el registre IR.

Seqenciament de les instruccions


El registre Comptador de Programa (PC) guarda en tot moment ladrea segent a la de la
instrucci que sest executant; es diu que apunta a la segent instrucci. El PC es fa servir
per adrear la memria desprs dexecutar cada instrucci per obtenir-ne la instrucci que
sexecutar a continuaci, excepte quan sha de prendre un salt. s doncs un registre de 8
bits, amb la sortida de dades connectada a lentrada dadreces de la memria (M@) a travs
del bus dadreces.
Donat que segons el seqenciament implcit sexecuten consecutivament les instruccions
dadreces successives, el contingut del PC sincrementa en 1 desprs de llegir de la memria
cada nova instrucci. El senyal de crrega Ld_PC est governat per la UC.
El seqenciament implcit pot trencar-se en executar instruccions de salt. En aquest cas,

17

ladrea de la instrucci a executar lespecifica la prpia instrucci de salt (que est guardada
a lIR), en els bits 7:0. Per tant, hi ha tamb una connexi entre els bits 7:0 de lIR i el bus
dadreces de la memria. El multiplexor SELADR (Figura 3.2), governat per la UC (senyal
PC/@), permet discriminar amb quin dels dos valors sha dadrear la memria en cada
moment.

PC/@
IR7-0
8

M@

8
8

IR

Memria

PC
PC

load

Ld_PC

+1

1
SELADR

Figura 3.2. Circuiteria per al seqenciament dinstruccions.

Guardar les dades dels programes


Les dades dels programes es porten de la memria a la CPU per operar amb elles. Mentre
sn a la CPU es guarden al Banc de Registres, un conjunt de 8 registres de 16 bits amb els
noms R0, R1, ..., R7. El registre R0 sempre cont un 0. Els registres del Banc tamb es fan
servir per guardar resultats de clculs intermitjos que shagin de fer per executar els
programes.
Es pot llegir un registre i escriure un registre simultniament. Per aix el Banc de Registres
t un bus dentrada i un de sortida, ambds de 16 bits, i les entrades de control segents:
SL: selecci de lectura, senyal de 3 bits que permet seleccionar quin dels 8
registres es vol llegir.
SE: selecci descriptura, el mateix per per escriure.
E: perms descriptura (1 bit).
La Figura 3.3 mostra la implementaci interna del Banc de Registres.
A lentrada SL del Banc de Registres shi ha de poder arribar des de:
-

els bits IR10:8 i IR7:5 quan sest executant una instrucci A-L. En aquest moment,
aquests camps corresponen a Rf1 i Rf2 respectivament, s a dir, indiquen quins
sn els operands font.

tamb els bits IR10:8 quan sexecuten instruccions daccs a memria. En aquest
cas corresponen al camp Ri, s a dir, codifiquen el registre ndex.

els bits IR13:11 en executar un STORE, per obtenir el registre font.


18

SL

R0

SL

B.R.
SE

Dout

SE

16

Din
16

val

16
16

load

R1

load

R2

load

R3

load

R4

16

load

R5

16

load

R6

16

load

R7

16
16

16

Dout

16

16
1

Din

Figura 3.3. Implementaci interna del Banc de Registres de lMR.

El multiplexor SELREG possibilita la connexi daquests tres camins amb lentrada SL del
Banc (Figura 3.4). SELREG est governat per la UC a travs del senyal CRf, de dos bits ja
que s un multiplexor 4-1.
Les escriptures al Banc de Registres es fan en acabar lexecuci duna instrucci A-L o un
LOAD. En tots dos casos el registre dest est codificat en els bits 13:11, i per aix hi ha una
connexi entre els bits IR13:11 i lentrada SE del Banc de Registres. La UC donar ordre
descriptura quan pertoqui mitjanant el senyal ERd.

3
3
no usat

SELREG

SL

B.R.

CRf
13

11 10

87

IR

Rf/Rd Rf1/Ri Rf2

SE

Dout

ERd

Din
16

19

16

Figura 3.4. Entrades de control del Banc de Registres

Fer operacions amb les dades dels programes


Per a aix hi ha la Unitat Aritmtica i Lgica (ALU), que rep dos operands (entrades A i B, de
16 bits) i genera un resultat (sortida O, de 16 bits) i dos senyals dun bit (N i Z) que indiquen si
el resultat ha estat negatiu o zero. LALU est governada per tres senyals de control: C2, C1 i
C0.
A ms de fer les 4 operacions de qu disposa lMR (suma, resta, desplaament aritmtic a
la dreta i and), lALU tamb s capa de treure per la sortida el mateix valor que li arriba per
lentrada B (Figura 3.6.a). Aix s degut a qu la dada llegida de la memria per una
instrucci LOAD, abans de ser escrita al registre dest entra a lALU i en surt sense ser
modificada, per tal que els bits N i Z sactualitzin segons el seu valor.
La Figura 3.5 mostra la implementaci interna de lALU. Es pot observar que loperand que
arriba al desplaador s el que entra per lentrada B.

B
16

16

Sumador

Desplaador

Restador

16

16

16

16

AND

16

C0
C1

0
1

mux1

16

0
1
mux2

16

......

16

O15

C2

Figura 3.5. Implementaci de lALU de la Mquina Rudimentria

Els senyals C1 i C0 permeten triar entre una de les 4 operacions A-L. Els 4 mduls operadors

20

estan connectats a les entrades del multiplexor mux1 en un ordre tal que els senyals C1 i C0
es poden connectar amb els bits 1 i 0 de lIR, que mentre sexecuten instruccions A-L
corresponen als 2 bits ms baixos del camp OP (vegeu la Figura 2.1).
El multiplexor mux2 permet triar entre el resultat duna operaci i el valor de lentrada B;
est governat pel senyal OPERAR, generat per la UC. La Figura 3.6 resumeix el paper dels
senyals que controlen lALU.

C2

C1

C0

Sortida

A+B

16

16
B

A-B

B >> 1

A and B

C2
N
Z

ALU
O

C1
C0

OPERAR
IR1
IR0

16

(a)

(b)

Figura 3.6. (a) Funcions i (b) senyals de control de lALU.

Connexi de lALU amb la resta de blocs


Entrada A
Per aquesta entrada hi passen els primers operands de les instruccions
aritmtico-lgiques. El Banc de Registres no permet llegir dos registres alhora, i
per tant en les instruccions que requereixin dos operands del Banc aquests shan
de llegir en seqncia. Per aix cal tenir un registre, el registre RA, que guardi el
primer operand mentre es llegeix el segon i aix puguin ser presents tots dos
alhora a les entrades A i B de lALU (Figura 3.7). El senyal Ld_RA s generat per
la UC.
Entrada B
Per aquesta entrada hi passen:
-

els segons operands quan sexecuten instruccions amb el segon operand en


registre (aix inclou lnic operand de la instrucci ASR)

els operands immediats quan sexecuten instruccions amb el segon operand


immediat. En aquest cas, loperand s als bits IR7:3, i se li ha dextendre el
signe fins a 16 bits donat que est codificat en complement a 2; s el que fa el
mdul EXT (Figura 3.7).

la dada provinent de la memria quan sexecuten instruccions LOAD.

El multiplexor SELDAT possibilita la connexi daquests tres camins amb


lentrada B de lALU. Lentrada de selecci 1, que discrimina entre instrucci A-L o
21

LOAD, es connecta amb el senyal OPERAR, governat per la UC. Lentrada de


selecci 0, que discrimina entre operand en registre o immediat, es connecta amb
el bit 2 de lIR (bit de ms pes del camp OP, vegeu la Figura 2.1).

Sortida O
El resultat que genera lALU sempre sha descriure al Banc de Registres, i per
aix la sortida O es connecta amb lentrada Din del Banc.

Sortides N i Z
Fan falta dos registres dun bit, RZ i RN, per guardar els bits de condici que
genera lALU a partir del resultat calculat. Les ordres de crrega Ld_RZ i Ld_RN
les dna la UC.

IR7-3
5

B.R.
Dout

IR

EXT
16
16

Din

Ld_RA

load

0
1

SELDAT

RA

Ld_RZ
load

16

Mout

16

3 2

16

16

16

OPERAR
IR2

16

RZ

OPERAR

RN

ALU

load

IR1:0

Ld_RN

Memria

ERd

16

Figura 3.7. Connexi de lALU amb la resta de blocs

Avaluar la condici de salt


La decisi de si sha de saltar o no en executar una instrucci de salt sha de prendre en
funci de quina instrucci sigui (bits 13:11 de lIR, camp COND) i del valor guardat a RZ i RN,
tal com es mostra a la taula de la pgina 12. A la UP de la Mquina Rudimentria hi ha un
bloc combinacional que en funci daquestes informacions genera un senyal dun bit, Cond,
que val 1 si sha de saltar i 0 si no. La UC consulta el valor de Cond per decidir si dna a la
UP ordre de saltar o de seguir executant instruccions en seqncia.

22

Calcular ladrea efectiva en les instruccions daccs a memria


En executar instruccions daccs a memria, ladrea efectiva de loperand que s a memria
(font o dest) sobt sumant ladrea base, que s als bits IR7:0, ms el desplaament, que s
als bits 7:0 del registre ndex. Una vegada calculada, ladreca efectiva es guarda al registre
R@, que es connecta amb el bus dadreces a travs del multiplexor SELADR (Figura 3.8).
El registre R@ s necessari en lexecuci dun STORE, ja que ladrea efectiva sha de
mantenir present a lentrada dadreces de la memria mentre del Banc de Registres es llegeix
el registre font. Una connexi directa permet que aquest registre font arribi a lentrada de
dades de la memria, Min. Per executar un LOAD no s estrictament necessari el registre
R@, perqu en aquest cas noms sha de llegir un registre del Banc, el registre ndex.

Rx15-0

DE
REGISTRES

IR7-0

Ld_R@

load

Rx7-0

BANC

Min

16

16

PC/@

R@

Dout

8
1
SELADR

M@

PC

0
8

Ld_PC

Memria

load

+1

IR

Figura 3.8. Circuiteria per a ladreament de la memria.

Aquesta circuiteria modifica lleugerament lesquema que shavia proposat per executar
instruccions de salt a la Figura 3.2, ja que ara els bits 7:0 de lIR (adrea dest del salt) passen
pel sumador i pel registre R@ abans darribar a SELADR. Per tal que ladrea dest del salt
no es modifiqui, el valor que se li suma ha de ser 0; aix es pot aconseguir llegint el registre
R0 en aquest moment. s per aquesta ra que les instruccions de salt tenen el valor 000 en
els bits 10:8.

La figura segent mostra tota la circuiteria de la UP. Es pot veure que en total la Unitat de
Control envia 11 senyals per governar la UP. Les informacions que fa servir la UC per donar
valors a aquests 11 senyals sn el tipus dinstrucci que sest executant (bits IR15:14, camp
CO) i el senyal Cond (que indica si sha de prendre o no el salt en executar instruccions de
salt).

23

CLCUL DADRECES
GESTI DEL BANC DE REGISTRES

Min

16

Ld_R@

Rx7-0
3

IR7-5 (Rf2)

no usat

SELREG
2

IR7-0

SL

16

8
1

SELADR
2

CRf
IR13-11 (Rd)

SE

Rx15-0

BANC Dout
DE
REGISTRES

16

+1

IR7-3

Ld_PC

24

UNITAT DE CONTROL

Ld_IR
Ld_PC

Ld_IR

16

ERd

M@

Din

Ld_R@

IR

EXT

MEMRIA

IR10-8 (Rf1/Ri)

PC/@

R@

PC

IR13-11 (Rf)

Ld_RA
Ld_RZ
Ld_RN
Ld_RA

ERd
PC / @
2

CRf

Cond

Avaluaci
de la condici

OPERAR
IR2 (OP2)

16

16

B
OPERAR

ALU

RN

2
3

IR13-11(COND)

GESTI DE
LALU

IR1-0 (OP1-0)

Ld_RN
ALU15-0

L/E

RA

RZ

SELDAT 1

Ld_RZ
Z

IR15-14 (CO)

AVALUACI DE LA
CONDICI DE SALT

Mout

16

16

OPERAR

16

16 16 16 16

16

L/E

25

4. Unitat de Control de la Mquina


Rudimentria

Fases en lexecuci duna instrucci


Per a executar una instrucci, el processador ha de realitzar seqencialment una srie
daccions; es diu que ha de passar per un cert nombre de fases, cadascuna de les quals pot
durar un o ms cicles de rellotge. Les fases dexecuci varien entre instruccions. En les
instruccions A-L sn aquestes:

Fase de fetch: es porta la instrucci que sha dexecutar des de la memria fins al
registre IR. La instrucci es llegeix de ladrea apuntada pel PC, que es carrega
amb el valor que tenia incrementat en 1.

Fase de decodificaci: la Unitat de Control analitza el codi doperaci de la nova


instrucci i decideix quines ordres haur de donar a la UP perqu lexecuti.

Fase de lectura doperands: els operands requerits per la instrucci es fan


arribar fins a lALU.

Fase dexecuci: lALU realitza loperaci indicada per la instrucci.

Fase descriptura de resultats: sescriu el resultat a la ubicaci de dest i


sactualitzen els bits de condici, si la instrucci ho requereix.

Les dues primeres fases sn comunes a totes les instruccions, i a partir daqu les accions
concretes varien. En les instruccions daccs a memria, abans de la lectura dels operands
cal calcular ladrea efectiva de loperand que sigui a memria; no hi ha fase dexecuci,
perqu loperand font sescriu sense modificar sobre loperand dest. En les instruccions de
salt, les tres ltimes fases es substitueixen per:

Fase davaluaci de la condici: es discerneix si sha de saltar o no en funci


del valor dels bits de condici i de la instrucci que sest executant.

Fase dexecuci: en cas que shagi de saltar es fa el fetch de la instrucci dest


del salt i sactualitza el PC convenientment.

La Unitat de Control s un sistema seqencial amb 3 entrades i 11 sortides, que canvia


destat a cada cicle de rellotge. Les ordres generades per la UC sn entrades de selecci de
multiplexors (PC/@, CRf i OPERAR) i permisos descriptura (senyals de crrega, senyal ERd
i senyal L/E). A cada cicle es fa servir un cert subconjunt de la circuiteria de la UP, i la part
que no interv est inactiva: els permisos descriptura es posen a 0 i les entrades de selecci
dels multiplexors tenen un valor indeterminat.
En la representaci grfica de lautmat de la UC no escriurem les 11 sortides dintre dels
estats, per raons de legibilitat. Dintre dels estats hi escriurem un mnemotcnic identificador
de les sortides, i els valors dels 11 senyals els posarem en una taula a part. En aquesta taula
escrivim en negreta els valors dels senyals que intervenen en les tasques de lestat
corresponent.

26

Fases comunes a totes les instruccions


FETCH
En aquesta fase shan de fer les accions segents, preservant lordre:
IR := M[PC]
PC := PC + 1
Per a aix cal fer arribar el contingut del PC fins al bus dadreces (PC/@ = 0), donar
ordre de llegir la memria (L/E = 0), i activar els senyals de crrega de lIR i el PC (el
que arriba a lentrada de dades del PC s en tot moment el que passa pel bus
dadreces ms 1). La Figura 4.1 mostra en tra gruixut i en negreta les parts de la UP
involucrades en la fase de fetch.

Min

16

Ld_R@

Rx7-0
0

IR7-5 (Rf2)

SELREG

SL

16

8
1

SELADR

IR7-0
2

CRf
IR13-11 (Rd)

SE

BANC Dout
DE
REGISTRES

Rx15-0
8

16

+1

Ld_PC

IR7-3
5

16

Ld_IR

Din

Ld_IR

M@

ERd

Unitat de Control

PC

no usado

PC/@

IR

EXT

Ld_PC
Ld_R@

Memria

R@

IR13-11 (Rf)
IR10-8 (Rf1/Ri)

16

Ld_RA
16

Ld_RZ

16

16

16

16

SELDAT 1

ERd

Mout

16

Ld_RA

Ld_RN

16

OPERAR
IR2 (OP2)

RA

PC / @
2

Ld_RZ

CRf
OPERAR

IR15-14 (CO)
Cond

Z
Avaluaci
de la condici

RZ

16

B
OPERAR

ALU

RN
IR13-11(COND)

16

IR1-0 (OP1-0)

Ld_RN
ALU15-0

16

L/E

L/E

Figura 4.1. Activitat a la Unitat de Procs durant lestat FETCH.

Totes les accions que shan de dur a terme durant la fase de fetch es poden fer en un
cicle. Els registres PC i IR no es carregaran fins al final del cicle, coincidint amb el flanc
ascendent del rellotge, i per tant el valor del PC que arriba al bus dadreces es mant
constant al llarg de tot lestat de fetch (Figura 4.2).
Desprs de la fase de fetch es passar sempre a la fase de decodificaci,
independentment de quina instrucci sestigui executant (Figura 4.3).

27

Estat de FETCH

Estat de DECODIFICACI

rellotge
temps
PC/@:= 0, L/E:= 0,
Ld_PC:= 1, Ld_IR:= 1

IR:= M[PC]
PC:= PC+1

Figura 4.2. Temporitzaci dels events en lestat de fetch.

DECODIFICACI (estat DEC)


Durant aquesta fase, que dura un cicle, la UC avalua els senyals dentrada IR15:14, que
han pres el nou valor en linstant inicial del cicle, en carregar-se el registre IR. En
acabar la fase de decodificaci, la UC decideix quin ser lestat futur en funci dIR15:14
(Figura 4.3).
Durant aquesta fase la UP no fa res, i per tant totes les ordres de control estan
inactives.

IR15, IR14, Cond

ESTAT
SORT

01x
00x
FETCH
F

xxx

STORE
LOAD

DEC
DE

11x
A-L
10x
Salt

Sortides

DE

Ld_IR

Ld_PC

Ld_R@

Ld_RA

Ld_RZ

Ld_RN

ERd

L/E

PC/@

CRf

xx

xx

OPERAR

Figura 4.3. Fases comunes a totes les instruccions

28

Instruccions daccs a memria


Per completar lexecuci daquestes instruccions calen dos cicles, un per calcular ladrea
efectiva de loperand que s a memria, i laltre per fer la transferncia dinformaci, en un
sentit o en laltre segons si sexecuta un LOAD o un STORE.
CLCUL DE LADREA EFECTIVA (estat ADR1)
Es llegeix el registre ndex del Banc de Registres (CRf = 01), es calcula ladrea efectiva
(sortida del sumador que suma els 8 bits ms baixos del registre ndex ms els 8 bits
ms baixos de lIR) i sescriu al registre R@ al final del cicle (Ld_R@ = 1). Aquesta
adrea efectiva es podr fer servir per accedir a memria al cicle segent.
LOAD
En aquest estat es fan les accions corresponents a les fases de lectura doperands i
escriptura de resultats. Sadrea la memria amb el contingut dR@ (PC/R@ = 1), es
llegeix la memria (L/E = 0) i sescriu el que surt de lALU al registre dest (ERd = 1). El
que surt de lALU s el que ha arribat de la memria grcies a qu la UC posa
OPERAR a 0 (multiplexors SELDAT i mux2). Sactualitzen tamb els bits de condici
(Ld_RN = 1 i Ld_RZ = 1).
STORE
Es llegeix el registre font del Banc de Registres (CRf = 0) i el seu valor, que arriba fins a
lentrada de dades de la memria, sescriu (L/E = 1) a ladrea indicada pel registre R@
(PC/R@ = 1). Sn les accions corresponents a les fases de lectura doperands i
escriptura de resultats.

xxx

FETCH xxx
F

DEC
DE

0xx

ADR1

x1x

AD

STORE
S

Sortides

AD

Ld_IR

Ld_PC

Ld_R@

Ld_RA

Ld_RZ

Ld_RN

ERd

L/E

PC/@

CRf

01

xx

00

OPERAR

x0x
LOAD
L

Figura 4.4. Execuci de les instruccions daccs a memria

La Figura 4.5 mostra lactivitat a la UP durant els cicles ADR1 i LOAD.


29

Min

16

Ld_R@

Rx7-0

SELREG
3

SL

16

8
1

SELADR

IR7-0
2

CRf
IR13-11 (Rd)

Unitat de Control

PC/@

SE

BANC Dout
DE
REGISTRES

Rx15-0
8

16

+1

Ld_PC

IR7-3

Ld_IR

16

Ld_IR

ERd

Ld_PC

M@

Memria

no usado

R@

IR7-5 (Rf2)

PC

IR13-11 (Rf)
IR10-8 (Rf1/Ri)

Din

Ld_R@

IR

EXT

Ld_RA
16

Ld_RZ
Ld_RN

16

16

OPERAR

IR15-14 (CO)

Avaluaci
de la condici

Cond

16

IR13-11(COND)

B
OPERAR

ALU

RN

IR2 (OP2)

16

RZ

OPERAR

Ld_RZ
Z

RA

CRf

Mout

16

16

SELDAT 1

PC / @
2

16

16

Ld_RA

ERd

16

IR1-0 (OP1-0)

Ld_RN
ALU15-0

16

L/E

L/E

(a)

Min

16

Ld_R@

Rx7-0
0

IR7-5 (Rf2)

no usado

SELREG

8
1

SELADR

IR7-0

SE

BANC Dout
DE
REGISTRES

Rx15-0
8

16

+1

Ld_PC

IR7-3

Ld_IR

16

Ld_IR

ERd

M@

PC

CRf
IR13-11 (Rd)

Unitat de Control

16

Ld_PC

PC/@

SL

Din

Ld_R@

IR

EXT

Memria

R@

IR13-11 (Rf)
IR10-8 (Rf1/Ri)

Ld_RA
16

Ld_RZ
Ld_RN

16

16

Cond

Avaluaci
de la condici

RZ

16

Mout

OPERAR
IR2 (OP2)

16

B
OPERAR

ALU

RN
IR13-11(COND)

0
1
0

Ld_RZ
Z

IR15-14 (CO)

RA

CRf
OPERAR

SELDAT

PC / @
2

16

16

16

Ld_RA

ERd

16
16

IR1-0 (OP1-0)

Ld_RN
ALU15-0

16

L/E

L/E

(b)
Figura 4.5. Activitat a la UP durant els estats ADR1 (a) i LOAD (b).

30

Instruccions aritmtiques i lgiques


Per a completar lexecuci daquestes instruccions calen 2 cicles desprs de la
decodificaci:
LECTURA DEL PRIMER OPERAND (estat LPO)
El primer operand es llegeix del Banc de Registres (CRf = 01, arriba el camp Rf1 de lIR
a lentrada SL del Banc) i sescriu al registre RA (Ld_RA = 1). Si la instrucci que
sexecuta s una ASR, el valor escrit al registre RA no es far servir per res.
LECTURA DEL SEGON OPERAND I EXECUCI (estat LSOE)
Es llegeix del Banc el registre indicat pel camp Rf2 de la instrucci (CRf = 10), que
arriba a lentrada 3 de SELDAT. El bit IR2 decideix si loperand que arriba fins a lALU s
el que ve del registre o limmediat guardat a lIR una vegada se li ha exts el signe (el
senyal OPERAR val 1 mentre sexecuten instruccions A-L).
Durant aquest cicle, els 4 mduls de clcul de lALU computen un resultat. Els bits IR1:0
determinen quin dels 4 valors ser el que surti de lALU, ja que el senyal OPERAR
estar a 1. LALU computa tamb els valors dels bits N i Z.
Tant el resultat de loperaci com els bits de condici tindran el valor correcte al final del
cicle, i per tant es poden escriure ja a la seva ubicaci de dest, ajuntant daquesta
manera en un mateix cicle les fases dexecuci i escriptura de resultats. Durant lestat
LSOE, doncs, la UC dna ordre descriure sobre el Banc de Registres (ERd = 1) i de
carregar els bits de condici als biestables (Ld_RZ = 1 i Ld_RN = 1).

FETCH
F

xxx

DEC
DE

11x

LPO
PO

xxx

LSOE
SOE

Sortides

PO

SOE

Ld_IR

Ld_PC

Ld_R@

Ld_RA

Ld_RZ

Ld_RN

ERd

L/E

PC/@

CRf

01

10

OPERAR

Figura 4.6. Execuci de les instruccions aritmtiques i lgiques.

La Figura 4.7 mostra lactivitat a la UP durant els estats LPO i LSOE.


31

Min

16

Ld_R@
Rx7-0

no usado

SELREG
3

SL

16

8
1

SELADR

IR7-0
2

CRf
IR13-11 (Rd)

Unitat de Control

PC/@

SE

BANC Dout
DE
REGISTRES

Rx15-0
8

16

+1

Ld_PC

IR7-3

Ld_IR

16

Ld_IR

ERd

Ld_PC

M@

Din

Ld_R@

IR

EXT

Memria

IR7-5 (Rf2)

R@

PC

IR13-11 (Rf)
IR10-8 (Rf1/Ri) 3

Ld_RA
16

Ld_RZ
Ld_RN

16

16

OPERAR

IR15-14 (CO)

Avaluaci
de la condici

Cond

16

B
OPERAR

ALU

RN

IR13-11(COND)

IR2 (OP2)

16

RZ

OPERAR

Ld_RZ
Z

RA

CRf

Mout

16

16

SELDAT 1

PC / @
2

16

16

Ld_RA

ERd

16

IR1-0 (OP1-0)

Ld_RN
ALU15-0

16

L/E

L/E

(a)

Min

16

Ld_R@

Rx7-0
0

IR7-5 (Rf2)

no usado

+
SL

8
1

SELADR

IR7-0

IR13-11 (Rd)

SE

BANC Dout
DE
REGISTRES

Rx15-0
8

16

+1
IR7-3

Ld_IR

16

Ld_PC
8

Ld_IR

ERd

M@

PC

CRf

Unitat de Control

16

Ld_PC

PC/@

SELREG

Din

Ld_R@

IR

EXT

Memria

R@

IR13-11 (Rf)
IR10-8 (Rf1/Ri)

Ld_RA
16

Ld_RZ
16

Ld_RN

16

16

Cond

Mout

0
1

OPERAR
IR2 (OP2)

0
16

16

Ld_RZ
Z

IR15-14 (CO)

RA

OPERAR

SELDAT

PC / @
CRf

16

16

16

Ld_RA

ERd

16

Avaluaci
de la condici

RZ

OPERAR

ALU

RN
IR13-11(COND)

IR1-0 (OP1-0)

Ld_RN
ALU15-0

16

L/E

L/E

(b)
Figura 4.7. Activitat a la UP durant els estats LPO (a) i LSOE (b).

32

Instruccions de salt
Calen tres cicles desprs de la decodificaci per completar lexecuci de les
instruccions de salt.
AVALUACI DE LA CONDICI DE SALT (estat ACS)
No es fa res, simplement la UC examina lentrada Cond per decidir si sha de saltar o
no. En cas que no shagi de saltar lestat futur s el de FETCH, per seguir lexecuci del
programa en seqncia (Figura 4.8).
Observem que les sortides en aquest estat tenen els mateixos valors que en lestat de
decodificaci (la UP est inactiva).
CLCUL DE LADREA DEST DEL SALT (estat ADR2)
En cas que shagi de saltar, sescriu al registre R@ (Ld_R@ = 1) ladrea dest del salt,
que s als bits 7:0 de lIR. Perqu aquesta adrea no es modifiqui en passar pel
sumador, es llegeix el registre R0 del Banc (CRf = 01, els bits IR10:8 tenen el valor 000
en les instruccions de salt).
Les sortides en aquest estat tenen els mateixos valors que en lestat ADR1.
SALT (estat BRANCH)
Es fa el fetch de la instrucci dest del salt: al bus dadreces hi arriba el contingut dR@
(PC/R@ = 1), es llegeix la memria (L/E = 0) i sescriu el que arriba per Mout al registre
IR (Ld_IR = 1). A ms, el PC es carrega (Ld_PC = 1) amb ladrea dest del salt ms 1.
Per tant, lestat futur daquest cicle s el de decodificaci, donat que el fetch de la
instrucci que sexecutar a continuaci ja est fet (Figura 4.8).

Sortides

DE

AD

Ld_IR

Ld_PC

Ld_R@

Ld_RA

ADR2

Ld_RZ

AD

Ld_RN

ERd

L/E

PC/@

CRf

xx

01

xx

OPERAR

xx0
FETCH xxx
F

DEC
DE

10x

ACS
DE
xx1

xxx
xxx
BRANCH

Figura 4.8. Execuci de les instruccions de salt.

33

Min

16

Ld_R@

Rx7-0
0

IR7-5 (Rf2)

SELREG

SL

8
1

SELADR

IR7-0
CRf
IR13-11 (Rd)

Unitat de Control

16

SE

BANC Dout
DE
REGISTRES

Rx15-0
8

16

+1

Ld_PC

IR7-3
5

16

Ld_IR

ERd

M@

Ld_IR
Ld_PC

PC

no usado

PC/@

Din

Ld_R@

IR

EXT

Memria

R@

IR13-11 (Rf)
IR10-8 (Rf1/Ri)

Ld_RA
16

Ld_RZ
Ld_RN

16

16

Cond

Avaluaci
de la condici

RZ

16

Mout

0
1

OPERAR
IR2 (OP2)

16

B
OPERAR

ALU

RN
IR13-11(COND)

16

16

Ld_RZ
Z

IR15-14 (CO)

RA

CRf
OPERAR

SELDAT

PC / @
2

16

16

Ld_RA

ERd

16

IR1-0 (OP1-0)

Ld_RN
ALU15-0

16

L/E

L/E

Figura 4.9. Activitat de la UP durant lestat BRANCH.

34

Graf destats complet de la Unitat de Control


xxx
xxx
xxx
LPO
11x

xxx

FETCH

DEC

ADR1

0xx

DE

A-L

SOE

PO

00x
xxx

LSOE

LOAD

LOAD

AD
01x

STORE

STORE

S
10x
ACS
xx0

xx1

DE

ADR2

xxx

BRANCH
B

AD

SALT

xxx

Sortides

DE

AD

PO

SOE

Ld_IR

Ld_PC

Ld_R@

Ld_RA

Ld_RZ

Ld_RN

ERd

L/E

PC/@

CRf

01

xx

00

01

10

xx

OPERAR

Optimitzacions de la Unitat de Control


Les instruccions de la Mquina Rudimentria es poden executar en menys cicles que els que
es dibuixen en el graf anterior.

El cicle dedicat a avaluar la condici de salt (estat ACS) es pot estalviar, ja que el
valor del senyal Cond s conegut per la UC des del principi de lestat de
decodificaci, i per tant desprs daquest estat ja es pot triar entre diferents estats

35

futurs en funci de Cond. Es poden unificar doncs els estats DEC i ACS (que
tenen les mateixes sortides).

Durant els estats ADR1 i ADR2 es donen exactament les mateixes ordres a la UP.
Es poden unificar en un sol estat, ADR, i discriminar entre instruccions daccs a
memria i instruccions de salt posteriorment. El graf queda aix:
xxx
xxx
xxx
LPO
11x

xxx

LSOE

LOAD
xxx
FETCH
F

00x

DEC
100

DE

0xx
101

ADR

A-L

SOE

PO

01x

LOAD

STORE

STORE

AD
10x
xxx

BRANCH
B

SALT

Les sortides dels estats LPO i ADR es diferencien noms en qu el primer dna
ordre de carregar el registre RA i el segon dna ordre de carregar el registre R@.
Es poden unificar els dos estats, i donar totes dues ordres de crrega. Si
finalment resulta que la instrucci en execuci s A-L, el valor carregat al registre
R@ no es far servir per res, per tampoc no afectar al correcte funcionament
del processador. Igualment, si la instrucci en execuci s daccs a memria o
de salt, el valor escrit al registre RA no tindr cap efecte sobre lexecuci.
A ms, aquestes tasques es poden fer durant lestat de decodificaci, encara que
no se spiga encara quina instrucci sest executant, ja que en aquest estat la
UP no estava fent cap feina.
A lestat de decodificaci modificat li diem DECO. La Figura 4.10.a mostra
lactivitat a la UP durant aquest estat.

Durant lestat LSOE no es fa servir la part de la UP dedicada al fetch de la


segent instrucci. Per tant, podem fer aquesta feina en el propi estat LSOE, de
manera que en acabar lexecuci duna instrucci A-L la instrucci segent
shaur carregat a lIR. Per tant, lestat futur de LSOE passa a ser lestat de
decodificaci.
Desprs daquesta modificaci, a lestat LSOE passem a dir-li ARIT. La Figura
4.10.b mostra lactivitat a la UP durant aquest estat.

A la Figura 4.11 es mostra com queda finalment el graf destats i la taula de sortides
corresponent.

36

Min

16

Ld_R@

Rx7-0
0

+
SL

no usado

16

8
1

SELADR

IR7-0
2

CRf
IR13-11 (Rd)

Unitat de Control

SE

BANC Dout
DE
REGISTRES

Rx15-0
8

16

+1

Ld_PC

IR7-3

Ld_IR

16

Ld_IR

ERd

Ld_PC

M@

Din

Ld_R@

IR

EXT

Memria

SELREG

IR7-5 (Rf2)

PC/@

R@

3
3

PC

IR13-11 (Rf)
IR10-8 (Rf1/Ri)

Ld_RA
16

Ld_RZ
Ld_RN

16

16

Ld_RZ
Z

IR15-14 (CO)

Avaluaci
de la condici

Cond

16

IR13-11(COND)

OPERAR
IR2 (OP2)

B
OPERAR

ALU

RN

0
1

16

RZ

Mout

16

16

RA

CRf
OPERAR

SELDAT

PC / @
2

16

16

Ld_RA

ERd

16

IR1-0 (OP1-0)

Ld_RN
ALU15-0

16

L/E

L/E

(a)

Min

16

Ld_R@

Rx7-0
0

no usado

SL

SELREG
3

8
1

SELADR

IR7-0
CRf
IR13-11 (Rd)

Unitat de Control

16

3
2

SE

BANC Dout
DE
REGISTRES

Rx15-0
8

16

+1
IR7-3
5

16

Ld_PC
8

Ld_IR

ERd

M@

Ld_IR
Ld_PC

PC

IR7-5 (Rf2)

PC/@

Din

Ld_R@

IR

EXT

Memria

R@

IR13-11 (Rf)
IR10-8 (Rf1/Ri)

Ld_RA
16

Ld_RZ
16

Ld_RN

16

16

Cond

Avaluaci
de la condici

RZ

16

Mout

OPERAR
IR2 (OP2)

16

B
OPERAR

ALU

RN
IR13-11(COND)

0
1
0

Ld_RZ
Z

IR15-14 (CO)

RA

CRf
OPERAR

SELDAT

PC / @
2

16

16

16

Ld_RA

ERd

16

IR1-0 (OP1-0)

Ld_RN
ALU15-0

16

L/E

L/E

(b)
Figura 4.10. Activitat a la UP durant els estats DECO (a) i ARIT (b).

37

xxx

xxx

LOAD
L

00x
xxx
FETCH

DECO

100

01x

STORE
S
xxx

xxx

101
11x

ARIT

BRANCH

Sortides

Ld_IR

Ld_PC

Ld_R@

Ld_RA

Ld_RZ

Ld_RN

ERd

L/E

PC/@

CRf

xx

01

10

xx

00

xx

OPERAR

Figura 4.11. Graf destats i taula de sortides de la Unitat de Control de la Mquina Rudimentria.

Dacord amb aquest disseny per a la Unitat de Control, les instruccions daccs a memria
triguen 3 cicles en executar-se. Les instruccions A-L es pot considerar que triguen 2 cicles, ja
que en lestat ARIT es fa el fetch de la instrucci segent. I les instruccions de salt triguen
tamb 2 cicles: FETCH i DECO, perqu lestat BRANCH pot considerar-se tamb part de la
instrucci segent.
La Unitat de Control de lMR, igual que qualsevol sistema seqencial, es pot implementar

38

de diverses maneres, per exemple amb una ROM i biestables.

Temps de cicle del computador


El temps de cicle dun computador s la durada del perode del senyal de rellotge. El temps
de cicle dun computador ha de ser prou gran com per qu en un cicle es puguin dur a terme
totes les tasques corresponents a qualsevol dels estats. Per exemple, les tasques que es fan
en lestat FETCH de la Mquina Rudimentria tenen la durada segent:
Tmux

Tmem

Tinc
temps

on Tmux s el retard del multiplexor SELADR, Tmem s el retard de la memria i Tinc s el


retard de lincrementador. Per tant, el temps de cicle de lMR ha de ser com a mnim Tmux +
Tmem.
El temps de cicle dun computador est determinat pel retard de letapa que t el retard
ms gran.

Exemple dexecuci. Cronograma


A continuaci es presenta un exemple de programaci en Llenguatge Mquina i un
cronograma que mostra lestat de la UP i la UC durant uns quants cicles dexecuci. El
programa calcula la suma acumulada dels elements dun vector de 4 elements.

Programa en alt nivell:

var V: vector[0..3] de enter;


suma, i: enter ;
i:= 3;
/* el vector es recorre del revs */
suma:= 0;
mentre (i 0) fer
suma:= suma+vector[i];
i:= i-1;
fmentre

En la traducci a baix nivell es fan les suposicions segents:

39

les variables suma i i es guarden a les adreces 00h i 01h respectivament

les variables suma i i ja estan inicialitzades, a 0 i 3 respectivament

el vector V es guarda en les posicions 02h...05h; els valors dels seus elements
sn 2, 8, 5 i -3

el programa comena a ladrea 06h

Programa en baix nivell:


Llenguatge Assemblador

Llenguatge Mquina

en hexadecimal

LOAD 1(R0), R2
LOAD 0(R0), R3
LOAD 2(R2), R1
ADD R1, R3, R3
SUBI R2, #1, R2
BGE 08h
STORE R3, 0(R0)

00h
01h
02h
03h
04h
05h
06h
07h
08h
09h
0Ah
0Bh
0Ch

0000 0000 0000 0000


0000 0000 0000 0011
0000 0000 0000 0010
0000 0000 0000 1000
0000 0000 0000 0101
1111 1111 1111 1101
0001 0000 0000 0001
0001 1000 0000 0000
0000 1010 0000 0010
1101 1001 0110 0100
1101 0010 0000 1001
1011 0000 0000 1000
0101 1000 0000 0000

0000h
0003h
0002h
0008h
0005h
FFFDh
1001h
1800h
0A02h
D964h
D209h
B008h
5800h

carregar
dades

clculs

guardar
resultat

Es pot observar que lavaluaci de la condici del bucle es fa desprs del cos del bucle i no
abans. Aix es pot fer sempre que es tingui la certesa que sexecutar almenys una volta del
bucle (o en sentncies repeat).
Observem tamb que el valor dR2 s diferent a cada iteraci, i per tant la instrucci LOAD
02h(R2), R1 accedeix a cada volta a un element diferent del vector.

La Figura 4.12 mostra levoluci de la UP i la UC cicle a cicle durant lexecuci de les 6


primeres instruccions del programa. En el primer cicle de lexecuci el contingut de tots els
registres s desconegut llevat del PC i lR0, que sassumeix que valen 06h i 0 respectivament.
Tamb sassumeix que la UC est en lestat de FETCH.

40

LOAD 01h(R0), R2

ESTAT

LOAD 00h(R0), R3

LOAD 02h(R2), R1

ADD R1, R3, R3

SUBI R2, #1, R2

BGE 08h

FETCH

DECO

LOAD

FETCH

DECO

LOAD

FETCH

DECO

LOAD

FETCH

DECO

ARIT

DECO

ARIT

DECO

BRANCH

DECO

Ld_IR

Ld_PC

Ld_R@

Ld_RA

Ld_RZ

Ld_RN

ERd

L/E

PC/@

CRf

OPERAR

M@

06h

01h

07h

00h

08h

05h

09h

0Ah

0Bh

08h

Mout

1001h

0003h

1800h

0000h

0A02h

D209h

B008h

0A02h

Min

0000h

0000h

0003

FFFDh

0000h

0003h

0000h

0000h

0002h

Din

0003h

0000h

FFFDh

FFFDh

0002h

PC

06h

07h

07h

07h

08h

08h

08h

09h

09h

09h

0Ah

0Ah

0Bh

0Bh

0Ch

0Ch

09h

IR

1001h

1001h

1001h

1800h

1800h

1800h

0A02h

0A02h

0A02h

D964h

D209h

B008h

B008h

0A02h

R@

01h

01h

01h

00h

00h

00h

05h

05h

05h

61h

0Ch

0Ch

08h

08h

RA

0000h

0000h

0000h

0000h

0000h

0000h

0003h

0003h

0003h

FFFDh

0003h

0000h

0000h

RZ

RN

R0

R1

FFFDh

FFFDh FFFDh

FFFDh FFFDh FFFDh FFFDh FFFDh

R2

0003h

0003h

0003h

0003h

0003h

0003h

0003h

0003h

0003h

0003h

R3

0000h

0000h

0000h

0000h

0000h

0000h

FFFDh FFFDh FFFDh FFFDh FFFDh

FFFDh D964h

D964h D209h
61h

FFFDh 0003h

0003h

Figura 4.12. Cronograma de les 6 primeres instruccions del programa exemple.

41

0002h

0002h

0002h

5. Llenguatge Assemblador de la Mquina


Rudimentria

Com ja hem vist, el Llenguatge Assemblador (LA) permet escriure programes en Llenguatge
Mquina de manera ms cmoda que les tires de 0s i 1s. Els programes escrits en LA sn
traduts a LM per lassemblador. Lassemblador rep com a entrada un fitxer contenint un
programa escrit en LA, i genera com a sortida un fitxer que cont el programa tradut a LM i
algunes informacions ms que lMR s capa dinterpretar i que sn necessries per qu
pugui executar correctament els programes.
En la Mquina Rudimentria, els programes en LM subiquen sempre a partir de ladrea
de memria 00h. Mentre tradueix, lassemblador mant el compte de quantes paraules de
memria shan ocupat fins al moment i per tant a quina adrea subicar el que tradueixi a
continuaci.
A ms del repertori dinstruccions, el Llenguatge Assemblador de lMR t aquests altres
elements: etiquetes, directives i comentaris.

Etiquetes
Sn cadenes alfanumriques seguides del carcter : que sescriuen al comenament duna
lnia dun programa en LA. Letiqueta permet identificar ladrea de memria on subicar el
que es tradueixi a continuaci.
Per exemple, suposem que el segent fragment de codi estar ubicat a partir de ladrea
0Ah de memria una vegada tradut a LM:

etiq:

LOAD 0(R3), R1
BNE 13
ADD R2, R0, R1
ASR R1, R1

La segona instrucci es podria escriure


BNE etiq
Les etiquetes permeten que mentre sescriuen els programes en LA no shagi de conixer en
quines adreces de memria subicaran una vegada traduts a LM.

Directives
Sn sentncies del LA que no sexecutaran. Permeten definir la zona de dades de la memria
i indicar on comena i acaba la part executable del programa. En les lnies en LA que
continguin directives tamb shi poden definir etiquetes.
El LA de lMR t 5 directives:

42

=
Permet donar un nom a valors constants. Si escrivim per exemple
Num_elements = 100
lidentificador Num_elements es podr fer servir en tot el programa per referir-se
al valor 100. La definici de constants no implica ocupar cap espai de memria.

.dw (define word)


Assigna un cert valor inicial a una o ms adreces de memria, a partir de la
posici on apareix la directiva. Per exemple, si les primeres lnies dun programa
en LA sn

vector:

.dw 0
.dw 10, 11, 12, -1

les adreces de memria 00h:04h contindran en comenar lexecuci del programa


els valors 0, 10, 11, 12 i -1, codificats en complement a 2. A ms, en el programa
ens podrem referir a ladrea 01h usant la paraula vector.

.rw (reserve word)


Reserva un cert nombre dadreces consecutives de memria sense donar-los cap
valor inicial; la utilitat s guardar espai per posar-hi els valors calculats durant
lexecuci del programa. Per exemple, si un programa comena amb les directives

.begin

CONTINGUT

00h

000Ah

01h

FFFFh

02h

03h

04h

0064h

...

en comenar lexecuci a la memria hi haur el segent:

ADREA

...

resultats:

.dw 10, -1
.rw 2
.dw 100

Serveix per indicar a lMR quina instrucci haur dexecutar en primer lloc. En
concret, sescriu
.begin etiq_inici
on etiq_inici s una etiqueta definida just abans de la primera instrucci a
executar del programa. Hi ha dhaver una i noms una directiva .begin a tots els
programes en LA. Es pot escriure a qualsevol lloc del programa.
La directiva .begin no es tradueix a LM, sin que s una de les informacions
addicionals que hi ha al fitxer generat per lassemblador que permet a lMR
executar correctament els programes.

.end

43

Sha de posar immediatament desprs de lltima instrucci que sexecutar. Nhi


pot haver ms duna, si hi ha diferents punts dacabada del programa. Tampoc no
es tradueix a LM, sin que genera informaci de control per a lMR.
En general, els programes en LA comencen per un determinat nombre de directives de
definici de dades, i a continuaci sescriuen les instruccions.

Comentaris
Sn textos que sescriuen en els programes per tal de fer-los ms entenedors a possibles
lectors i al propi programador; es solen posar a la dreta de la instrucci o directiva a qu fan
referncia. En una lnia qualsevol dun programa en LA, sentn que s un comentari tot el
que apareix desprs del carcter ;. Si escrivim
resul:
ini:
;

.rw 1
ADD R0, R0, R1
SUB R1, R2, R3

; deixar espai per al resultat


; inicialitzar R1 a 0.

la instrucci SUB no es traduir a LM, lassemblador assumir que forma part dun comentari.

El procs dassemblatge
Al programa assemblador se li dna com a entrada un fitxer contenint un programa en LA.
Lassemblador llegeix el programa dues vegades (es diu que els assembladors i compiladors
sn programes de dos passos).
La primera vegada, cada cop que troba una definici de constant o detiqueta apunta el
nom i el valor associat a la Taula de Smbols. En el cas de les constants el valor associat s
el que apareix a la dreta del =, en el cas detiquetes s ladrea on es defineix;
lassemblador de lMR sempre assumeix que el programa subicar a partir de ladrea de
memria 00h.
La segona vegada va tradunt cada lnia duna manera o altra segons la directiva o
instrucci que contingui. Quan troba una referncia a una etiqueta o constant, la tradueix pel
valor que ha apuntat anteriorment a la Taula de Smbols. Si a la Taula de Smbols no hi ha
letiqueta o la constant, dna un missatge al programador de qu ha coms lerror dusar un
identificador sense haver-lo definit.

44

El simulador de la Mquina Rudimentria


Per a usar el simulador de la Mquina Rudimentria shan de seguir els passos segents:

El codi font sha descriure en un fitxer amb extensi .mr.

Per a assemblar-lo, sha dinvocar la comanda enmr amb el nom de fitxer com a
argument. El programa enmr genera dos fitxers:

un amb extensi .asm que cont el mateix codi que loriginal per sense
comentaris

un amb extensi .cod que cont el codi mquina executable.

Per a simular lexecuci del programa sha dinvocar la comanda mr amb el nom
del programa com a argument.

> edit prog.mr

> enmr prog

prog.asm

> mr prog

prog.mr

prog.cod

45

simulaci