Professional Documents
Culture Documents
Apuntes Maquina Sencilla Upc PDF
Apuntes Maquina Sencilla Upc PDF
Bus de dades
Bus dadreces
Bus de control
CPU
MEMRIA E/S
UP UC
1
Els tres mduls es comuniquen a travs de tres busos:
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):
Aplicacions
Sistema operatiu
Llenguatge mquina
Nivell fsic
2
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.
CPU Memria
Bus de dades
Min
UP 16
16 Mout
3
Bus dadreces
11 M@
8
UC
Bus de control
1 L/E
3
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
00h 6D62h
01h 2346h
02h 8675h
03h 0005h
04h
... 0087h
...
FDh D964h
FEh CA10h
FFh 0091h
4
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).
Banc PC
11 de
Registres
IR
3
Bits N Z ALU
de condici
5
2. Llenguatge Mquina de la Mquina
Rudimentria
Tipus dinstruccions
El Llenguatge Mquina de lMR t tres tipus dinstruccions:
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:
6
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:
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
Memria
0Ch 1101 0100 0101 0101 1101 0100 0101 0101
Registres
R1 xxxx xxxx xxxx xxxx 1101 0100 0101 0101
R3 xxxx xxxx 0000 1100 xxxx xxxx 0000 1100
Bit Z x 0
Bit N x 1
7
LOAD 12(R2), R2
ABANS DESPRS
Memria
0Bh 0110 1111 0101 1011 0110 1111 0101 1011
0Ch xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx
Registres
R2 1111 1111 1111 1111 0110 1111 0101 1011
Bit Z x 0
Bit N x 0
ABANS DESPRS
Memria
0Bh xxxx xxxx xxxx xxxx 0000 0000 0000 1011
Registres
R0 0000 0000 0000 0000 0000 0000 0000 0000
R5 0000 0000 0000 1011 0000 0000 0000 1011
Bit Z x x
Bit N x x
Codificaci en LM
Les instruccions daccs a memria es codifiquen en Llenguatge Mquina de la manera
segent:
2 3 3 8
CO Rd/Rf Ri adrea_base
15 13 10 7 0
LOAD 00 Rd Ri adrea_base
STORE 01 Rf Ri adrea_base
8
- el camp adrea_base t 8 bits, donat que ha de poder guardar nmeros naturals
entre 0 i 255.
Llenguatge
Llenguatge Mquina en hexadecimal:
Assemblador
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.
9
ADD R4, R3, R5
ABANS DESPRS
ABANS DESPRS
ASR R2, R5
ABANS DESPRS
ABANS DESPRS
10
Codificaci en LM
Les instruccions A-L es codifiquen en Llenguatge Mquina de la manera segent:
2 3 3 5 3
Instruccions A-L amb un CO Rd Rf1 immediat OP
operand immediat 15 13 10 7 2 0
2 3 3 3 2 3
Instruccions A-L amb
CO Rd Rf1 Rf2 00 OP
operands a registres 15 13 10 7 4 2 0
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
Llenguatge Mquina en hexadecimal:
Assemblador
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
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
12
BGE 174
ABANS DESPRS
BGE 174
ABANS DESPRS
Codificaci en LM
Les instruccions de salt es codifiquen en LM aix:
2 3 3 8
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
Llenguatge Mquina en hexadecimal:
Assemblador
14
Programa en baix nivell:
15
Resum del Llenguatge Mquina de lMR
2 3 3 8
LOAD 00 Rd Ri adrea_base
15 13 10 7 0
2 3 3 8
STORE 01 Rf Ri adrea_base
15 13 10 7 0
2 3 3 8
SALTS 10 COND 000 @_dest_del_salt
15 13 10 7 0
2 3 3 5 3
A-L AMB IMMEDIAT 11 Rd Rf1 immediat OP
15 13 10 7 2 0
2 3 3 3 2 3
A-L ENTRE 11 Rd Rf1 Rf2 00 OP
REGISTRES 15 13 10 7 4 2 0
Instrucci Instrucci
COND OP
de salt A-L
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).
16
Mout
Memria
load IR
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
1
8
SELADR M@
0
Ld_PC
load
+1
PC
8 8
PC
Memria
8
8
IR
SL: selecci de lectura, senyal de 3 bits que permet seleccionar quin dels 8
registres es vol llegir.
18
SL
3
c
R0 16
16
load R1
16
SL load R2
3
B.R. 16 16
load R3 Dout
SE Dout SE 16
3 16 3 load R4
16
load R5
E Din
1 16
load R6
16
16
val load R7
16
E
1
Din
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.
0
3
1
3 SELREG SL
2 3
3
no usat 3
B.R.
3
2
CRf SE Dout
3 16
Rf/Rd Rf1/Ri Rf2 IR
13 11 10 87 5
ERd E Din
1
16
19
Figura 3.4. Entrades de control del Banc de Registres
A B
16 16
16 16 16 16 16
0 1 2 3
0 C0
mux1
1 C1
16
0 1
mux2 C2
O15 16
......
1 16
N O Z
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
16 16
0 x x B
A B
1 0 0 A+B C2 OPERAR
1 0 1 A-B
N ALU C1 IR1
Z
O
C0 IR0
1 1 0 B >> 1
16
1 1 1 A and B
(a) (b)
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
ERd E
16
Mout
16
Din Ld_RA 16
3 2 1 0
1 OPERAR
SELDAT
load RA 0 IR2
Ld_RZ 16 16
16 A B
load
Memria
RZ
OPERAR
RN ALU
load IR1:0
2
O
Ld_RN
16
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
Dout Min
16 16
Rx7-0 Ld_R@
load
BANC PC/@
8
DE +
REGISTRES 8
R@
IR7-0 8
8
1
SELADR M@
PC
8
+1
8 load
Memria
Ld_PC
8
IR
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
R@
SELREG 8
IR7-5 (Rf2) 2
3 8
3 16 1
no usat 3
3
SELADR M@
2 Rx15-0 0
BANC Dout 8
CRf 16
DE IR7-3 +1 8
IR13-11 (Rd) SE
PC
3 REGISTRES Ld_PC
MEMRIA
5
8
Ld_IR 16 Ld_IR
UNITAT DE CONTROL
Ld_PC ERd E
Din
Ld_R@ IR
24
EXT
Ld_RA
Ld_RZ
16
Mout
Ld_RN 16 16 16 16
ERd Ld_RA 16
16 3 2 1 0
PC / @ SELDAT 1 OPERAR
AVALUACI DE LA
CRf RA 0 IR2 (OP2)
2 CONDICI DE SALT
OPERAR Ld_RZ 16 16
GESTI DE
Z A B
RZ LALU
IR15-14 (CO) OPERAR
2 Avaluaci N
de la condici RN ALU IR1-0 (OP1-0)
Cond 2
IR13-11(COND) O
3 Ld_RN
ALU15-0 16
L/E
L/E
25
4. Unitat de Control de la Mquina
Rudimentria
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.
26
Fases comunes a totes les instruccions
FETCH
16
Min
Ld_R@
Rx7-0
IR13-11 (Rf) 0 8 PC/@
3
IR10-8 (Rf1/Ri) 1 + 8
3
R@
SELREG SL 8
3
IR7-5 (Rf2) 3
2 16
8
1
no usado 3
3
IR7-0 SELADR M@
2 Rx15-0 0
BANC Dout
CRf 16 8
DE +1 8
IR13-11 (Rd)
PC
SE
Memria
Ld_PC
3
REGISTRES IR7-3
8
16 5 Ld_IR
ERd E
Ld_IR Din
Unitat de Control
EXT IR
Ld_PC
Ld_R@
16
Ld_RA 16
Mout
16 16 16 16
Ld_RZ 16
Ld_RA
3 2 1 0
Ld_RN 16
SELDAT 1 OPERAR
ERd 0 IR2 (OP2)
RA
PC / @
Ld_RZ 16 16
2
CRf
OPERAR A B
Z
RZ
2 IR15-14 (CO) OPERAR
Avaluaci N
de la condici RN ALU 2
IR1-0 (OP1-0)
Cond
3
IR13-11(COND) O
Ld_RN
ALU15-0 16
L/E
L/E
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
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.
Sortides F DE
IR15, IR14, Cond
Ld_IR 1 0
Ld_PC 1 0
ESTAT
Ld_R@ 0 0
SORT
Ld_RA 0 0
01x Ld_RZ 0 0
STORE
Ld_RN 0 0
00x
LOAD
ERd 0 0
FETCH xxx DEC
DE L/E 0 0
F 11x
A-L PC/@ 0 x
10x CRf xx xx
Salt
OPERAR x x
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.
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.
Sortides AD L S
Ld_IR 0 0 0
Ld_PC 0 0 0
xxx
Ld_R@ 1 0 0
Ld_RA 0 0 0
0xx
FETCH xxx DEC ADR1 x1x
STORE Ld_RZ 0 1 0
F DE AD S
Ld_RN 0 1 0
x0x
ERd 0 1 0
LOAD L/E 0 0 1
L
PC/@ x 1 1
CRf 01 xx 00
OPERAR x 0 x
29
16
Min
Rx7-0 Ld_R@
IR13-11 (Rf) 0 8
PC/@
3
IR10-8 (Rf1/Ri) 1 + 8
R@
3 SELREG SL 8
3
IR7-5 (Rf2) 3
2 16 8 1
no usado 3
3
IR7-0 SELADR M@
Rx15-0 0
2
BANC Dout
CRf 16 8
DE +1 8
IR13-11 (Rd)
PC
SE
REGISTRES
Memria
3 Ld_PC
IR7-3
8
Ld_IR 5 Ld_IR
Unitat de Control
16
Ld_PC ERd E
Din
Ld_R@ IR
EXT
Ld_RA
16
Ld_RZ
16
Mout
Ld_RN 16 16 16 16
Ld_RA 16
ERd
16 3 2 1 0
PC / @ SELDAT 1 OPERAR
CRf RA 0 IR2 (OP2)
2
OPERAR Ld_RZ 16 16
Z A B
RZ
2 IR15-14 (CO) OPERAR
Avaluaci N
de la condici RN ALU 2
IR1-0 (OP1-0)
Cond
3
IR13-11(COND) O
Ld_RN
ALU15-0 16
L/E
L/E
(a)
16
Min
Ld_R@
Rx7-0
IR13-11 (Rf) 0 8 PC/@
3
IR10-8 (Rf1/Ri) 1 + 8
3
R@
SELREG SL 8
3
IR7-5 (Rf2) 3
2 16
8
1
no usado 3
3
IR7-0 SELADR M@
2 Rx15-0 0
BANC Dout
CRf 16 8
DE +1 8
IR13-11 (Rd)
PC
SE
Memria
Ld_PC
3
REGISTRES IR7-3
8
Ld_IR 16 5 Ld_IR
Unitat de Control
ERd E
Ld_PC
Din
Ld_R@ IR
EXT
Ld_RA
16
Ld_RZ
16 Mout
16
Ld_RN 16 16 16
Ld_RA 16
ERd
16 3 2 1 0
PC / @ SELDAT 1 OPERAR
CRf RA 0 IR2 (OP2)
2
OPERAR Ld_RZ 16 16
Z A B
RZ
2 IR15-14 (CO) OPERAR
Avaluaci N
de la condici RN ALU 2
IR1-0 (OP1-0)
Cond
3
IR13-11(COND) O
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:
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.
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).
Sortides PO SOE
Ld_IR 0 0
Ld_PC 0 0
Ld_R@ 0 0
Ld_RA 1 0
xxx 11x xxx
FETCH DEC LPO LSOE Ld_RZ 0 1
F DE PO SOE
Ld_RN 0 1
ERd 0 1
L/E 0 0
PC/@ x x
CRf 01 10
OPERAR x 1
31
16
Min
Ld_R@
Rx7-0
IR13-11 (Rf) 0 8 PC/@
3
IR10-8 (Rf1/Ri) 3 1 + 8
R@
SELREG SL 8
3
IR7-5 (Rf2) 3
2 16
8
1
no usado 3
3
IR7-0 SELADR M@
2 Rx15-0 0
BANC Dout
CRf 16 8
DE +1 8
IR13-11 (Rd)
PC
SE
Memria
Ld_PC
3
REGISTRES IR7-3
8
Ld_IR 16 5 Ld_IR
Unitat de Control
ERd E
Ld_PC
Din
Ld_R@ IR
EXT
Ld_RA
16
Ld_RZ
16
Mout
Ld_RN 16 16 16 16
Ld_RA 16
ERd
16 3 2 1 0
PC / @ SELDAT 1 OPERAR
CRf RA 0 IR2 (OP2)
2
OPERAR Ld_RZ 16 16
Z A B
RZ
2 IR15-14 (CO) OPERAR
Avaluaci N
de la condici RN ALU 2
IR1-0 (OP1-0)
Cond
3
IR13-11(COND) O
Ld_RN
ALU15-0 16
L/E
L/E
(a)
16
Min
Ld_R@
Rx7-0
IR13-11 (Rf) 0 8 PC/@
3
IR10-8 (Rf1/Ri) 1 + 8
3
R@
SELREG SL 8
3
IR7-5 (Rf2) 3 2 16
8
1
no usado 3
3
IR7-0 SELADR M@
2 Rx15-0 0
BANC Dout
CRf 16 8
DE +1 8
IR13-11 (Rd)
PC
SE
Memria
Ld_PC
3
REGISTRES IR7-3
8
Ld_IR 16 5 Ld_IR
Unitat de Control
Ld_PC ERd E
Din
Ld_R@ IR
EXT
Ld_RA
16
Ld_RZ
16 16
Mout
Ld_RN 16 16 16
Ld_RA 16
ERd
16 3 2 1 0
PC / @ SELDAT 1 OPERAR
CRf RA 0 IR2 (OP2)
2
16 16
OPERAR Ld_RZ
Z A B
RZ
2 IR15-14 (CO) OPERAR
Avaluaci N
de la condici RN ALU 2
IR1-0 (OP1-0)
Cond
3
IR13-11(COND) O
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.
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.
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 B
xx0 Ld_IR 0 0 1
10x Ld_PC 0 0 1
FETCH xxx DEC ACS
F DE DE Ld_R@ 0 1 0
xx1
Ld_RA 0 0 0
ADR2 Ld_RZ 0 0 0
AD Ld_RN 0 0 0
xxx ERd 0 0 0
xxx
L/E 0 0 0
BRANCH PC/@ x x 1
B
CRf xx 01 xx
OPERAR x x x
33
16
Min
Ld_R@
Rx7-0
IR13-11 (Rf) 0 8 PC/@
3
IR10-8 (Rf1/Ri) 1 + 8
3
R@
SELREG SL 8
3
IR7-5 (Rf2) 3
2 16
8
1
no usado 3
3
IR7-0 SELADR M@
2 Rx15-0 0
BANC Dout
CRf 16 8
DE +1 8
IR13-11 (Rd)
PC
SE
Memria
Ld_PC
3
REGISTRES IR7-3
8
Ld_IR 16 5 Ld_IR
Unitat de Control
Ld_PC ERd E
Din
Ld_R@ IR
EXT
Ld_RA
16
Ld_RZ
Mout
16
Ld_RN 16 16 16 16
Ld_RA 16
ERd
16 3 2 1 0
PC / @ SELDAT 1 OPERAR
CRf RA 0 IR2 (OP2)
2
OPERAR Ld_RZ 16 16
Z A B
RZ
2 IR15-14 (CO) OPERAR
Avaluaci N
de la condici RN ALU 2
IR1-0 (OP1-0)
Cond
3
IR13-11(COND) O
Ld_RN
ALU15-0 16
L/E
L/E
34
Graf destats complet de la Unitat de Control
xxx
xxx
xxx
LOAD LOAD
00x
FETCH xxx DEC ADR1 L
0xx
F DE AD
01x STORE
STORE
S
10x
Sortides F DE AD L S PO SOE B
Ld_IR 1 0 0 0 0 0 0 1
Ld_PC 1 0 0 0 0 0 0 1
Ld_R@ 0 0 1 0 0 0 0 0
Ld_RA 0 0 0 0 0 1 0 0
Ld_RZ 0 0 0 1 0 0 1 0
Ld_RN 0 0 0 1 0 0 1 0
ERd 0 0 0 1 0 0 1 0
L/E 0 0 0 0 1 0 0 0
PC/@ 0 x x 1 1 x x 1
CRf x x 01 xx 00 01 10 xx
OPERAR x x x 0 x x 1 x
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 xxx LSOE
A-L
11x PO SOE
LOAD LOAD
xxx
FETCH DEC 00x L
F 100 DE
0xx
101 ADR 01x STORE
STORE
AD S
10x
BRANCH SALT
xxx B
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
16
Min
Rx7-0 Ld_R@
IR13-11 (Rf) 0 8 PC/@
3
IR10-8 (Rf1/Ri) 1 + 8
3
R@
SELREG SL 8
IR7-5 (Rf2) 3
2 3
16
8
1
no usado 3
3
IR7-0 SELADR M@
2 Rx15-0 0
BANC Dout
CRf 16 8
DE +1 8
IR13-11 (Rd)
PC
SE
Memria
Ld_PC
3
REGISTRES IR7-3
8
Ld_IR 16 5 Ld_IR
Unitat de Control
Ld_PC ERd E
Din
Ld_R@ IR
EXT
Ld_RA
16
Ld_RZ
16
Mout
Ld_RN 16 16 16 16
Ld_RA 16
ERd
16 3 2 1 0
PC / @ SELDAT 1 OPERAR
CRf RA 0 IR2 (OP2)
2
OPERAR Ld_RZ 16 16
Z A B
RZ
2 IR15-14 (CO) OPERAR
Avaluaci N
de la condici RN ALU 2
IR1-0 (OP1-0)
Cond
3
IR13-11(COND) O
Ld_RN
ALU15-0 16
L/E
L/E
(a)
16
Min
Ld_R@
Rx7-0
IR13-11 (Rf) 0 8 PC/@
3
IR10-8 (Rf1/Ri) 1 + 8
3
R@
SELREG SL 8
IR7-5 (Rf2) 2 3
16
8
1
3
no usado 3
3
IR7-0 SELADR M@
2 Rx15-0 0
BANC Dout
CRf 16 8
DE +1 8
IR13-11 (Rd)
PC
SE
Memria
Ld_PC
3
REGISTRES IR7-3
8
Ld_IR 16 5 Ld_IR
Unitat de Control
Ld_PC ERd E
Din
Ld_R@ IR
EXT
Ld_RA
16
Ld_RZ
16 Mout
Ld_RN 16 16 16 16
Ld_RA 16
ERd
16 3 2 1 0
PC / @ SELDAT 1 OPERAR
CRf RA 0 IR2 (OP2)
2
OPERAR Ld_RZ 16 16
Z A B
RZ
2 IR15-14 (CO) OPERAR
Avaluaci N
de la condici RN ALU 2
IR1-0 (OP1-0)
Cond
3
IR13-11(COND) O
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 01x STORE
F 100 D S
xxx
xxx 101
11x
ARIT
BRANCH A
B
Sortides F D A L S B
Ld_IR 1 0 1 0 0 1
Ld_PC 1 0 1 0 0 1
Ld_R@ 0 1 0 0 0 0
Ld_RA 0 1 0 0 0 0
Ld_RZ 0 0 1 1 0 0
Ld_RN 0 0 1 1 0 0
ERd 0 0 1 1 0 0
L/E 0 0 0 0 1 0
PC/@ 0 x 0 1 1 1
CRf xx 01 10 xx 00 xx
OPERAR x x 1 0 x x
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.
Tmux Tmem
Tinc
temps
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
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.
40
LOAD 01h(R0), R2 LOAD 00h(R0), R3 LOAD 02h(R2), R1 ADD R1, R3, R3 SUBI R2, #1, R2 BGE 08h
ESTAT FETCH DECO LOAD FETCH DECO LOAD FETCH DECO LOAD FETCH DECO ARIT DECO ARIT DECO BRANCH DECO
Ld_IR 1 0 0 1 0 0 1 0 0 1 0 1 0 1 0 1 0
Ld_PC 1 0 0 1 0 0 1 0 0 1 0 1 0 1 0 1 0
Ld_R@ 0 1 0 0 1 0 0 1 0 0 1 0 1 0 1 0 1
Ld_RA 0 1 0 0 1 0 0 1 0 0 1 0 1 0 1 0 1
Ld_RZ 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 0
Ld_RN 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 0
ERd 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 0
L/E 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
PC/@ 0 x 1 0 x 1 0 x 1 0 x 0 x 0 x 1 x
CRf x 1 x x 1 x x 1 x x 1 2 1 2 1 x 1
OPERAR x x 0 x x 0 x x 0 x x 1 x 1 x x x
M@ 06h x 01h 07h x 00h 08h x 05h 09h x 0Ah x 0Bh x 08h x
Mout 1001h x 0003h 1800h x 0000h 0A02h x FFFDh D964h x D209h x B008h x 0A02h x
Min x 0000h x x 0000h x x 0003 x x FFFDh 0000h 0003h 0000h 0000h x 0002h
PC 06h 07h 07h 07h 08h 08h 08h 09h 09h 09h 0Ah 0Ah 0Bh 0Bh 0Ch 0Ch 09h
IR x 1001h 1001h 1001h 1800h 1800h 1800h 0A02h 0A02h 0A02h D964h D964h D209h D209h B008h B008h 0A02h
R@ x x 01h 01h 01h 00h 00h 00h 05h 05h 05h 61h 61h 0Ch 0Ch 08h 08h
RA x x 0000h 0000h 0000h 0000h 0000h 0000h 0003h 0003h 0003h FFFDh FFFDh 0003h 0003h 0000h 0000h
RZ x x x 0 0 0 1 1 1 0 0 0 0 0 0 0 0
RN x x x 0 0 0 0 0 0 1 1 1 1 1 0 0 0
R0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R2 x x x 0003h 0003h 0003h 0003h 0003h 0003h 0003h 0003h 0003h 0003h 0003h 0002h 0002h 0002h
R3 x x x x x x 0000h 0000h 0000h 0000h 0000h 0000h FFFDh FFFDh FFFDh FFFDh FFFDh
41
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:
LOAD 0(R3), R1
BNE 13
ADD R2, R0, R1
etiq: ASR R1, R1
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 0
vector: .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.
.dw 10, -1
resultats: .rw 2
.dw 100 ADREA CONTINGUT
...
.begin
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.
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
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:
prog.cod
45