Você está na página 1de 206

Introduo aos Sistemas Digitais e

Microprocessadores
Guilherme Arroz

Jos Monteiro
23 de Maio de 2003

Arlindo Oliveira

Contedo
Prefcio

Introduo

Bases de Numerao e Cdigos


2.1 Bases de Numerao . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Representao de nmeros em base
. . . . . . . .
2.1.2 Representao de nmeros em base  . . . . . . . .
2.1.3 Representao de nmeros em bases potncia de 2 .
2.2 Operaes aritmticas . . . . . . . . . . . . . . . . . . . . .
2.2.1 Somas em base  . . . . . . . . . . . . . . . . . . . .
2.2.2 Multiplicaes em Base  . . . . . . . . . . . . . . .
2.2.3 Operaes aritmticas em outras bases . . . . . . .
2.3 Cdigos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.1 Codificao . . . . . . . . . . . . . . . . . . . . . . .
2.3.2 Cdigos numricos . . . . . . . . . . . . . . . . . . .
2.3.3 Cdigos alfanumricos . . . . . . . . . . . . . . . . .
2.4 Representao digital da informao . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

Funes Lgicas
3.1 lgebra de Boole Binria . . . . . . . . . . . . . . . . . . . . . . .
3.1.1 Funes Lgicas de Uma Varivel . . . . . . . . . . . . .
3.1.2 Funes de Duas Variveis . . . . . . . . . . . . . . . . .
3.1.3 As Funes AND e OR . . . . . . . . . . . . . . . . . . . .
3.1.4 Funo Conjuno . . . . . . . . . . . . . . . . . . . . . .
3.1.5 Funo Disjuno . . . . . . . . . . . . . . . . . . . . . . .
3.1.6 Princpio da Dualidade . . . . . . . . . . . . . . . . . . .
3.1.7 Prioridade na Execuo de Operaes . . . . . . . . . . .
3.1.8 Teoremas Envolvendo Conjuno e Disjuno . . . . . .
3.1.9 Definio Formal de lgebra de Boole . . . . . . . . . . .
3.1.10 Funes NAND e NOR . . . . . . . . . . . . . . . . . . . .
3.1.11 Funo XOR . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.12 Funes de  Variveis . . . . . . . . . . . . . . . . . . . .
3.1.13 Manipulao de Expresses Lgicas . . . . . . . . . . . .
3.2 Representao de Funes Lgicas . . . . . . . . . . . . . . . . .
3.2.1 Forma Cannica Normal Disjuntiva . . . . . . . . . . . .
3.2.2 Forma Cannica Normal Conjuntiva . . . . . . . . . . . .
3.2.3 Representao de Funes Usando um s Tipo de Funo
i

5
5
6
7
11
14
14
16
16
18
18
19
21
25
27
27
28
29
30
30
31
33
33
34
36
37
38
39
40
43
45
47
49

CONTEDO

ii
3.3

Minimizao de Expresses Lgicas . . . . . . . . . . . . . . . .


3.3.1 Mtodo de Karnaugh . . . . . . . . . . . . . . . . . . . . .
3.3.2 Mtodo de Quine-McCluskey . . . . . . . . . . . . . . . .

4 Realizao Fsica de Circuitos Lgicos


4.1 Famlias lgicas . . . . . . . . . . . . .
4.1.1 Portas bsicas . . . . . . . . . .
4.1.2 Elementos de alta impedncia
4.1.3 Interligaes e barramentos . .
4.2 Realizao directa . . . . . . . . . . . .
4.2.1 ROM . . . . . . . . . . . . . . .
4.2.2 PLA . . . . . . . . . . . . . . . .
4.3 Dispositivos programveis . . . . . . .
4.4 Projecto assistido de circuitos lgicos .
4.4.1 Editor de esquemticos . . . .
4.4.2 Simulao . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

52
53
71
83
83
83
83
83
83
83
83
83
83
83
83

5 Mdulos Combinatrios de Mdia Complexidade


5.1 Descodificadores . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.1 Descodificadores binrios . . . . . . . . . . . . . . . . . .
5.1.2 Interligao de descodificadores . . . . . . . . . . . . . .
5.1.3 Realizao de descodificadores . . . . . . . . . . . . . . .
5.2 Codificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2.1 Codificadores binrios . . . . . . . . . . . . . . . . . . . .
5.2.2 Codificadores com prioridade . . . . . . . . . . . . . . . .
5.2.3 Realizao de codificadores . . . . . . . . . . . . . . . . .
5.3 Multiplexadores . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3.1 Tipos de multiplexadores . . . . . . . . . . . . . . . . . .
5.3.2 Interligao de multiplexadores . . . . . . . . . . . . . .
5.3.3 Aplicaes de multiplexadores . . . . . . . . . . . . . . .
5.3.4 Realizao de multiplexadores . . . . . . . . . . . . . . .
5.4 Realizao de funes lgicas com mdulos de mdia complexidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4.1 Realizaes com descodificadores . . . . . . . . . . . . .
5.4.2 Realizaes com multiplexadores . . . . . . . . . . . . . .
5.4.3 Outras realizaes . . . . . . . . . . . . . . . . . . . . . .

85
86
86
86
86
86
86
86
86
86
86
86
86
86

6 Circuitos aritmticos
6.1 Somadores . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1 Semi-somador de um bit . . . . . . . . . . . . . .
6.1.2 Somador de um bit . . . . . . . . . . . . . . . . .
6.1.3 Interligao em cadeia de somadores de um bit
6.1.4 Subtraco usando somadores . . . . . . . . . .
6.1.5 Somadores rpidos . . . . . . . . . . . . . . . . .
6.2 Nmeros com sinal . . . . . . . . . . . . . . . . . . . . .
6.2.1 Codificao . . . . . . . . . . . . . . . . . . . . .
6.2.2 Operaes com nmeros com sinal . . . . . . . .
6.3 Multiplicadores e Divisores . . . . . . . . . . . . . . . .
6.4 Representaes em vrgula fixa . . . . . . . . . . . . . .
6.4.1 Operaes em vrgula fixa . . . . . . . . . . . . .

87
88
88
88
88
88
88
88
88
88
88
88
88

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

86
86
86
86

CONTEDO

6.5

iii

6.4.2 Operaes em vrgula fixa usando unidades inteiras .


6.4.3 Limitaes da representao em vrgula fixa . . . . .
Representaes em vrgula flutuante . . . . . . . . . . . . . .
6.5.1 Mantissa e expoente . . . . . . . . . . . . . . . . . . .
6.5.2 Mtodos de representao . . . . . . . . . . . . . . . .
6.5.3 O standard IEEE-754 . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.

.
.
.
.
.
.

88
88
88
88
88
88

Circuitos Sequenciais
7.1 Comportamento Sequencial de Circuitos . . . . . . . . .
7.2 Bsculas Sensveis ao Nvel . . . . . . . . . . . . . . . .
7.2.1 Bscula SR . . . . . . . . . . . . . . . . . . . . . .

7.2.2 Realizao de Bsculas SR com Sinal de  
7.2.3 Bscula Tipo D . . . . . . . . . . . . . . . . . . .
7.3 Sinal de Relgio . . . . . . . . . . . . . . . . . . . . . . .
7.3.1 Circuitos Sequenciais Sncronos e Assncronos .
7.3.2 Caractersticas do Sinal de Relgio . . . . . . . .
7.4 Bsculas Actualizadas no Flanco do Relgio . . . . . . .
7.4.1 Tipos de Amostragem . . . . . . . . . . . . . . .
7.4.2 Tipos de Bsculas . . . . . . . . . . . . . . . . . .
7.4.3 Sinais de Controlo Imediato . . . . . . . . . . . .
7.5 Registos . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5.1 Registos Bsicos . . . . . . . . . . . . . . . . . . .
7.5.2 Registos de Deslocamento . . . . . . . . . . . . .
7.5.3 Contadores . . . . . . . . . . . . . . . . . . . . .
7.5.4 Mtodos de Interligao de Registos . . . . . . .
7.6 Memrias . . . . . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

89
90
91
91
93
95
96
97
97
98
98
101
104
105
106
106
106
106
110

Projecto de Circuitos Sequenciais


8.1 Descrio de circuitos sequenciais . . . . . . . . . .
8.1.1 Mquinas de Mealy e de Moore . . . . . . . .
8.1.2 Diagrama de estados . . . . . . . . . . . . . .
8.1.3 Fluxograma . . . . . . . . . . . . . . . . . . .
8.1.4 Tabelas de transio de estados . . . . . . . .
8.1.5 Reduo do nmero de estados . . . . . . . .
8.2 Sntese de circuitos sequenciais . . . . . . . . . . . .
8.2.1 1-bscula por estado . . . . . . . . . . . . . .
8.2.2 Codificao dos estados . . . . . . . . . . . .
8.3 Tcnicas de realizao de controladores . . . . . . .
8.3.1 Controladores realizados com lgica discreta
8.3.2 Controladores baseados em contadores . . .
8.3.3 Controladores micro-programados . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

111
111
111
111
111
111
111
111
111
111
111
111
111
111

Circuitos para Transferncia de Dados


9.1 Nveis de Abstraco . . . . . . . . . . . . . . . . . . . . .
9.2 Separao entre Circuito de Dados e Circuito de Controlo
9.2.1 Exemplo de Motivao . . . . . . . . . . . . . . . .
9.2.2 Unidade de Processamento . . . . . . . . . . . . .
9.2.3 Unidade de Controlo . . . . . . . . . . . . . . . . .
9.3 Linguagem de Descrio de Hardware . . . . . . . . . . .
9.3.1 Linguagem de Transferncia entre Registos . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

113
114
116
116
119
121
121
122

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

CONTEDO

iv
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

125
129
131
132
133
135
137
139
140

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

145
145
147
147
149
151
153
154

11 Conjuntos de Instrues
11.1 Linguagens de Programao . . . . . . . . . . . . . .
11.2 Instrues Assembly . . . . . . . . . . . . . . . . . . .
11.3 Especificao dos Operandos . . . . . . . . . . . . . .
11.3.1 Registos Internos . . . . . . . . . . . . . . . . .
11.3.2 Constantes Especificadas na Prpria Instruo
11.3.3 Memria e Portos de Entrada/Sada . . . . . .
11.3.4 Modos de Endereamento . . . . . . . . . . .
11.3.5 Utilizao de Pilhas . . . . . . . . . . . . . . .
11.4 Codificao das Instrues . . . . . . . . . . . . . . .
11.5 Controlo da Sequncia de Execuo . . . . . . . . . .
11.5.1 Instrues de Salto . . . . . . . . . . . . . . . .
11.5.2 Chamadas a Subrotinas . . . . . . . . . . . . .
11.5.3 Interrupes . . . . . . . . . . . . . . . . . . .
11.6 Conjunto de Instrues do Processador P3 . . . . . .
11.6.1 Instrues Aritmticas . . . . . . . . . . . . . .
11.6.2 Instrues Lgicas . . . . . . . . . . . . . . . .
11.6.3 Instrues de Deslocamento . . . . . . . . . . .
11.6.4 Instrues de Controlo . . . . . . . . . . . . .
11.6.5 Instrues de Transferncia de Dados . . . . .
11.6.6 Outras Instrues . . . . . . . . . . . . . . . . .
11.6.7 Exemplos de Utilizao . . . . . . . . . . . . .
11.7 Formato das Instrues do Processador P3 . . . . . .
11.7.1 Instrues sem Operandos . . . . . . . . . . .
11.7.2 Instrues com Um Operando . . . . . . . . .
11.7.3 Instrues com Dois Operandos . . . . . . . .
11.7.4 Instrues de Controlo . . . . . . . . . . . . . .
11.7.5 Exemplos de Codificao . . . . . . . . . . . .
11.8 Um Assembler para o Processador P3 . . . . . . . . . .
11.9 Programao em Linguagem Assembly . . . . . . . . .
11.9.1 Programao Estruturada em Assembly . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

155
155
158
160
160
161
161
162
164
166
169
169
172
173
175
176
178
179
180
182
182
183
184
185
186
187
187
188
189
192
193

9.4

9.3.2 Exemplo: Mximo Divisor Comum . . . . . .


Unidades Lgicas e Aritmticas . . . . . . . . . . . . .
9.4.1 Estrutura de uma ULA . . . . . . . . . . . . . .
9.4.2 Bits de Estado . . . . . . . . . . . . . . . . . . .
9.4.3 Unidade Aritmtica . . . . . . . . . . . . . . .
9.4.4 Unidade Lgica . . . . . . . . . . . . . . . . . .
9.4.5 Unidade de Deslocamento . . . . . . . . . . . .
9.4.6 Tabela de Controlo da ULA . . . . . . . . . . .
9.4.7 Exemplo Revisitado: Mximo Divisor Comum

10 Arquitectura de um Computador
10.1 Perspectiva Histrica . . . . . . . . . . . .
10.2 Tipos de Computadores . . . . . . . . . .
10.3 Organizao Interna de um Computador
10.4 Interaco com o Exterior . . . . . . . . .
10.5 Nveis de Abstraco de um Computador
10.6 Componentes de um Computador . . . .
10.7 Sumrio . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

CONTEDO

11.9.2 Exemplo de Programao em Assembly . . . . . . . . . .


12 Estrutura Interna de um Processador
12.1 Circuito de Dados . . . . . . . . . . . . . . . . .
12.1.1 Banco de Registos . . . . . . . . . . . . .
12.1.2 Unidade Lgica e Aritmtica . . . . . .
12.1.3 Registo de Instruo . . . . . . . . . . .
12.1.4 Registo de Estado . . . . . . . . . . . .
12.1.5 Barramentos de Interligao . . . . . . .
12.1.6 Controlo do Circuito de Dados . . . . .
12.2 Unidade de Controlo . . . . . . . . . . . . . . .
12.2.1 Formato das Micro-instrues . . . . . .
12.2.2 Micro-Sequenciador . . . . . . . . . . .
12.2.3 Teste de Condies . . . . . . . . . . . .
12.2.4 Unidade de Mapeamento . . . . . . . .
12.2.5 Controlo do Banco de Registos . . . . .
12.2.6 Circuito de Controlo . . . . . . . . . . .
12.3 Micro-Programao . . . . . . . . . . . . . . .
12.3.1 Carregamento do Registo de Instruo
12.3.2 Carregamento dos Operandos . . . . .
12.3.3 Execuo das Instrues . . . . . . . . .
12.3.4 Escrita do Resultado . . . . . . . . . . .
12.3.5 Teste de Interrupes . . . . . . . . . . .
12.3.6 Gerao do Micro-cdigo . . . . . . . .

193

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

201
202
203
204
205
205
206
206
208
209
211
213
215
218
220
221
222
223
226
227
228
229

13 Sistemas de Memria
13.1 Organizao de Sistemas de Memria . . . . . . . . . .
13.1.1 Planos de Memria . . . . . . . . . . . . . . . . .
13.1.2 Mapas de Memria . . . . . . . . . . . . . . . . .
13.1.3 Gerao dos Sinais de Controlo . . . . . . . . . .
13.2 Hierarquia de Memria . . . . . . . . . . . . . . . . . .
13.2.1 Caches . . . . . . . . . . . . . . . . . . . . . . . .
13.2.2 Memria Virtual . . . . . . . . . . . . . . . . . .
13.3 Organizao de Sistemas de Cache . . . . . . . . . . . .
13.3.1 Mapeamento de Dados em Caches . . . . . . . .
13.3.2 Blocos de Cache . . . . . . . . . . . . . . . . . . .
13.3.3 Polticas de Substituio . . . . . . . . . . . . . .
13.3.4 Polticas de Escrita . . . . . . . . . . . . . . . . .
13.3.5 Bits de Controlo . . . . . . . . . . . . . . . . . . .
13.4 Memria Virtual . . . . . . . . . . . . . . . . . . . . . .
13.4.1 Tabelas de Pginas . . . . . . . . . . . . . . . . .
13.4.2 Poltica de Substituio . . . . . . . . . . . . . .
13.4.3 Poltica de Escrita . . . . . . . . . . . . . . . . . .
13.4.4 Bits de Controlo . . . . . . . . . . . . . . . . . . .
13.4.5 Translation Lookaside Buffers . . . . . . . . . . . .
13.4.6 Interligao da Memria Virtual com as Caches

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

233
234
234
236
239
242
244
246
248
248
251
254
255
255
256
257
260
260
261
261
262

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

CONTEDO

14 Entradas, Sadas e Comunicaes


14.1 Arquitectura de Entradas/Sadas . . . . . . . . . . . . . . . . . .
14.1.1 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.1.2 Tipos de Endereamento dos Portos . . . . . . . . . . . .
14.2 Perifricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.2.1 Teclados . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.2.2 Monitores . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.2.3 Discos Magnticos . . . . . . . . . . . . . . . . . . . . . .
14.3 Comunicao Paralela . . . . . . . . . . . . . . . . . . . . . . . .
14.3.1 Interfaces sem Sincronizao . . . . . . . . . . . . . . . .
14.3.2 Protocolos de Sincronizao . . . . . . . . . . . . . . . . .
14.3.3 Interfaces Sncronas . . . . . . . . . . . . . . . . . . . . .
14.4 Comunicao Srie . . . . . . . . . . . . . . . . . . . . . . . . . .
14.4.1 Comunicao Assncrona . . . . . . . . . . . . . . . . . .
14.4.2 Comunicao Sncrona . . . . . . . . . . . . . . . . . . . .
14.5 Modos de Transferncia de Dados . . . . . . . . . . . . . . . . .
14.5.1 Transferncia Controlada por Programa . . . . . . . . . .
14.5.2 Transferncia Controlada por Interrupes . . . . . . . .
14.5.3 Acesso Directo Memria . . . . . . . . . . . . . . . . . .
14.5.4 Transferncia usando um Processador de Entrada/Sada

267
268
268
270
272
272
274
277
279
280
280
286
287
288
291
293
294
294
303
309

15 Tpicos Avanados de Arquitectura


15.1 Desempenho de micro-processadores . . . . . . . . . . . .
15.1.1 Factores limitativos do desempenho . . . . . . . . .
15.1.2 Explorao do paralelismo ao nvel de instruo . .
15.2 Computadores CISC e RISC . . . . . . . . . . . . . . . . . .
15.2.1 Simples e rpido vs. complexo e lento . . . . . . . .
15.2.2 Modos de endereamento . . . . . . . . . . . . . . .
15.2.3 Instrues . . . . . . . . . . . . . . . . . . . . . . . .
15.2.4 Conjunto de instrues para um processador RISC
15.3 Pipelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15.3.1 Processador RISC com pipeline . . . . . . . . . . . .
15.3.2 Conflitos de dados . . . . . . . . . . . . . . . . . . .
15.3.3 Conflitos de controlo . . . . . . . . . . . . . . . . . .
15.3.4 Resoluo de conflitos . . . . . . . . . . . . . . . . .
15.4 Tcnicas avanadas de explorao de paralelismo . . . . .
15.4.1 Processadores super-escalares . . . . . . . . . . . . .
15.4.2 Execuo especulativa . . . . . . . . . . . . . . . . .
15.4.3 Previso de saltos . . . . . . . . . . . . . . . . . . . .
15.4.4 Agendamento dinmico de instrues . . . . . . . .

311
312
312
312
312
312
312
312
312
312
312
312
312
312
312
312
312
312
312

Glossrio

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

313

112

CONTEDO

Captulo 9

Circuitos para Transferncia


de Dados
As tcnicas de projecto de circuitos digitais, combinatrios e sequenciais, apresentadas nos captulos anteriores permitem a realizao de sistemas de baixa
e mdia complexidade. O nvel de detalhe a que estas tcnicas so aplicadas
demasiado elevado para que possam ser usadas na concepo de circuitos
de grande dimenso. Assim, no projecto de sistemas com uma funcionalidade
mais complexa necessrio um nvel de abstraco mais elevado de forma a
esconder muitos detalhes e a tornar o problema manejvel.
Neste captulo descreve-se o projecto de sistemas digitais em termos de
duas componentes. Uma a Unidade de Processamento, tambm chamada
de circuito de dados (ou datapath, em ingls), que contm toda a lgica que faz
os clculos propriamente ditos bem como os registos onde os dados so guardados. A segunda a Unidade de Controlo que gere quais as operaes que a
unidade de processamento deve efectuar em cada ciclo de relgio.
Esta abordagem pressupe que uma complexidade de processamento mais
elevada requer em geral vrios ciclos de relgio para se completar. De facto,
operaes acima de um certo nvel de complexidade podem implicar um circuito lgico especfico com uma dimenso tal que tornaria incomportvel a
sua realizao na prtica. Estas operaes so assim divididas numa sequncia
de operaes mais simples, estas sim facilmente realizveis em hardware. A
unidade de processamento o circuito que disponibiliza estas operaes mais
simples e a unidade de controlo o circuito que as sequencia de forma a realizar a operao complexa. Para permitir descrever de maneira clara o algoritmo de realizao de operaes complexas em termos das operaes bsicas
da unidade de processamento, foram desenvolvidas linguagens de descrio
de hardware. Um exemplo simples deste tipo de linguagens apresentado na
Seco 9.3, a ser usada no resto deste livro.
Embora as unidades de processamento possam ser projectadas para um
fim especfico, em muitos casos opta-se por usar unidades que disponibilizam
um conjunto de operaes aritmticas e lgicas tpicas, chamadas Unidades
Aritmticas e Lgicas ou ULA (em ingls, Arithmetic and Logic Unit ou ALU).
Na Seco 9.4 descreve-se o exemplo de uma ULA, que ser usada no processador P3, estudado no Captulo 12.
113

114

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS

Mais Abstracto

Sistema

Menos Detalhe

Transferncia
entre Registos

Porta Lgica

Transistor

Mais Concreto

Layout

Mais Detalhe

Figura 9.1: Diferentes nveis de abstraco no projecto de sistemas lgicos complexos.

9.1 Nveis de Abstraco


A abordagem usada neste captulo para o projecto de circuitos corresponde a
subir o nvel de abstraco na descrio de circuitos lgicos. O projecto de sistemas complexos envolve diferentes nveis de abstraco, tendo o projecto incio
no mais abstracto, descendo-se sucessivamente para nveis mais concretos. A
abordagem por nveis de abstraco torna possvel o projecto de sistemas para
os quais uma abordagem directa seria demasiado complexa.
De forma a dar uma ideia geral deste processo e um melhor contexto para
os mtodos de projecto apresentados neste livro, descrevem-se em seguida os
diferentes nveis de abstraco tipicamente considerados no projecto de circuitos lgicos complexos. A Figura 9.1 representa estes nveis de abstraco
ordenados de cima para baixo dos nveis mais abstractos para os nveis mais
concretos. Dito de outra forma, nesta ordenao o grau de detalhe na descrio
do sistema aumenta de cima para baixo.
O projecto tem incio ao nvel de sistema onde so feitas anlises globais,
mas muito gerais, sobre o projecto, nomeadamente sobre o nmero de subsistemas em que o sistema se deve dividir, qual o tipo de sub-sistemas e a
sua forma de interligao. Termina ao nvel de layout onde se vai a um grau
de detalhe em que fica definido o caminho de cada interligao do circuito
elctrico, permitindo portanto a sua fabricao.
Em cada nvel de abstraco, a anlise feita individualmente sobre mdulos criados no nvel imediatamente acima. Assim, o projecto sucessivamente
dividido em mdulos mais pequenos, o que permite ir aumentando o nvel
de detalhe, mantendo-o sempre como um problema gervel em cada nvel.
este processo de dividir para conquistar que faz o sucesso deste conceito de
nveis de abstraco.
Por outro lado, num dado nvel de abstraco possvel desenvolver o projecto sem necessitar de informao sobre nveis inferiores. Esta caracterstica

9.1. NVEIS DE ABSTRACO

115

esconde os detalhes de implementao, permitindo que o projectista se concentre em conseguir a melhor soluo possvel a esse nvel.
At ao captulo anterior, toda a anlise se debruou sobre circuitos descritos
ao nvel da porta lgica. Este o nvel de abstraco intermdio, como se pode
observar na hierarquia da Figura 9.1. Referiu-se atrs que a realizao de portas
lgicas feita com o uso de transistores que, como se pode ver na figura,
um nvel de abstraco imediatamente abaixo. No entanto, para a definio
das tcnicas de projecto apresentadas, nunca foi necessrio saber em concreto
como que as portas lgicas iriam ser realizadas em termos de transistores.
Aps obtida uma especificao ao nvel de portas lgicas, o passo seguinte
convert-las para transistores e fazer as ligaes elctricas. Para uma dada tecnologia de fabrico de circuitos, a cada porta lgica corresponde um esquema
elctrico de interligao de transistores. No entanto, para alm deste mapeamento necessrio fazer o dimensionamento dos transistores de maneira a
garantir, por exemplo, determinados tempos de atraso e consumos de potncia.
Embora se possam realizar sistemas digitais com elementos discretos,
cada vez mais comum que a realizao dos sistemas digitais seja em termos
de circuito integrado. Neste caso, o passo final converter esta descrio a nvel de transistor, que no fundo uma descrio de um circuito elctrico, para
mscaras que so usadas directamente no fabrico de circuitos integrados, a que
se chama nvel de layout. Estas mscaras definem linhas por onde passam certo
tipos de elementos que constituem o circuito final. Por exemplo, as interliges
so normalmente realizadas por linhas de metal, podendo existir vrias camadas destas linhas e correspondendo a cada camada uma mscara. No caso da
tecnologia CMOS, os transistores so formados pelo cruzamento de uma linha de polisilcio por outra de dopagem de substracto, correspondendo a mais
duas mscaras diferentes. Tipicamente, na passagem do nvel de transistor
para o nvel de layout, o objectivo escolher o caminho de cada linha de forma
minimizar a rea total ocupada pelo circuito. Estes dois nveis de abstraco,
assim como o nvel de sistema, saem fora do mbito deste livro e portanto no
sero discutidos.
Neste captulo apresenta-se o nvel de transferncia entre registos, nvel
imediatamente acima do nvel de porta lgica. De acordo com a filosofia dos
nveis de abstraco, usam-se mdulos de complexidade mais elevada, mas
sem detalhar a forma como so construdos. Por exemplo, so utilizados directamente somadores sem haver a preocupao de como esses somadores sero
realizados em termos de portas lgicas.
De referir que, para a maior parte das operaes de projecto e optimizao
a cada nvel de abstraco, o projectista pode recorrer a ferramentas de sntese
de circuitos. A partir de uma descrio do circuito a um dado nvel, estas
ferramentas geram automaticamente o circuito correspondente num nvel de
abstraco mais baixo, optimizando-o tendo em conta um conjunto de parmetros que o projectista pode especificar. A rea de investigao de algoritmos de
sntese lgica uma rea de intensa actividade, mas este tambm um tema
que sai fora do mbito deste livro.

116

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS

Entradas de
Controlo
Sadas de
Controlo

Palavra de
Controlo
Unidade de
Controlo
Bits de
Estado (flags)

Unidade de
Processamento

Resultados

Operandos

Figura 9.2: Estrutura de um sistema digital em termos de unidade de processamento e de unidade de controlo.

9.2 Separao entre Circuito de Dados e Circuito de


Controlo
Um sistema digital pode ser construdo de raiz usando bsculas e portas lgicas discretas usando as tcnicas de projecto de circuitos sncronos apresentadas
nos captulos anteriores. Porm, como discutido na seco prvia, esta aproximao tem grandes limitaes. Por exemplo, qualquer dos mtodos de gerao
de circuitos combinatrios descritos na Seco 3.3 impraticvel quando o nmero de variveis de entrada elevado.
Os sistemas digitais so, assim, normalmente estruturados em duas unidades principais, a Unidade de Processamento e a Unidade de Controlo, conforme
est ilustrado na Figura 9.2. A unidade de processamento constituda por pequenos mdulos interligados para armazenar e processar a informao til do
sistema. Como indicado na figura, recebe as entradas a processar, ou seja, os
operandos ou dados do exterior e calcula o resultado. A unidade de controlo
responsvel por gerar os sinais de controlo que sequenciam as operaes bsicas da unidade de processamento de forma a que o sistema realize operaes
complexas. Ao conjunto de sinais de controlo que saem da unidade de controlo
para a unidade de processamento chama-se palavra de controlo. A sequncia de
sinais de controlo gerada pela unidade de controlo pode depender dos resultados dos clculos efectuados pela unidade de processamento. Esta informao
fornecida unidade de controlo por bits de estado ou flags, cujo funcionamento
ser discutido mais frente. A unidade de controlo pode tambm receber informao directamente do exterior, como por exemplo, um sinal externo que
indica quando dar incio operao ou qual a operao a realizar. Em geral,
existiro sadas de controlo para indicar para o exterior o estado da computao, como por exemplo, um sinal que indica o fim da operao.
Naturalmente, entre os ciclos de relgio necessrios ao processamento de
uma operao complexa ter-se- que guardar valores temporrios de clculos intermdios. Estes so guardados em registos, disponveis na unidade de
processamento. As formas de interligao de registos e mdulos de processamento foram apresentadas na Seco 7.5.4.

9.2.1 Exemplo de Motivao


Para ilustrar este processo de separao de uma operao complexa numa
sequncia de operaes mais simples, considere-se o caso de uma multipli-

9.2. SEPARAO ENTRE CIRCUITO DE DADOS E CIRCUITO DE CONTROLO117


LD

LD

LD
Dec

Zero

LD

LD
Reset

LD

P
(a)

(b)

Figura 9.3: Circuitos multiplicadores: (a) bloco combinatrio; (b) somas sucessivas.

cao. Na Seco 6.3 discutiu-se a realizao lgica de multiplicadores, nomeadamente o facto de serem mdulos complexos que requerem muito hardware.
Na Figura 9.3(a) apresentada a realizao directa para uma operao de
multiplicao P=A B. Uma alternativa trivial a este circuito realizar esta multiplicao atravs de somas sucessivas, somando A vezes o valor de B, conforme Figura 9.3(b). Assim, em vez de um mdulo multiplicador ser necessrio apenas um somador, mdulo significativamente mais simples. Para este
exemplo, o circuito da Figura 9.3(b) funciona como a sua unidade de processamento.
O preo a pagar pela simplificao do hardware do circuito a necessidade
de um mdulo adicional de controlo capaz de realizar a seguinte sequncia de
operaes:
1. colocar registo P a zero.
2. carregar em P a soma de P com B.
3. decrementar o registo A.
4. se o registo A no chegou a zero, voltar para 2.
Para facilitar estas operaes, os registos utilizados tm algumas funcionalidades adicionais. Assim, o registo A de facto um contador, com uma entrada de
 
 
controlo
para fazer a sua decrementao e uma sada de estado 
que
fica activa quando este registo contm o valor 0. Por seu lado, o registo P tem
 
um sinal de controlo 
que permite coloc-lo a zero.
Tendo disponveis estes sinais de controlo, a unidade de controlo ser um
circuito sequencial que gera a sequncia de sinais para realizar o algoritmo
apresentado atrs. Na Figura 9.4 apresenta-se este algoritmo sob a forma
  de
um fluxograma, ao qual foram adicionados dois sinais. A entrada  serve
para indicar quando se deve dar incio operao. A sada
indica quando
a operao terminou. Este sinal til porque o nmero de ciclos de relgio
necessrios para esta operao no fixo. Para cada operao de multiplicao

118

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS

0
inicio
1

Reset P

Load P

Dec A

0
Zero A
1

fim

Figura 9.4: Fluxograma que descreve a unidade de controlo para a operao de


multiplicao por somas sucessivas.
o tempo de processamento determinado pelo valor inicial de A e portanto
importante que o sistema possa dar esta indicao para o exterior.
descrio da Figura 9.4 possvel aplicar qualquer das tcnicas de projecto de circuitos sequenciais apresentadas no Captulo 8.3. Nas seces seguintes, apresenta-se uma linguagem de descrio que permite descrever as
operaes bsicas da unidade de processamento, facilitando a composio de
um circuito sequencial que realize a operao complexa desejada.
Este exemplo ilustra como se pode reduzir a complexidade do circuito a
implementar, traduzindo operaes complexas numa sequncia de operaes
mais simples. Existe assim um compromisso que o projectista pode explorar
entre a complexidade da unidade de processamento a implementar e o tempo
(em termos de ciclos de relgio) que a operao demora a realizar. Em geral,
quanto mais simples as operaes disponveis menor o hardware necessrio
na unidade de processamento, mas maior a sequncia de operaes, correspondendo portanto a um tempo total de execuo maior.
O exemplo aqui apresentado simplesmente ilustrativo. Embora na prtica se evitem de facto os mdulos multiplicadores combinatrios devido
sua complexidade, existem mtodos sequenciais mais eficientes do que o aqui
apresentado. Alm disso, este exemplo discute duas alternativas possveis,
uma combinatria, outra sequencial. Em muitos casos, as operaes so de tal
modo complexas que a alternativa de um mdulo combinatrio puro est
partida fora de causa.

9.2. SEPARAO ENTRE CIRCUITO DE DADOS E CIRCUITO DE CONTROLO119


A

Figura
9.5: Unidade de processamento para realizar a operao

.

   

9.2.2 Unidade de Processamento


As unidades de processamento so tipicamente construdas usando os mdulos combinatrios de mdia complexidade estudados nos Captulos 5 e 6 e
registos estudados no Captulo 7.5. Sobre a informao contida nos registos
podem ser realizadas operaes cujo resultado pode ser guardado no mesmo
registo, noutro registo ou mesmo numa posio de memria. Por exemplo, se
se pretender um sistema para uma funcionalidade especfica como o clculo
de D=(A+B) C, uma possvel unidade de processamento seria simplesmente
a indicada na Figura 9.5. Pela forma como o circuito da Figura 9.5 est desenhado, todos os ciclos de relgio o registo D actualizado com o valor (A+B) C,
em que os valores de A, B e C so os destes registos no incio de cada ciclo de
relgio.
Existe alguma liberdade na construo da unidade de processamento. Em
primeiro lugar, o projectista tem ao seu dispr um conjunto de mdulos, sejam eles aritmticos, lgicos ou outros, pelos quais poder optar dependendo
da operao a realizar. Poder ainda construir mdulos novos e especficos
usando as tcnicas de projecto do Captulo 3. No exemplo anterior, assumiuse que estavam disponveis mdulos somadores, mdulos multiplicadores e
registos.
Em segundo lugar, em muitos casos possvel fazer compromissos entre a
complexidade da unidade de processamento e a complexidade da unidade de
controlo, tentando-se arranjar um equilbrio entre a quantidade de hardware
necessrio para o circuito e o desempenho deste. Concretizando para o exemplo anterior, para poupar hardware, em vez de se usar um mdulo multiplicador, poder-se-ia optar por realizar a multiplicao por somas sucessivas, como
discutido na seco anterior. Para isto seria necessrio um registo temporrio
onde se somaria  vezes o valor do registo C, sendo  o valor do resultado A+B.
A desvantagem bvia que a operao que antes se realizava num nico ciclo
de relgio agora necessita de  ciclos para a multiplicao, mais um ciclo para
a soma original. A complexidade da unidade de controlo aumenta pois agora
tem que controlar o nmero de vezes que a soma da multiplicao se efectua.
Outro ponto a considerar no projecto de uma unidade de processamento

120

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS


A

Figura 9.6: Reduo do perodo de relgio


      para a unidade de processamento
que realiza a operao
.
est relacionado com a frequncia mxima permitida para o sinal de relgio.
Como referido na Seco 8.3, para o correcto funcionamento do sistema, o perodo de relgio ter que ser sempre superior ao maior atraso na lgica entre 2 registos da unidade de processamento. Para o exemplo da Figura 9.5,
         
  
. Portanto, mesmo que existam operaes muito
simples no sistema, esta ser sempre a granularidade mnima de durao de
uma operao. Para reduzir esta granularidade, os mdulos podem ser intercalados com registos, como ilustrado na Figura 9.6 onde o registo T guarda
temporariamente o resultado da soma. Neste caso, a operao D=(A+B) C demora 2 ciclos de relgio, um para calcular a soma T=A+B e outro para calcu  
lar amultiplicao
D=T
C, mas 

o ciclo
de relgio foi reduzido para















 
. De sublinhar que esta optimizao
pode ter um impacto enorme no desempenho do sistema pois esta reduo de
ciclo de relgio tem influncia em todas as operaes simples do sistema.
Uma vez escolhidos os mdulos para a unidade de processamento, ficam
definidas quais as operaes que podem ser realizadas sobre a informao armazenada nos registos a cada ciclo de relgio. Estas operaes so chamadas
de micro-operaes e estas definem os pontos de controlo para a unidade de controlo.
Apresenta-se mais frente neste captulo um exemplo de uma unidade de
processamento construda para um fim especfico (Seco 9.3.2). No entanto,
podem-se contruir unidades de processamento para as quais no esteja definida partida uma aplicao em particular, como o caso das unidades de
processamento de computadores. Para estas situaes, define-se um conjunto
de micro-operaes suficientemente genrico e poderoso para acomodar eficientemente um conjunto grande de funcionalidades. A estas unidades de processamento d-se o nome de Unidade Lgica e Aritmtica ou ULA (em ingls, Arithmetic and Logic Unit ou ALU). No final deste captulo exemplifica-se
a construo de uma unidade de processamento deste tipo.

9.3. LINGUAGEM DE DESCRIO DE HARDWARE

121

9.2.3 Unidade de Controlo


A unidade de controlo responsvel por definir quais as micro-operaes que
so executadas na unidade de processamento em cada ciclo de relgio. Estas
micro-operaes so definidas atravs de um conjunto de sinais de controlo
aceites pela unidade de processamento, a cujo conjunto se chama palavra de
controlo. As unidades de controlo tm dois tipos de entradas. Por um lado
tm entradas externas que controlam o funcionamento global do sistema. Por
outro lado, tm entradas provenientes da unidade de processamento, os bits
de estado. A partir destes, a unidade de controlo tem informao acerca do
resultado de uma dada operao, podendo desencadear diferentes operaes
com base nesta informao.
Pegando novamente no exemplo da Seco 9.2.1, como se pode observar
pelo fluxograma da unidade de controlo apresentado na Figura 9.4, esta unidade tem duas entradas, uma entrada de controlo
externa e um bit de estado

da unidade de processamento. O sinal  uma entrada
 de controlo que
indica quando se deve iniciar um novo clculo. O sinal 
uma entrada
proveniente da unidade de processamento que informa a unidade de controlo
do resultado da operao anterior, permitindo a esta decidir qual a aco a
tomar.
Para alm das sadas que formam a palavra de controlo, as unidades de
controlo podem tambm ter sadas de controlo que comunicam com entidades
externas indicando o estado do sistema. Um exemplo deste tipo de sadas o

da Figura 9.4. Neste caso, como o tempo de clculo no fixo, mas sim
dependente dos valores dos operandos, necessrio que o sistema informe o
exterior acerca do estado do clculo, nomeadamente, se este j terminou ou
no.
Estando definida a unidade de processamento, o projectista tem que definir a sequncia de micro-operaes necessrias para realizar a funcionalidade
pretendida para o sistema. O projecto da unidade de controlo no mais do
que o projecto de um circuito sequencial, como estudado no Captulo 8. Embora a sua realizao possa ser feita usando qualquer das tcnicas apresentadas
nesse captulo, o nmero de entradas (bits de estado e entradas de controlo) e
sadas (largura da palavra de controlo e sadas de controlo) em geral muito
elevado, levando a que as tcnicas mais comuns usadas no projecto de unidades de controlo assentem em controladores micro-programados, estudados na
Seco 8.3.3.

9.3 Linguagem de Descrio de Hardware


A especificao de sistemas mais complexos necessita de uma linguagem de
descrio com um nvel de abstraco mais elevado do que as funes booleanas ou os diagramas de estado de forma a esconder os detalhes do sistema e
assim permitir descries sucintas. Estas linguagens chamam-se linguagens de
descrio de hardware.
Embora o nvel de abstraco possa variar, em geral esta descrio feita
ao nvel de transferncia entre registos, em que o projectista define quais as
micro-operaes efectuadas entre registos em cada ciclo de relgio. A forma
como as micro-operaes so realizadas em termos de portas lgicas no de-

122

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS

R1

R2

Figura 9.7: Circuito lgico correspondente instruo  

.

finida na descrio do sistema, pressupondo-se a criao de uma unidade de


processamento que permita executar essas micro-operaes.
Existem vrios formatos possveis para as linguagens de descrio de hardware. A linguagem adoptada neste livro e descrita em seguida muito simples
e permite apenas especificar as micro-operaes que o sistema deve realizar.
Outras linguagens, como VHDL e Verilog, tm um nvel de descrio igual ao
de uma linguagem de programao usual, mas com a diferena fundamental
de terem que acomodar o facto do hardware ser intrinsecamente concorrente.
Para isso, as linguagens de descrio de hardware definem blocos de cdigo
que descrevem uma operao e portanto so sequenciais, mas os diferentes
blocos funcionam em paralelo.

9.3.1 Linguagem de Transferncia entre Registos


Define-se nesta seco a linguagem simples de descrio de hardware a nvel de transferncia entre registos a ser usada nos captulos seguintes. Nesta
linguagem, a especificao de um sistema digital conseguida atravs de um
conjunto de micro-operaes que definem a funcionalidade pretendida.
A transferncia de informao de um registo para outro, ou mais exactamente a replicao dessa informao, designada em forma simblica pela
instruo:
 

que significa R2 recebe o contedo de R1. O valor guardado em R1 no


alterado. Em termos de circuito lgico, a instruo anterior corresponde Figura 9.7.
Se para alm desta micro-operao simples de transferncia houver algum
processamento, isso explicitado, por exemplo:



 

  

ou
A primeira destas instrues ser realizada pelo circuito lgico da Figura 9.8.
Quando se do duas transferncias em simultneo, podem-se agrupar micro-operaes separando-as por vrgulas:





O circuito lgico correspondente o da Figura 9.9.


Para alm de registos, os operandos das micro-operaes podero ser tambm valores constantes ou referncias a posies de memria. A indicao
de uma posio de memria feita usando M[endereo], em que endereo

9.3. LINGUAGEM DE DESCRIO DE HARDWARE

R5

n
+

R2

123

R1

Figura 9.8: Circuito lgico correspondente instruo   

R6

R3

n
x

R4

.

R2

2n

R9

Figura 9.9: Circuito lgico correspondente instruo


 
.

,

poder por seu lado ser um valor constante ou um registo. Exemplos possveis
de micro-operaes sero:


   

  

   

Pela forma como esto expressas, as micro-operaes apresentadas at aqui


ocorrem em todos os ciclos de relgio. Num sistema digital no se pretende
normalmente que uma transferncia, com ou sem processamento, ocorra sempre que surge um impulso de relgio. Para indicar que uma certa operao s
deve ocorrer na presena de certas condies, usa-se o formato condio: microoperao. Por exemplo, uma instruo como
 

 

tem uma traduo num circuito lgico como o da Figura 9.10. Para haver ape
nas uma transferncia, a linha
tem que permanecer a 1 apenas durante uma
transio ascendente do sinal de relgio. Um exemplo de uma situao deste
tipo
 est ilustrada na Figura 9.11, onde a transferncia se d apenas no instante
.
A condio de activao da micro-operao pode ser uma expresso lgica


genrica. Por exemplo,

 

124

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS


K1
LD

R1

R2

Figura 9.10: Circuito lgico correspondente instruo



 

.

Clk
K1
t

Figura 9.11: Diagrama temporal que garante uma transferncia nica de R1


para R2.
significa que a cada ciclo
de
relgio apenas se transfere o contedo de R0 para
R5 se ambos os sinais e estiverem a 1.
Por vezes til trabalhar no com todos os bits guardados num registo,
mas apenas com um subconjunto dos seus bits. Para indicar que uma microoperao apenas se aplica a parte dos bits de um registo, a seguir ao nome do
registo indica-se entre parntesis quais os bits envolvidos. Por exemplo, se se
prentender trabalhar apenas com o bit 5 de um registo R2, isso seria indicado
por R2(5). Para uma gama de bits, a representao a seguinte:



que neste caso indica que o octeto menos significativo de R6 copiado para o
octeto mais significativo de R3. Naturalmente, ter que haver o cuidado de ser
consistente no nmero de bits envolvidos numa micro-operao.
Por outro lado, pode ser necessrio fazer a concatenao de vrios registos
para uma dada operao, o que indicado pelo operador |. Por exemplo,



significa que o resultado da multiplicao de R3 por R2, cujo resultado, como


referido anteriormente, precisa do dobro dos bits dos operandos, ficar guardado em dois registos, R7 e R6, em que R7 tem a parte mais significativa e R6
a menos significativa.
Com esta linguagem simples possvel descrever unidades de processamento com uma complexidade arbitrria. Esta descrio indica quais as microoperaes que podem ser executadas na unidade de processamento e sob que
condies elas ocorrem. Dada esta descrio, o projectista pode desenhar a
unidade de controlo que gera a sequncia de sinais de controlo para realizar a
operao pretendida.
De notar que esta linguagem no define completamente a implementao
do sistema. Muitas vezes existe alguma liberdade de escolha pois possvel
considerar diferentes circuitos que realizam uma mesma funcionalidade. Por

9.3. LINGUAGEM DE DESCRIO DE HARDWARE


R2

R1

T1
T2

T1

125

OE

OE

R2

LD

T2

R1

0
1
Sel MUX

LD

R0

(a)

R0

(b)

Figura 9.12: Circuitos equivalentes para realizar uma transferncia de duas


fontes possveis.
Maior_Divisor_Comum(X, Y)
1. enquanto (Y 0){
2.
se X  Y
3.
ento X=X-Y
4.
se no, troca X com Y
5. }
6. resultado em X

Figura 9.13: Pseudo-cdigo do algoritmo para o clculo do mximo divisor


comum.
exemplo, considere-se o caso comum de um registo que pode ser carregado a
partir de uma de duas fontes:











Como discutido na Seco 7.5.4, estes registos podem estar ligados atravs de
multiplexadores ou atravs de barramentos. Estas duas situaes tm a representao em termos de circuito lgico indicada nas Figuras 9.12(a) e 9.12(b),
respectivamente. Notar que no caso do barramento se usa menos hardware,

mas h que ter o cuidado de garantir que os sinais
e  nunca esto activos
em simultneo.

9.3.2 Exemplo: Mximo Divisor Comum


De forma a ilustrar os conceitos apresentados atrs, desenvolve-se nesta seco
um exemplo completo. Considere-se que se pretende projectar um sistema
para calcular o mximo divisor comum de dois nmeros inteiros positivos de
 bits. Um algoritmo conhecido para realizar esta operao est indicado em
pseudo-cdigo na Figura 9.13.
Por palavras, neste algoritmo subtrai-se sucessivamente o menor dos nmeros ao maior at que o resultado desta subtraco seja 0. Quando isso acontece,
o algoritmo termina e o resultado o valor final do outro operando. No

126

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS

T0
fim

0
inicio
1

Ry=0

T1

0
0

Rx

Ry,Ry

Rx

Rx>=Ry

Rx

Rx-Ry

Figura 9.14: Fluxograma do algoritmo para o mximo divisor comum.


um algoritmo muito eficiente pois, por vezes, demora muito a terminar, mas
simples de realizar.

e
Assume-se que na especificao do sistema se indica que os operandos
se encontram inicialmente guardados em dois registos, designados por Rx e
Ry. Alm disso, essa especificao indica que existem dois sinais de controlo,

um sinal de entrada  para indicar que os registos Rx e Ry foram carregados com os operandos e que se deve dar incio ao clculo do maior divisor
comum entre eles, um sinal de sada
que assinala
  o fim deste clculo. Para
um funcionamento correcto do sistema, o sinal  e os registos Rx e Ry s
devem ser alterados do exterior quando o sinal
estiver activo.
Tendo em conta estas especificaes, o algoritmo da Figura 9.13 pode ser
apresentado sob a forma de fluxograma, como o apresentado na Figura 9.14. O
representa um estado de espera, onde nada acontece at que seja
estado

accionado o sinal    . Neste estado a sada de controlo
est activa.
Quando a entrada  vai a 1, o sistema avana para o estado , onde todo
o processamento realizado. O sistema mantm-se neste estado enquanto Ry
no chegar a zero, situao em que terminou o clculo, regressando o sistema a

. Enquanto em , em cada ciclo os valores relativos de Rx e Ry so testados
e, de acordo com este teste, ou se trocam os valores destes ou se subtrai Ry a
Rx. Neste fluxograma os registos Rx e Ry esto a ser re-utilizados durante a
operao uma vez que a cada ciclo de relgio no h novos valores a serem
criados que necessitem de novos registos.
Neste ponto necessrio decidir a funcionalidade da unidade de processamento, ou seja, quais as micro-operaes que estaro disponveis. Para este
exemplo, as micro-operaes necessrias so simples, optando-se por inclu-las
na unidade de processamento. Em geral, no entanto, poder no ser este o caso,
quer pela complexidade das operaes quer por se estar a usar uma unidade
de processamento predefinida. Nesse caso ter-se- que subdividir as operaes

9.3. LINGUAGEM DE DESCRIO DE HARDWARE


1.
2.
3.
4.
5.
6.



 :

 :

 :
 


:


 


 


 
 ,

 
 ,

Rx  Rx Ry
Rx  Ry, Ry 






127


,


Rx

Figura 9.15: Descrio a nvel de transferncia entre registos do algoritmo para


o clculo do mximo divisor comum.
em sub-operaes mais simples que j sejam suportadas por micro-operaes
da unidade de processamento. Esta situao estudada na Seco 9.4.7.
Por observao do fluxograma da Figura 9.14, as operaes necessrias so
apenas a transferncia de valores entre registos e uma subtraco. Estas indi

cam a necessidade de registos com sinal de controlo load, 
e  , e um
subtractor.

Alm das operaes, h trs condies a serem testadas:  a 1, para o
que no necessrio hardware especfico; o valor do registo Ry ter chegado a
0; o valor Rx ser maior do que o valor de Ry. Para a segunda destas condies,
pode-se assumir a existncia de um comparador com a constante 0, o que
realizado atravs de uma porta NOR de  entradas, onde esto ligados todos
os bits sada de Ry. O mais usual utilizar para Ry um registo que inclui j

esta porta NOR e portanto com uma sada de controlo,  , que indica quando o
valor l guardado zero. Para a terceira condio necessrio um comparador

normal, ligado a Rx e Ry, e a cujo sinal de sada se atribuiu o nome
.
Tendo em conta a funcionalidade da unidade de processamento, o fluxograma da Figura 9.14 pode ser traduzido em linguagem de transferncia entre

registos como indicado na Figura 9.15. Nesta figura, os sinais
e
controlam a sequncia de execuo das restantes micro-operaes e portanto sero
gerados pela unidade de controlo.
Como referido na seco anterior, a cada ciclo de relgio qualquer das microoperaes das linhas da Figura 9.15 pode ocorrer. O que define quais as que
de facto ocorrem so as condies indicadas na linha. Neste exemplo, para um
funcionamento
correcto, apenas um dos sinais da unidade de controlo,
e

, estar activo. Com
=1, apenas as operaes das linhas 2 e 3 podero

ocorrer. Com
=1, podero ocorrer as das trs ltimas linhas. No entanto,


fcil ver que as condies destas trs linhas, geradas pelos sinais  e
, so
disjuntas, pelo que de facto apenas as micro-operaes de uma das trs ltimas
linhas da Figura 9.15 podem ocorrer em cada ciclo de relgio.
Examinando linha a linha este cdigo, pode-se observar que na linha 1 os


so gerados em todos os ciclos de relgio. A linha 2
sinais de teste  e
indica que o sinal
se mantm activo no estado . A linha 3 s ocorre se o

sistema estiver no
estado
e o sinal de  ficar activo, passando o controlo


para o estado . Portanto, com o sistema no estado
e a linha  desactiva, o sistema mantm-se indefinidamente neste estado e nada mais acontece.
A linha 4 corresponde ao oposto, que detectar que o registo Ry chegou a zero
e que portanto o clculo terminou. A aco correspondente passar para o
estado , que por sua vez ir activar a sada
. As linhas 5e 6 podero ser
activadas durante o decorrer do clculo, em que o estado
. A linha 5 fica

128

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS

1
Sel

MUX
n

LDx

LD

LDy

Rx

LD

Ry

Zy

n
n
A

A>=B

A-B
n

xMy

Figura 9.16: Unidade de processamento para o mximo divisor comum.



activa quando Rx Ry, subtraindo-se Ry a Rx. A linha 6 fica activa quando
Rx Ry, activando-se a troca dos valores de Ry e Rx.
Traduzindo para circuito lgico a descrio a nvel de transferncia entre registos da Figura 9.15, apresenta-se na Figura 9.16 a unidade de processamento


para este problema. Os sinais 
e
formam a palavra de controlo da
unidade de controlo, indicando em que ciclos de relgio os registos so actua

lizados. Os sinais  e
so os bits de estado da unidade de processamento
e so entradas para a unidade de controlo. De notar que o controlo do multiplexador entrada do registo Rx feito directamente pela sada do comparador

pois o carregamento para este registo controlado pelo sinal 
. Enquanto

estiver inactivo no importa qual o valor que est entrada de Rx, e sem
pre que estiver activo a sada do multiplexador ser a correcta.
O controlo desta unidade de processamento est indicado na Figura 9.17 e
foi obtido a partir do fluxograma da Figura 9.14 por simples substituio das
operaes pelos sinais de controlo das micro-operaes correspondentes e dos

testes
pelos bits de estado.
Assim, o teste Ry=0 corresponde a testar se  =1 e


Rx Ry a testar se
  =1. Por seu lado, para a operao Rx  Rx Ry basta
activar o sinal de   do registo Rx, e para a operao
de troca de valores

entre os registos activam-se ambos os sinais de   . Notar que a seleco do
valor entrada de Rx, Rx Ry ou Ry, controlado directamente na unidade de

processamento pelo sinal
.
Esta unidade de controlo to simples que no so necessrias tcnicas
sofisticadas para a sua construo. Usando a tcnica de sntese de mquinas de
estados da Seco 8.3.1, basta usar uma bscula tipo D para guardar o estado,

codificando-se os estados da seguinte forma: 0 corresponde a
;e1a
. A
sntese da lgica trivial, chegando-se ao circuito da Figura 9.18.
Os circuitos das Figuras 9.16 e 9.18 juntos, conforme a Figura 9.2, realizam
a funcionalidade pretendida de clculo do mximo divisor comum entre dois

nmeros.
 A Figura
 9.19 ilustra o funcionamento destes circuitos para o caso de
e
, em que se assumiu que os registos so actualizados no flanco

9.4. UNIDADES LGICAS E ARITMTICAS

129

T0
fim

0
inicio
1

Zy

T1

LDx
1

xMy
0

LDy

Figura 9.17: Fluxograma da unidade de controlo para o mximo divisor comum tendo em vista a unidade de processamento da Figura 9.16.
xMy

LDy

Zy

LDx

D Q
inicio

fim

Figura 9.18: Unidade de controlo para o mximo divisor comum.


ascendente do sinal de relgio.

9.4 Unidades Lgicas e Aritmticas


No exemplo apresentado acima, a unidade de processamento foi projectada
para um fim especfico. De facto, essa ser sem dvida a abordagem mais
eficiente para realizar um sistema digital pois assim inclui-se na unidade de
processamento todos, e apenas, os mdulos necessrios s micro-operaes a
realizar, interligados de forma ptima. No entanto, em muitos casos, tal no
possvel por o nmero de micro-operaes ou a complexidade destas ser muito
elevado.
Nestes casos, projecta-se para a unidade de processamento um circuito com

130

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS

Clk

Estado

T0

T1

T1

T1

T1

T1

T1

T0

T0

Rx

54

54

18

36

18

18

18

18

Ry

36

36

36

18

18

18

Inicio

Fim

LDx

LDy

xMy

Zy

Figura
9.19: Diagrama
  temporal para o clculo do mximo divisor comum entre
e
.
as funcionalidades bsicas, em termos de operaes quer aritmticas quer lgicas, associado a um conjunto de registos genricos. Ao circuito que realiza as
operaes chama-se Unidade Lgica e Aritmtica ou ULA (em ingls, Arithmetic
and Logic Unit ou ALU). O nmero, tipo e complexidade das micro-operaes
includas numa ULA pode variar grandemente dependendo do problema em
vista. Aplica-se aqui o princpio referido na Seco 9.2.2 de que possvel
simplificar a unidade de processamento por transferncia de alguma complexidade para a unidade de controlo. As operaes mais complexas so assim
realizadas por uma sequncia de micro-operaes disponveis numa unidade
de processamento mais simples.
A ULA trabalha normalmente junto com um banco de registos (ver Seco 7.5.4) para guardar os operandos, resultados das operaes e valores temporrios, necessrios quando uma operao complexa substituda por uma
sequncia de operaes mais simples. Tambm aqui pode haver uma grande
variao de caso para caso em termos do nmero de registos disponveis neste
banco.
Uma unidade de processamento deste tipo est representada na Figura 9.20.
Assume-se o caso mais geral, em que a ULA aceita 2 operandos e tem um
resultado nico. A palavra de controlo conter informao para a seleco de
quais os 2 registos que servem como operandos e qual o registo destino para
guardar o resultado. A especificao da micro-operao a realizar pela ULA
tambm parte da palavra de controlo. Por seu lado, a ULA gera um conjunto
de bits de estado que, tal como referido anteriormente, podem ser usados pela
unidade de controlo para tomar decises em termos de execuo dependendo

9.4. UNIDADES LGICAS E ARITMTICAS

131

Banco
de
Registos
Palavra de
Controlo

Operandos

ULA

Bits de
Estado

Resultado

Figura 9.20: Exemplo de unidade de processamento com ULA mais banco de


registos.
do resultado de uma micro-operao.

9.4.1 Estrutura de uma ULA


Para ilustrar estes conceitos, projecta-se em seguida uma ULA, que ser posteriormente usada na unidade de processamento do processador P3 apresentado
no Captulo 12. A ULA definiu-se como um circuito que realiza operaes
aritmticas e lgicas bsicas. Uma primeira observao que estes dois tipos
de operaes no tm muito em comum. Assim, optou-se aqui por considerar em separado unidades para realizar cada um destes tipos de operaes,
a unidade aritmtica e a unidade lgica. Alm destas, considera-se uma terceira unidade para realizar o deslocamento direita e esquerda, funcionalidade semelhante dos registos de deslocamento apresentados na Seco 7.5.2,
mas neste caso efectuada por lgica puramente combinatria. Optou-se tambm por considerar esta unidade de deslocamento em separado pois corresponde a uma funcionalidade distinta das outras unidades. As operaes realizadas pela unidade de deslocamento no se classificam em termos de operaes
aritmticas e lgicas pois, dependendo do tipo de deslocamento efectuado, a
operao pode ser considerada como de um tipo ou do outro, como se ver
adiante.
A Figura 9.21 apresenta a estrutura da ULA em construo. Escolheu-se
uma arquitectura em que as trs unidades referidas trabalham em paralelo,
entrando os operandos directamente em cada uma delas. De notar que esta
opo uma entre outras possibilidades de organizao. Uma alternativa possvel, com vantagens e desvantagens em relao escolhida, seria colocar a
unidade de deslocamento sada do multiplexador, portanto em srie com as
unidades aritmtica e lgica, o que permitiria executar micro-operaes mais
complexas.
A micro-operao realizada por qualquer destas unidades especificada
pela palavra de controlo. O nmero de bits de controlo que entra em cada unidade, ,  e , depende do nmero de operaes disponveis em cada unidade.

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS

132

B
n

Unidade
Aritmtica
p

Palavra de
Controlo

Unidade
Lgica
q

Unidade de
Deslocamento
r

0 1 2 3
Sel MUX
n

Resultado

Figura 9.21: Estrutura da ULA.


Esta palavra de controlo controla tambm o multiplexador sada, que escolhe
de qual das unidades que se pretende o resultado. De notar que s o resultado de uma vai ser usado na sada. Isto permite que os bits de controlo que
entram em cada unidade possam ser partilhados, pois s importante especificar os bits de controlo para a unidade que vai ter o seu resultado seleccionado
sada, sendo irrelevante qual a operao realizada pelas outras duas unidades.
Notar tambm que, embora para no sobrecarregar a figura no esteja l representado, existe tambm um multiplexador para seleccionar os bits de estado
da unidade activa.

9.4.2 Bits de Estado


Sendo uma ULA uma unidade de processamento com micro-operaes
aritmticas e lgicas simples, os bits de estado passados para a unidade de
controlo so tambm simples, e comuns a muitas destas micro-operaes. Para
a ULA em estudo, consideram-se 4 bits de estado, presentes na esmagadora
maioria das ULAs.
Zero (  ): este bit fica a 1 quando o resultado da micro-operao foi 0. Este
bit actualizado em qualquer micro-operao da ULA. Em termos de
realizao, este bit pode ser gerado por uma porta lgica NOR entre todos
os bits do resultado.

Transporte ( ) (ou carry): este bit usado pelas micro-operaes aritmticas


(como soma e subtraco) para indicar que h um bit de transporte para
l do bit mais significativo do resultado. tambm usado nas microoperaes de deslocamento para guardar o bit que se perderia por sair
para fora do resultado.
Sinal ( ): para o bit de sinal usado o bit mais significativo do resultado.
Em notao de complemento para 2 ou sinal-magnitude, este bit indica
quando o resultado deu negativo.

9.4. UNIDADES LGICAS E ARITMTICAS


A

B
n

SelB
Y

Cout

+
Cout

133

Cin

2
Cin

SelC

Figura 9.22: Esquema de uma unidade aritmtica.

Excesso ( ) (ou overflow): este bit s tem sentido para micro-operaes


aritmticas e fica a 1 quando o resultado tem uma magnitude que excede o valor mximo que possvel de representar com o nmero de bits
disponveis para o resultado. Indica portanto que o valor de resposta est
incorrecto. Este conceito de bit de excesso foi apresentado na Seco 6.2,
onde se explicou como pode ser calculado pelo hardware.
Algumas ULAs podem apresentar um maior nmero de bits de estado, dependendo da aplicao em vista. Por exemplo, nalguns casos pode facilitar
muito a existncia de um bit de estado paridade que indique que o nmero de
bits a 1 no resultado par. A regra normalmente a ULA fornecer informao
que til aplicao e que apenas possvel, ou substancialmente mais fcil,
de obter directamente pelo hardware do que com (micro-)programao. Para
a ULA em estudo, consideram-se apenas os 4 bits de estado descritos atrs.

9.4.3 Unidade Aritmtica


Quando se pensa em operaes aritmticas bsicas natural pensar-se na adio, subtraco, multiplicao e diviso. De facto, a adio e a subtraco so
quase que obrigatrias para as unidades aritmticas. A multiplicao, embora
muito comum, no includa em todas devido sua realizao em hardware
ser bastante mais complexa, conforme foi referido atrs. A implicao desta
opo que uma multiplicao ter que ser realizada por uma sequncia de
micro-operaes mais elementares, como somas sucessivas, e portanto demorar bastante mais tempo a executar. A diviso tambm no realizada directamente por muitas unidades aritmticas pois a sua realizao to complexa
como a multiplicao e uma operao bastante menos utilizada. Assim, a penalizao que advm da sua execuo ser mais demorada no tem tanto peso
no desempenho do sistema.
A Figura 9.22 apresenta um exemplo de uma unidade aritmtica. Aqui,
para simplificar, optou-se por no incluir as micro-operaes de multiplicao
e diviso. Assim, esta unidade aritmtica contruda em torno de um somador,
que com a adio de blocos combinatrios simples que manipulam o operando

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS

134

 
00
01
10
11





Bn-1

B1

B0

G2

...

G0

1
0

...

Yn-1

Y1

Y0

(a)

(b)

Figura 9.23: Bloco combinatrio SelB (a) Descrio funcional. (b) Circuito
lgico.

 
00
01
10
11


0
1

G0
Cin




G1
C

(a)

(b)

Figura 9.24: Bloco combinatrio SelC (a) Descrio funcional. (b) Circuito
lgico.

e a entrada do sinal de transporte, permite utilizar o somador para executar


um conjunto interessante de micro-operaes.
Como foi discutido na Seco 6.2.2, um somador pode ser facilmente convertido num subtractor por aplicao do complemento para 2 de um dos operandos. Este complemento para 2 pode ser obtido por complementao
lgica

bit a bit desse operando e por colocao do bit de transporte
entrada a
1. Os blocos combinatrios SelB e SelC, apresentados nas Figuras 9.23 e 9.24
respectivamente,
foram definidos
de forma a que, com os sinais de controlo



e
, o sinal
seleccione se a operao uma soma ou uma subtraco. Como j referido,
 uma porta EXOR pode ser vistacomo um inversor
controlado. Se o sinal
estiver a 0, ento
tambm a 0, esta
 . Com
unidade
realiza uma soma normal. Se o sinal
estiver
a 1, ento cada bit de



o complemento do bit correspondente de . Como

, ento
 tem-se o
complemento para 2 de e esta unidade realiza a subtraco .
Por vezes, pretende-se fazer uma soma entre operandos com um nmero

 . Uma forma
de bits superior aos permitidos pela unidade aritmtica,
simples de conseguir este objectivo comear por somar os  bits menos significativos dos operandos e guardar o bit de transporte. Depois somam-se os 
bits seguintes, tendo agora em conta o bit de transporte anterior. Este procedimento pode-se repetir indefinidamente, permitindo a soma de operandos com

9.4. UNIDADES LGICAS E ARITMTICAS

  
000
001
010
011
100
101
110
111





1
0
1
0


0
1




0
1























 


  


 


 



135

Micro-Operao
soma
subtraco
soma com bit de transporte
subtraco com bit de transporte
decremento
incremento

decremento, se

incremento, se

Tabela 9.1: Conjunto de micro-operaes da unidade aritmtica.


um nmero arbitrrio de bits. O mesmo raciocnio funciona para a subtraco. De maneira a acomodar esta situao, a unidade aritmtica tem que poder
aceitar um bit de transporte.
Na unidade em questo, isto conseguido

      com o
sinal de controlo
a 1, em que se tm as operaes
ou
dependendo do valor de .
Por fim, outras operaes muito comuns so simples incrementos e decre
mentos de um operando. Para incrementar o operando , basta colocar a en
trada correspondente ao operando
a 0 e o bit de transporte
a 1, o que

conseguido com as entradas de controlo
=1,
=0
e
=1.
De
seme
forma 
lhante, para decrementar o operando faz-se a sua soma com =-1 e
=0.
Como o complemento para 2 de 1 um valor
com
todos
os
bits
a
1,
a
diferena

para esta operao o sinal de controlo =0.
A Tabela 9.1 resume as micro-operaes possveis de realizar pela unidade
aritmtica apresentada
na Figura 9.22, para cada combinao das entradas de
  
controlo
. Note-se que as duas ltimas micro-operaes no foram
projectadas, mas surjem como efeitos secundrios das restantes operaes. Embora primeira vista no paream to teis como as seis que foram projectadas,
esto disponveis e podem ser usadas se necessrio.

9.4.4 Unidade Lgica


A diferena fundamental entre as operaes lgicas e as operaes aritmticas
que as primeiras so operaes binrias e as segundas operam sobre valores
numricos. Assim, para as operaes lgicas os bits so tratados de forma independente enquanto que para as aritmticas so os bits no seu conjunto que tm
significado, de acordo com a notao usada em cada caso para a representao
de valores numricos.
As micro-operaes fornecidas pelas unidades lgicas aplicam-se individualmente a cada
 bit dos operandos de entradas. Por exemplo, a micro-operao
 
       significa
entre cada bit dos operandos
e :



  um  AND
 




.
Qualquer operao lgica pode ser includa numa unidade lgica. Para a
ULA em projecto, consideram-se as micro-operaes NOT, AND, OR e XOR. A
Figura 9.25 ilustra como estas micro-operaes so realizadas para um bit .
Naturalmente, a unidade lgica necessitar de tantos blocos iguais ao da Figu-

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS

136

Ai
Ai

Bi

Ai

MUX

Ri

3 SS
0 1

Bi
Ai
Bi

H0 H1

Figura 9.25: Esquema da unidade lgica.

 
00
01
10
11

Micro-Operao












 
 

 


complemento
conjuno
disjuno
ou exclusivo

Tabela 9.2: Conjunto de micro-operaes da unidade lgica.

ra 9.25 quanto o nmero de bits dos operandos. Os sinais de controlo


e
escolhem qual das micro-operaes tem o seu resultado seleccionado sada.
A Tabela 9.2 indica qual a correspondncia entre a combinao destes sinais e
a micro-operao seleccionada.

(a)
C

C
(b)

(c)
C

(d)

Figura 9.26: Tipos de deslocamento: (a) Deslocamento lgico; (b) Deslocamento aritmtico; (c) Rotao; (d) Rotao com transporte.

9.4. UNIDADES LGICAS E ARITMTICAS

137

9.4.5 Unidade de Deslocamento


A unidade de deslocamento apenas admite um operando de entrada e permite
deslocar todos os bits deste operando uma posio esquerda ou direita.
Existem vrios tipos de deslocamento possveis, indicados na Figura 9.26. Uma
primeira observao
 que em qualquer das formas de deslocamento o bit de
estado transporte ( ) recebe o bit que se perde com o deslocamento, o bit mais
significativo do operando no caso de deslocamentos esquerda, ou o bit menos
significativo nos deslocamentos direita.
Deslocamento lgico (Figura 9.26(a)): o deslocamento mais simples em que
cada bit passa para a posio seguinte, consoante seja deslocamento
esquerda ou direita. O bit que sai do operando copiado para o bit
de estado transporte
( ) e o bit que entra sempre 0. Os bits de estado

transporte ( ), zero (  ) e sinal ( ) so actualizados. Se se considerar o
operando de entrada como um nmero sem sinal, um deslocamento de
uma posio esquerda ou direita o mesmo do que uma multiplicao
ou diviso por 2, respectivamente.
Deslocamento aritmtico (Figura 9.26(b)): este tipo de deslocamento tem em
vista a utilizao de um operando em formato de complemento para 2.
O objectivo manter a regra da multiplicao e diviso por 2, agora em
nmeros com sinal. No deslocamento esquerda, o movimento dos bits
exactamente o mesmo do deslocamento lgico. A diferena est em que
se o bit de sinal mudar de valor, isso significa que o resultado excedeu a
capacidade para o nmero de bits do operando (uma multiplicao por 2
no pode trocar o sinal) e portanto o bit de estado excesso ( ) ficar a 1.
No deslocamento direita, a diferena est tambm na forma como o bit
mais significativo tratado. Como o sinal numa diviso por 2 se tem que
manter, em vez de entrar sempre 0 no bit de maior peso, este bit mantm
o valor anterior. Sendo uma operao aritmtica, todos os bits de estado
so actualizados.
Rotao (Figura 9.26(c)): nesta micro-operao o movimento dos bits o mesmo do deslocamento lgico, mas o bit que entra no 0 e sim igual ao bit
que sai, fechando-se assim o crculo. Numa rotao esquerda, o bit de
maior peso entra no bit de menor peso. Numa rotao direita, o bit de
menor peso entra no bit de maior peso. Os bits de estado transporte ( ),
zero (  ) e sinal ( ) so actualizados.
Rotao com transporte (Figura 9.26(d)): este tipo de rotao igual ao anterior, com a diferena que o bit de estado transporte includo no crculo
de rotao. O bit que entra , portanto, o bit que estava anteriormente no
bit de estado transporte. Tambm aqui os bits de estado transporte ( ),
zero (  ) e sinal ( ) so actualizados.
Um circuito que realiza estas micro-operaes de deslocamento est representado na Figura 9.27. Existem 8 micro-operaes
possveis,
 portanto so ne 
cessrios 3 sinais de controlo, , e . Neste circuito, indica se o deslocamento direita (0) ou esquerda (1). Para os bits intermdios do operando,
este o nico sinal de controlo relevante, pois simplesmente se vai buscar o bit
de peso imediatamente maior ou menor. Por outras palavras, o bit de sada

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS

138

A0 An-1

An-2
3

S1
S0

J2
J1
J0

An-3

An-1

A0

A2

An-1

S MUX

S1
S0

MUX

...

S MUX

A1

MUX

S MUX

A n-1

A0

S MUX
1

S MUX
Rn-1

Rn-2

R1

R0

Figura 9.27: Esquema da unidade de deslocamento.

  
000
001
010
011
100
101
110
111

Micro-Operao
deslocamento lgico direita
deslocamento lgico esquerda
deslocamento aritmtico direita
deslocamento aritmtico esquerda
rotao direita
rotao esquerda
rotao direita com transporte
rotao esquerda com transporte


  SHR 
  SHL 
  SHRA 
  SHLA
  ROR 
  ROL 
  RORC 
  ROLC

Tabela 9.3: Micro-operaes possveis na unidade de deslocamento.

fica igual ao bit de entrada


ou consoante
0 ou 1. Este tambm
o nico sinal de controlo para a gerao do bit de estado transporte, que se
carrega com o bit mais ou menos significativo dependendo se o deslocamento
esquerda ou direita, respectivamente.
 
Os sinais
e
servem para definir qual o tipo de deslocamento a executar, o que se consegue pelo controlo do bit que entra, o bit mais significativo
nos deslocamentos direita e o bit menos significativo nos deslocamentos
esquerda. No caso de um deslocamento direita, para um:
deslocamento lgico: entra sempre um 0.
deslocamento aritmtico: o bit mantm-se, pois um bit de sinal.
rotao: entra o bit de menor peso do operando.
rotao com transporte: entra o bit de estado transporte.
De forma semelhante para um deslocamento esquerda:
deslocamento lgico: entra sempre um 0.
deslocamento aritmtico: entra sempre um 0.
rotao: entra o bit de maior peso do operando.
rotao com transporte: entra o bit de estado transporte.

9.4. UNIDADES LGICAS E ARITMTICAS

 

  

00000
00001
00010
00011
00100
00101
00110
00111
01-00
01-01
01-10
01-11
10000
10001
10010
10011
10100
10101
10110
10111
11- - -














































 


  


 


 



 
 

 


SHR

SHL

SHRA

SHLA

ROR

ROL

RORC

ROLC


139

Micro-Operao
soma
subtraco
soma com bit transporte
subtraco com bit transporte
decremento
incremento

decremento, se

incremento, se
complemento
conjuno
disjuno
ou exclusivo
deslocamento lgico direita
deslocamento lgico esquerda
deslocamento aritmtico direita
deslocamento aritmtico esquerda
rotao direita
rotao esquerda
rotao direita com transporte
rotao esquerda com transporte
transferncia

Tabela 9.4: Tabela das micro-operaes da ULA.


A micro-operao realizada pela unidade de deslocamento para cada combinao dos sinais de controlo encontra-se discriminada na Tabela 9.3.

9.4.6 Tabela de Controlo da ULA


Tendo-se estabelecido o funcionamento de cada uma das suas unidades internas, pode-se definir o funcionamento global da ULA representada na
Figura 9.21. Assim, a unidade
   aritmtica disponibiliza 8 micro-operaes seleccionadas pelos sinais
lgica disponibiliza 4 micro-operaes

, a unidade
seleccionadas pelos sinais
e
, e a unidade
  de deslocamento 8 microoperaes seleccionadas pelos sinais ,
e . Observe-se que o multiplexador sada da ULA escolhe o resultado de uma destas unidades, e portanto
para cada micro-operao apenas se tem que garantir que a unidade responsvel pela sua execuo tem os bits de controlo certos. Ou seja, para cada
micro-operao de facto s existe a preocupao de controlar uma destas trs
unidades. Isto significa
de
 que os sinais
destas unidades podem ser

 controlo

partilhados:
, 
e
. A nvel da ULA, a

referncia a estes sinais ser ,
e , respectivamente.


Para alm destes 3 sinais de controlo, so necessrios mais 2 sinais,
e ,

140

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS

para controlar os sinais de seleco do multiplexador. Arbitrariamente definese que a combinao 00 selecciona a unidade aritmtica, a combinao 01 a
unidade lgica e 10 a unidade de deslocamento. A combinao
11 fica dispo
nvel, tendo-se optado por fazer seleccionar a entrada de forma a se fornecer
uma micro-operao que se limita a copiar um operando directamente para
a sada. A Tabela 9.4 apresenta as micro-operaes disponibilizadas por esta
ULA e qual a palavra de controlo que as define.
A forma como os bits de estado so actualizados depende de qual das unidades da ULA usada. Os bits zero (  ) e sinal ( ) so calculados de igual
forma para todas as unidades, de acordo com o definido na Seco 9.4.2. O bit
zero um NOR de todos os bits do resultado. Apesar de no ter muito significado para as micro-operaes lgicas, o bit de sinal sempre calculado devido
a ser simplesmente igual 
ao bit mais significativo do resultado.
J o bit de transporte ( ) calculado para as unidades aritmtica e de deslocamento, e de forma diferente para estas. No casoda unidade aritmtica, este

bit o bit de transporte sada do somador, o sinal
da Figura 9.22. A forma
de clculo deste bit na unidade de deslocamento foi definida na Seco 9.4.5.
Tipicamente o bit que sai do operando devido operao de deslocamento.
Por ltimo, o bit excesso ( ) s tem sentido nas micro-operaes da unidade aritmtica e nas micro-operaes de deslocamento aritmtico da unidade
de deslocamento. Nesta ltima, foi tambm explicado na Seco 9.4.5 que o
bit excesso fica a 1 quando uma operao de deslocamento aritmtico provoca
uma mudana do bit de sinal. Para a unidade aritmtica, este bit calculado
atravs de um EXOR entre os dois bits de transporte mais significativos do somador da Figura 9.22, como explicado no Captulo 6.
Assume-se que os bits de transporte e excesso no so definidos quando a
micro-operao executada utiliza uma unidade em que eles no so calculados.

Naturalmente, est aqui includa a micro-operao de transferncia,   ,
pois no utiliza nenhuma destas unidades. Na prtica, uma possibilidade, to
boa como qualquer outra, assumir que estes ficam a zero.
O hardware necessrio gerao destes bits de estado e sua seleco
sada da ALU no est representado explicitamente nas figuras desta seco
apenas para as no sobrecarregar.

9.4.7 Exemplo Revisitado: Mximo Divisor Comum


Considerando novamente o exemplo da Seco 9.3.2, ilustra-se agora como seria a realizao de um sistema que calcula o Mximo Divisor Comum entre
dois operandos utilizando como unidade de processamento a ULA definida
nesta seco. A descrio deste sistema utilizando apenas as micro-operaes
que a ULA fornece encontra-se na Figura 9.28. Aqui assumiu-se que a ULA
tem associado um banco de registos com pelo menos 3 registos,
em que R1 e
e , e R3 serve
R2 tm inicialmente os dados de entrada, respectivamente
como registo temporrio. O resultado final fica em R2.
Pode-se observar que esta descrio um pouco mais complexa do que na
verso original. Como mencionado atrs, ao utilizar-se uma unidade de processamento genrica como esta ULA, em oposio a uma unidade de processamento especificamente desenhada para um dado problema, so necessrias
mais micro-operaes para atingir um dado
objectivo. Neste caso particular,

na verso original era possvel no estado
fazer uma comparao e efectuar

9.4. UNIDADES LGICAS E ARITMTICAS

141

 :

.  :
 ,


1.
2.
3.
4.
5.
6.
7.
8.

R1  R1 R2,



 ,



 , 

R3  R1 R2,   ,


R1  R2,
 , 
R2  R3,
 ,



. :


. :
 :
:
:


,


,




Figura 9.28: Descrio a nvel de transferncia entre registos do algoritmo para


o clculo do mximo divisor comum.
ainda no mesmo ciclo uma subtraco ou uma troca de registos, dependendo
do resultado desta comparao. Com a ULA, a comparao tem que ser feita
primeiro e s no ciclo seguinte se pode fazer uma nova operao. No cdigo da
Figura 9.28 foi feita uma optimizao trivial pois como a comparao tem que
ser realizada atravs de uma subtraco, caso o resultado ainda seja positivo a
subtraco j est feita. Repare-se que caso o resultado seja negativo, h que
somar a R3 o valor de R2 para recuperar o valor inicial de R1. A outra diferena est em que na ULA no possvel fazer uma troca de valores entre dois
registos. Assim, so necessrios trs ciclos de relgio e um registo temporrio
para efectuar esta operao.
A sequncia de operaes a realizar est descrita no fluxograma da
Figura 9.29. Ainda um fluxograma simples, pelo que qualquer das tcnicas de projecto de mquinas de estados pode ser utilizada para a unidade de
controlo. Opta-se aqui por recorrer a um controlo micro-programado (ver Seco 8.3.3).
A palavra de controlo ter que seleccionar a operao da ULA, os dois registos com os operandos e o registo destino. Para a ULA so necessrios 5
bits para a escolha da micro-operao, conforme indicado na Figura 9.21. Assumindo os 3 registos do banco de registos (R1, R2 e R3), bastam 2 bits para
seleccionar cada um dos registos de cada operando e do registo para guardar
o resultado. No total, a palavra de controlo ser composta por 11 bits:
10

operao ULA

reg A

reg B

dest

O nmero de estados no fluxograma da Figura 9.29 cinco, o que corresponde ao nmero de posies na ROM de controlo, pelo que o nmero de bits
para os endereos de controlo ser trs. Pode-se verificar neste fluxograma

pode ter 3 estados seguintes diferentes. Portanto, na microque o estado
instruo tero de existir pelo menos dois endereos seguintes (assumindo que
o terceiro pode ser obtido por incremento do CAR). Outra consequncia desta
observao que para decidir entre 3 endereos so necessrios 2 bits para a
escolha do endereo seguinte a carregar
no CAR. Por ltimo, as condies de


 no estado
salto
so:
o
sinal
de
controlo
; os bits de estado  e em


; o estado seguinte em  e
(sem salto); salto incondicional em
. Para
cobrir estas quatro hipteses so necessrios 2 bits de controlo para seleccionar
a condio de salto. Finalmente, ter que existir um bit para a sada de controlo

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS

142

T0
fim

0
inicio
1
T1
R1

R1-R2

1
Z
0
0
N
1
R3

T2
R1+R2
T3

R1

R2
T4

R2

R3

Figura 9.29: Fluxograma da unidade de controlo para o mximo divisor comum.


Adicionando palavra de controlo os dois endereos seguintes para o CAR

(
e
), os dois bits para a seleco da condio de salto (
 ) e o bit
da sada de controlo, tem-se o formato completo da micro-instruo para a
unidade de controlo:
19

18

ES0

17

16

15

ES1

14

13

12

SEL

11

10



operao ULA

reg A

reg B

dest

A Figura 9.30 apresenta um controlador micro-programvel ajustado s


condies deste problema. sada da ROM de controlo tem-se a micro-instruo
com a palavra de controlo que enviada directamente para a unidade de processamento, com os campos
e
que guardam 2 possveis endereos
seguintes para o CAR e com o campo SEL que indica qual a condio de salto.
Para este campo foi escolhido arbitrariamente que:
00 - corresponde a um salto incondicional. A sada do multiplexador MUXS
tem sempre o valor 00, combinao que selecciona o campo
da microinstruo.

9.4. UNIDADES LGICAS E ARITMTICAS

143
destino
reg B
reg A
2
Op ULA
5
fim
SEL
2
3
3
2

2
3
+1

2
1

MUX
C

C
A
R

ROM de
Controlo

19

0 Sel
ES0
ES1
N
Z
inicio
0
1
0
0
0

3
2

MUX
S

1
0

Sel

Figura 9.30: Unidade de controlo micro-programada para o mximo divisor


comum.
01 - corresponde a no haver salto. O CAR simplesmente incrementado, porque o MUXS apresenta sempre o valor 10 sada, o que leva a que a entrada CAR+1 seja seleccionada no MUXC.





10 - corresponde a testar a entrada de controlo  . Quando  =0  seleccionado no MUXC a entrada


e portanto d-se o salto. Se  =1,
o CAR incrementado.
11 - corresponde a testar simultaneamente os bits de estado










, o salto feito para o endereo no campo


, o salto feito para o endereo no campo

e


 . Se:

.
.

, no h salto e o CAR simplesmente incrementado.


, combinao impossvel.

Falta agora definir o micro-programa que realiza o fluxograma da Figura 9.29 (as posies sublinhadas indicam valores que so de facto indiferenas):
Posio
ROM

0:
1:
2:
3:
4:

ES0

ES1

00
01

00

01

SEL

10
11
01
01
00



1
0
0
0
0

op
ULA

reg
A

reg
B

00001
00000
11000
11000

01
01
10
11

10
10

reg
dest

00
01
11
01
10

Neste micro-programa existe uma correspondncia entre a posio de endereo da ROM de controlo e o ndice do estado do fluxograma. Assim:





Posio 0:
 1,  : CAR  0,  : CAR  CAR+1
Neste estado a unidade de controlo
est constantemente a carregar o CAR

com 0 at que a entrada  venha a 1, altura em que se deixa incrementar o CAR. Para isso, o campo SEL tem que ter o valor 10 de forma

144

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS



a permitir que o sinal  passe


 no multiplexador MUXS para servir de
seleco no MUXC. Enquanto  for 0, o multiplexador MUXC selecciona a entrada
0, campo ES0 da micro-instruo que contm o endereo 0.

Se  vier a 1, ento a entrada 3 do MUXC que seleccionada. Nesta
espera activa, a sada de controlo
mantida a 1 e a unidade de processamento no faz nenhuma operao, o que se consegue especificando
como registo destino um registo no existente, neste caso utilizou-se o
ndice 0.
Posio 1: R1  R1 R2,  : CAR  0,   : CAR  1,   : CAR  CAR+1
Aqui a ULA faz a subtraco entre R1 e R2, guardando-se o resultado
em R1. Caso o resultado seja 0, o algoritmo terminou e portanto carrega
o endereo 0 para voltar ao incio (no
se no CAR atravs do campo
multiplexador MUXS seleccionada a entrada 3 e no MUXC a entrada 1).
Enquanto o resultado for positivo (bit de estado
), a unidade de
controlo mantm-se no endereo 1 por carregamento do campo
no
CAR. Se o resultado for negativo, em vez da subtraco deve-se trocar
os valores de R1 e R2, o que feito a partir do endereo 2, ou seja, por
incremento do CAR. O teste que determina qual destes trs endereos seguintes usado conseguido por SEL=11.

Posio 2: R3  R1 R2, CAR  CAR+1


Neste estado, colocado em R3 o valor que R1 tinha antes da subtraco,
somando-lhe R2. O CAR simplesmente incrementado, o que se consegue
fixando a entrada 1 do multiplexador MUXS.
Posio 3: R1  R2, CAR  CAR+1
Aqui h uma simples transferncia entre registos, o valor de R2 copiado
para R1. Novamente incrementa-se o CAR.
Posio 4: R2  R3, CAR  1
Finalmente neste estado, efectua-se outra simples transferncia entre registos, copiando-se o valor de R3 para R2. Executa-se um salto incondicional para o estado no endereo 1, o que se consegue seleccionando a
entrada 0 do multiplexador MUXS, obrigando seleco do campo ES0 da
micro-instruo.

Captulo 10

Arquitectura de um
Computador
Embora um sistema digital para qualquer funo especfica possa ser concebido de raiz interligando registos e blocos funcionais, usando as tcnicas estudadas no Captulo 9, por razes de flexibilidade prefervel dispor de um
sistema adaptvel e facilmente reprogramvel. Um computador exactamente
isso, um sistema digital cujo funcionamento especificado por um programa
guardado em memria. Este captulo descreve de uma maneira resumida a
evoluo dos computadores e a sua organizao interna.
Um computador um sistema digital programvel atravs de uma sequncia de instrues guardadas em memria. Atravs desta sequncia de instrues, o computador instrudo para executar operaes elementares de manipulao de dados. Um elemento crucial num computador a sua unidade
central de processamento, ou processador.
O processador, em si mesmo, um sistema digital constitudo por um circuito de dados e um circuito de controlo, tal como os sistemas estudados no
captulo anterior. A sua flexibilidade resulta do facto de estes circuitos serem
projectados por forma a poderem executar todas as operaes bsicas de manipulao de dados que so necessrias para a execuo de tarefas de processamento de dados, por mais complexas que estas sejam.

10.1 Perspectiva Histrica


A ideia de um sistema de processamento de informao que seja reconfigurvel atravs de um programa guardado em alguma forma de memria muito
antiga, remontando aos princpios do sculo XIX. Charles Babbage projectou
o primeiro computador mecnico capaz de desempenhar sequncias de operaes automaticamente. Este computador, conhecido como o difference engine,
usava uma tecnologia totalmente baseada em elementos mecnicos. O sistema
podia ser programado para construir tabelas matemticas, de acordo com instrues especificadas pelo programador. A complexidade dos sistemas mecnicos necessrios realizao de funes matemticas fez com que computadores mais poderosos no viessem a ser fabricados at existncia de tecnologias
145

146

CAPTULO 10. ARQUITECTURA DE UM COMPUTADOR

baseadas em circuitos electrnicos, embora tenham sido feitos planos para um


computador mecnico ainda mais poderoso, denominado analytical engine.
Embora tenham existido diversas tentativas de construo de computadores electrnicos digitais, a primeira mquina a funcionar efectivamente foi o
ENIAC, que ficou operacional em 1946 e podia ser programado para calcular
tabelas matemticas relacionadas com aplicaes militares. Este computador
usava uma tecnologia baseada em vlvulas electrnicas e era programado atravs de um conjunto de cabos que, conforme estivessem ligados ou desligados,
especificavam o contedo da memria do programa. Os seus resultados eram
escritos em cartes perfurados ou numa mquina de escrever elctrica.
O ENIAC guardava o programa e os dados numa memria, que, para a
poca, era de alta velocidade. Este conceito de usar a memria para guardar
tanto o programa como os dados atribuda a John von Neumann, que trabalhou no projecto. Por essa razo, chama-se a este tipo de arquitectura, em que
uma s memria guarda tanto os dados como os programas, uma arquitectura
de von Neumann. Esta arquitectura veio a impr-se alternativa de ter duas
memrias separadas para os dados e para o cdigo, que conhecida como arquitectura de Harvard.
Um nmero de outros computadores, cada vez mais avanados, mas ainda
pertencentes ao que se convencionou designar por primeira gerao, vieram a
ser projectados e construdos, mas a utilizao de vlvulas de vcuo impunha
limites srios fiabilidade e ao tamanho mnimo com que podiam ser construdos. Estes computadores ocupavam tipicamente uma sala de grandes dimenses e podiam funcionar continuamente apenas durante poucas horas, at que
um dos sub-sistemas deixasse de funcionar por falha de uma vlvula.
A utilizao de transstores como tecnologia de base veio permitir a evoluo para a segunda gerao de computadores, que j usavam tecnologias de
discos magnticos para guardar a informao de forma no voltil e tinham
memrias baseadas em ferrites.
A terceira gerao de computadores apareceu com o advento dos circuitos
integrados, em 1961, permitindo uma grande reduo no tamanho dos computadores e o consequente aumento do nmero de portas lgicas que era possvel empacotar num dado volume. Um dos computadores que mais sucesso
alcanou foi o IBM/360. Com este computador, a IBM introduziu o conceito
de separar o conjunto de instrues da implementao fsica de um computador, criando assim a primeira de uma srie de famlias que executavam o
mesmo conjunto de instrues em processadores com diferentes organizaes
internas. A introduo deste conceito permitiu uma muito maior reutilizao
do esforo de programao de sistemas, uma vez que um programa codificado
para um computador de uma dada famlia passou a poder ser executado por
outros computadores da mesma famlia.
O desenvolvimento da tecnologia e a criao do circuito integrado com
grande escala de integrao (VLSI1 ) veio permitir a criao de processadores
inteiramente contidos num s circuito integrado, o que fez baixar o preo de
um computador por forma a permitir o seu uso como um computador pessoal. Embora o primeiro processador disponvel num nico circuito integrado
tenha sido o 4004, da Intel, e o primeiro computador pessoal tenha sido baseado no processador 8080, do mesmo fabricante, o passo mais importante para
1 Very

Large Scale Integration.

10.2. TIPOS DE COMPUTADORES

147

a divulgao deste tipo de computadores ter sido a definio, pela IBM, de


um modelo padro para computadores pessoais, ou PCs2 , baseados no processador 8086. O sucesso deste tipo de computadores, baseados em diversos
processadores desta famlia da Intel (80286, 80386, 80486, Pentium, Pentium II,
Pentium III e Pentium IV), conhecido.

10.2 Tipos de Computadores


Apesar da dominncia, em termos numricos, dos computadores pessoais baseados em processadores da Intel, continuam a existir alternativas baseadas
noutros tipos de processadores. Entre estas contam-se os computadores da
Apple, baseados inicialmente nos processadores da srie 680X0 da Motorola e,
mais recentemente, na famlia de processadores PowerPC, tambm da Motorola. Com os computadores pessoais coexistem outros tipos de computadores,
tais como servidores baseados em processadores MIPS e Compaq (antes Digital), embora, neste momento, a diferena entre servidores e computadores
pessoais tenha mais a ver com o sistema operativo que executam do que com
as capacidades intrnsecas do processador.
A criao dos circuitos integrados veio tambm possibilitar a utilizao de
processadores para controlar sistemas electrnicos autnomos. Estes processadores, geralmente conhecidos como micro-controladores, so tipicamente mais
simples, menos dispendiosos e mais flexveis no que respeita aos sistemas de
entrada/sada, o que permite o seu uso em aplicaes tais como o controlo de
electrodomsticos, onde o baixo preo um importante factor. Processadores
como o 8051, tambm da Intel, so de facto computadores feitos num nico
circuito integrado, uma vez que incluem num nico circuito o processador, a
memria e os meios de comunicao com o exterior.
Um outro tipo de processadores dedicados so os processadores de sinal,
que so projectados por forma a serem extremamente eficientes em aplicaes
de processamento de sinal, e so comummente usados em sistemas para telecomunicaes tais como telefones e televises.

10.3 Organizao Interna de um Computador


Como foi referido acima, um computador um sistema digital programvel
atravs de um sequncia de instrues guardada em memria. Estas instrues
especificam qual a sequncia de operaes de manipulao de dados que deve
ser executada.
Cada instruo especifica, de forma nica, qual a operao que deve ser
efectuada e quais os operandos aos quais a mesma deve ser aplicada. Por
exemplo, uma dada instruo poder especificar que o contedo da posio
10FAh da memria deve ser somado ao contedo do registo R3, devendo o
resultado ser guardado na mesma posio de memria, 10FAh.
A unidade que processa a sequncia de instrues a unidade central de
processamento, UCP (em ingls, Central Processing Unit ou CPU). As unidades
centrais de processamento tm capacidade para executar um conjunto de instrues que, embora variando fortemente de computador para computador,
2 Personal

Computer.

148

CAPTULO 10. ARQUITECTURA DE UM COMPUTADOR

tem um certo nmero de caractersticas comuns. A UCP constituda por circuitos combinatrios que permitem efectuar operaes lgicas e aritmticas, e
por registos que permitem guardar os dados e os resultados dessas operaes.
Nos computadores modernos, a sequncia de instrues a executar guardada em memria. Segundo o modelo de Von Neumann, esta memria serve
tambm para guardar os dados, quer os de entrada no programa quer os que
resultam da execuo do mesmo.
As instrues esto guardadas sequencialmente em memria, e so, de uma
forma geral, executadas pelo ordem em que se encontram. No entanto, existem tambm instrues que alteram a ordem de execuo. Por exemplo, uma
dada instruo poder especificar que a prxima instruo a ser executada a
instruo guardada na posio de memria AAF0h.
A memria encontra-se ligada unidade central de processamento atravs
de dois barramentos, tal como est descrito na Figura 10.1.
UNIDADE
CENTRAL DE
PROCESSAMENTO
ENDEREOS
E CONTROLO

DADOS

MEMORIA

Figura 10.1: Interligao da unidade central de processamento com a memria.


Esquematicamente, a execuo de uma instruo guardada em memria
passa pelas seguintes fases:
A UCP envia para a memria o endereo da prxima instruo a executar
e recebe uma palavra de memria que guarda a codificao da instruo
a executar.
A UCP descodifica a instruo, identificando quais os operandos e qual
o tipo de operao.
A UCP faz um ou mais acessos memria para carregar os operandos
especificados pela instruo para registos internos.
Na posse de todos os operandos, a unidade central de processamento
executa a operao especificada na instruo.
Aps obter o resultado, a UCP escreve o mesmo em memria, caso seja
necessrio, ou num registo interno.
Esta descrio deve ser vista como uma descrio do princpio geral do funcionamento, podendo no se aplicar directamente a processadores modernos,
que so extremamente complexos e que usam um nmero de diferentes tcnicas para acelerar a velocidade de processamento.

10.4. INTERACO COM O EXTERIOR

149

Existem, no entanto, algumas alternativas a esta organizao simples que


importante referir nesta fase e que so tipicamente utilizadas em processadores
comerciais.
Em primeiro lugar, no geralmente verdade que cada posio de memria seja suficiente para guardar a totalidade de uma instruo ou de cada
operando. Assim, por vezes necessrio fazer vrios acessos a memria para
carregar uma instruo ou um operando.
Em segundo lugar, existem numerosos casos em que o fluxo normal de funcionamento descrito acima tambm no respeitado. Existem muitos processadores que, por razes de eficincia, tentam executar mais que uma operao
em paralelo. Nestes casos, descritos em mais detalhe no Captulo 15, a unidade central de processamento pode intercalar as diversas fases de execuo
de diferentes instrues, podendo, por exemplo, carregar a prxima instruo
a executar antes de escrever o resultado da anterior.
Uma outra alterao significativa organizao descrita acima a no utilizao de uma nica memria para guardar os dados e o programa. comum,
especialmente em micro-controladores, utilizar a arquitectura de Harvard descrita atrs, ou seja, duas memrias diferentes, uma para os dados e outra para
o programa. Em alguns casos isto justifica-se pelo facto de o programa ser fixo
e poder ser guardado em memria no voltil, enquanto que os dados tm de
ser guardados em memria de leitura e escrita.

10.4 Interaco com o Exterior


A unidade central de processamento e a memria, ilustradas na Figura 10.1 so
o ncleo central de um computador, mas, por si s, no podem desempenhar
qualquer funo til. Para comunicar com os utilizadores, o computador usa
diversos dispositivos perifricos tais como teclados, ratos, monitores e impressoras. Usa tambm discos e fitas magnticas para armazenar dados de forma
permanente e interfaces de rede para comunicar com outros computadores.
Estes dispositivos encontram-se ligados a portos de entrada/sada (em ingls,
Input/Output ports ou IO ports). Os portos de entrada e sada controlam estes perifricos usando protocolos que variam de perifrico para perifrico. Do
ponto de vista da UCP, os portos de entrada/sada so acedidos, quer para
leitura quer para escrita, de uma forma semelhante memria. Conceptualmente, a cada porto de entrada/sada est atribudo um ou mais endereos,
usados pela UCP quando pretende ler dados desse porto ou escrever dados
para o mesmo. A UCP, a memria e os portos de entrada/sada so tipicamente acondicionados numa nica unidade fsica, para que possam comunicar
atravs de barramentos curtos e de alta velocidade, tal como est ilustrado na
Figura 10.2.
A distino entre um acesso a memria e um acesso a um porto de entrada/sada feita, quer pelo endereo utilizado, quer pelo valor das linhas de
controlo, como se ver no Captulo 14.
O tratamento que cada porto de entrada/sada d aos dados depende do
perifrico que lhe est ligado. Por exemplo, um porto de entrada/sada que
corresponda a uma porta srie envia os dados recebidos para uma linha srie.
Esses dados so depois interpretados por um perifrico que entenda o protocolo srie, como, por exemplo, um modem. Por seu lado, os dados enviados

150

CAPTULO 10. ARQUITECTURA DE UM COMPUTADOR

UNIDADE
CENTRAL DE

MEMRIA
DADOS

ENDEREOS E CONTROLO

PROCESSAMENTO

PORTO SRIE

PORTO PARALELO

PLACA GRFICA

Figura 10.2: Processador, memria e portos de entrada/sada.


pelo rato pela linha srie so lidos do porto de entrada/sada pela UCP quando
faz um acesso ao porto correspondente.
Outros portos de entrada/sada tratam os dados de forma diferente. Um
porto paralelo pode ser usado para comunicar com uma impressora, atravs de
um conjunto de linhas. Outros portos correspondem a perifricos mais complexos, como, por exemplo, placas grficas e controladores de disco. Uma placa
grfica interpreta os dados recebidos como comandos para desenhar pontos
no monitor e gera o sinal vdeo que faz aparecer no mesmo a imagem correspondente, enquanto que um controlador de disco escreve os dados recebidos
em localizaes especficas do disco magntico ou l os dados guardados nas
localizaes especificadas pela UCP. Na prtica, por razes de desempenho e
de modularidade do sistema, existem diversas alternativas para a leitura e escrita de dados em portos de entrada/sada, que sero estudadas em detalhe no
Captulo 14.
A Figura 10.3 descreve a forma como os perifricos exteriores so ligados ao
computador. Note-se que, embora os perifricos sejam por vezes ligados unidade central atravs de cabos, existem diversos perifricos que se encontram
fisicamente dentro da unidade que alberga a UCP. Em geral, discos magnticos,
leitores de discos compactos e unidades de discos flexveis esto alojadas dentro da unidade onde se encontra a unidade central de processamento, embora
sejam perifricos ligados da mesma forma que um rato ou uma impressora,
que so externos.

10.5. NVEIS DE ABSTRACO DE UM COMPUTADOR

151

CABO VDEO

LINHA PARALELA

LINHA SRIE

Figura 10.3: Computador e perifricos.

10.5 Nveis de Abstraco de um Computador


Um computador geralmente utilizado a um nvel de abstraco muito elevado. A maioria dos utilizadores de um computador no conhece, nem deseja
conhecer, qualquer detalhe da sua organizao interna ou da sua arquitectura.
Tipicamente, um utilizador de um computador faz uso do mesmo executando
uma aplicao, como, por exemplo, um editor, um processador de texto ou
uma folha de clculo. Estas aplicaes foram desenvolvidas com o objectivo
de tornar os computadores acessveis a utilizadores que no saibam, ou no
queiram, programar, e, atravs da utilizao das mais recentes tecnologias de
interaco com o utilizador, conseguiram de facto tornar a utilizao dos computadores acessvel a todos.
Porm, um computador , de facto, um sistema digital programvel, e,
como tal, pode ser utilizado, programado ou configurado a diversos nveis
de abstraco. A Figura 10.4 ilustra os diversos nveis de abstraco a que um
computador pode ser visto.
O nvel superior, o da aplicao, j foi referido. Um utilizador que utilize
o computador a este nvel interage com uma aplicao, tipicamente utilizando
metforas da vida real, tais como pastas, reas de trabalho, folhas, etc.
Na maior parte dos casos, esta aplicao foi programada usando uma linguagem de alto nvel, tal como Java ou C. da responsabilidade dos programadores interpretarem as especificaes que definem o funcionamento de uma
aplicao e escreverem o cdigo em linguagem de alto nvel que as realiza.
Este cdigo de alto nvel no directamente executado pelo computador,

CAPTULO 10. ARQUITECTURA DE UM COMPUTADOR

152
NVEL 5

APLICAO

NVEL 4

PROGRAMA EM
LINGUAGEM DE ALTO NVEL

NVEL 3

PROGRAMA EM
LINGUAGEM ASSEMBLY

NVEL 2

PROGRAMA EM
LINGUAGEM MQUINA

PROGRAMADOR

COMPILADOR

ASSEMBLER

NVEL 1

NVEL 0

MICRO-PROGRAMA EM LINGUAGEM
DE TRANSFERNCIA DE REGISTOS

PROJECTISTAS DO
PROCESSADOR

PROJECTISTAS DE
SISTEMAS DIGITAIS

SISTEMA DIGITAL

Figura 10.4: Nveis de abstraco a que um computador pode ser utilizado.


sendo primeiro traduzido, por um outro programa, chamado compilador, para
uma linguagem muito mais simples, a linguagem assembly. Esta linguagem
permite apenas especificar operaes muito simples, tais como uma soma de
duas posies de memria ou a cpia de uma posio de memria para outra.
Apesar da sua simplicidade, a linguagem assembly no ainda directamente
executada pelo processador. Tem de ser traduzida para linguagem mquina, que,
essa sim, executada directamente pelo processador. Esta linguagem mquina
, normalmente, guardada em memria e representa um programa que executado directamente pelo processador. A traduo de linguagem assembly para
linguagem mquina realizada por um outro programa, o assembler.
Existem ainda nveis de abstraco mais baixos que a linguagem mquina.
Os bits de um programa em linguagem mquina no so, em geral, usados
directamente para controlar os registos e circuitos de dados do processador.
Na maioria dos casos, a cada instruo em linguagem mquina correspondem
diversas operaes elementares de manipulao de dados e de transferncia
entre registos. Estas operaes constituem o micro-programa, e so definidas
pelos projectistas do processador.
Finalmente, definidas as micro-operaes que tm de ser suportadas pelo
hardware, h que projectar o sistema digital que as realiza. Este projecto tipicamente efectuado por engenheiros especializados no projecto de sistemas
digitais, que podem ou no ser os mesmos que projectaram e definiram o processador a um nvel superior de abstraco.
Esta descrio simplificada do funcionamento de um computador omite
diversos aspectos de maior ou menor importncia, existindo, no entanto, um
deles que no pode ser ignorado, mesmo numa descrio superficial como a
que foi feita. Quase todos os computadores executam diversos programas,
quer em simultneo quer em sequncia. A execuo dos diversos programas
controlada por um programa especial, o sistema operativo do computador.
O sistema operativo ele mesmo um programa que tem como misso agendar

10.6. COMPONENTES DE UM COMPUTADOR

153

e gerir as diversas tarefas que o processador tem de executar. O estudo dos


sistemas operativos merece, por si s, um livro, pelo que este assunto no
abordado com qualquer profundidade neste contexto. Porm, de um ponto de
vista simplista, o sistema operativo simplesmente um programa que distribui
o tempo do processador entre as diversas tarefas que ele tem de efectuar. Estas
tarefas incluem no s a execuo de aplicaes, mas tambm o atendimento
de pedidos de dispositivos perifricos, a gesto do sistema de memria e a
gesto de recursos partilhados entre as diversas aplicaes e/ou utilizadores.
Conceptualmente, um processador pode ser utilizado ou programado a
qualquer dos nveis superiores ao nvel 0. Este nvel , tradicionalmente, fixo
e inaltervel. No entanto, existem tecnologias recentes que permitem reconfigurar as ligaes entre os componentes digitais por forma a conseguir alterar a
funcionalidade dos mesmos. A programao ou utilizao a nveis superiores
requer, tipicamente, menos esforo por parte do utilizador ou programador,
mas o uso destas tcnicas de baixo nvel permite atingir grande eficincia.

10.6 Componentes de um Computador


Os captulos que se seguem a este so dedicados ao estudo da arquitectura de
computadores. Comea-se por analisar o funcionamento das unidades centrais
de processamento do ponto de vista do programador em linguagem assembly.
Para tal, o Captulo 11 descreve a forma como uma tpica unidade central de
processamento programada a este nvel, usando para tal um hipottico microprocessador, o processador P33 . O processador P3 semelhante a processadores comerciais, exibindo muitas das suas caractersticas, evitando, no entanto,
as idiossincrasias inerentes a estes. Alm de se apresentar a linguagem assembly
deste processador, descreve-se tambm a forma como uma instruo assembly
traduzida para linguagem mquina, sendo assim abordados os nveis 2 e 3
da Figura 10.4.
A opo de usar um processador no comercial para ilustrar o funcionamento das unidades centrais de processamento foi tomada com a conscincia
que uma soluo que tem vantagens e desvantagens. A desvantagem mais
significativa a de o leitor no obter o valor acrescentado de conhecer profundamente um processador real, o que poderia ser de grande utilidade no
futuro. Entenderam os autores que esta desvantagem seria mais do que compensada pelas vantagens pedaggicas de no ter de lidar, durante o processo
de aprendizagem, com as complexidades inerentes ao uso de um processador
comercial, muitas delas motivadas por razes puramente histricas.
Optou-se assim por definir este processador, utilizando uma abordagem
em que os critrios de desempenho, realismo ou elegncia assumiram uma posio secundria face aos critrios de clareza pedaggica e simplicidade. Na
opinio dos autores, esta opo foi justificada pelo resultado final obtido, um
processador simples, fcil de programar e com uma arquitectura de grande
regularidade, o que permite simplificar grandemente o processo de aprendizagem.
Uma unidade central de processamento, tal como o processador P3, um
sistema digital complexo, que, embora sendo projectado usando as tcnicas
3 P3

= PPP = Pequeno Processador Pedaggico.

154

CAPTULO 10. ARQUITECTURA DE UM COMPUTADOR

descritas em captulos anteriores, merece um estudo mais detalhado. Assim, a


estrutura interna do processador P3, ou seja, a sua micro-arquitectura, descrita no Captulo 12, sendo este captulo usado no s para descrever este processador em particular, mas tambm para introduzir um nmero de tcnicas de
projecto de processadores que so utilizadas num grande nmero de sistemas.
Este captulo cobre assim os nveis 0 e 1 da Figura 10.4.
O Captulo 13 descreve a forma como o sistema de memria de um processador moderno se encontra estruturado. De facto, a descrio feita acima
apresenta uma viso excessivamente simplificada do sistema de memria de
um computador moderno.
O Captulo 14 descreve, com algum detalhe, a forma como a unidade central de processamento se interliga com os perifricos e quais os mtodos e protocolos de comunicao mais utilizados. Descreve tambm, de forma necessariamente breve, alguns perifricos que so especialmente importantes, tais
como discos e teclados.
Finalmente, o Captulo 15 serve de breve introduo a tpicos mais avanados da rea da arquitectura de computadores. Neste captulo, sero abordados,
muito brevemente, tpicos importantes para o desempenho de computadores,
como pipelining, as filosofias CISC e RISC, assim como diversas tcnicas que
so usadas no projecto dos processadores actuais.

10.7 Sumrio
Este captulo introduz o conceito de computador como um sistema digital programvel e descreve, de forma breve, a evoluo histrica dos computadores.
Descreveu-se brevemente a arquitectura de um computador em termos dos
seus diversos componentes, entre os quais se contam necessariamente a unidade central de processamento (UCP, ou processador), a memria e os portos
de entrada/sada ligados a dispositivos perifricos.
Finalmente, foram referidos os diversos nveis de abstraco a que um computador pode ser conceptualizado, nveis estes que vo desde o nvel da aplicao at ao nvel da transferncia de dados entre registos de um sistema digital.

Captulo 11

Conjuntos de Instrues
Este captulo dedicado ao estudo de algumas alternativas possveis para a
arquitectura do conjunto de instrues de um processador. Como caso de estudo
concreto, utiliza-se o conjunto de instrues do processador P3, um processador de 16 bits, micro-programado, concebido unicamente com fins didcticos,
mas que exibe muitas das caractersticas de processadores comerciais simples.
Para cada processador ou famlia de processadores definido um conjunto
de instrues. A escolha de quais as instrues que devem ser includas no
conjunto de instrues de um processador representa um problema complexo
e intimamente relacionado com as funcionalidades pretendidas e a tecnologia
utilizada. Este problema resolvido por equipas de projectistas, os arquitectos do conjunto de instrues, aps efectuarem uma anlise das alternativas
existentes e das limitaes impostas pelas especificaes.

11.1 Linguagens de Programao


Como foi visto no captulo anterior, um computador pode ser programado
usando linguagens com nveis de abstraco muito diversas.
O nvel de abstraco mais baixo que se considera neste captulo o da linguagem mquina. Cada instruo de linguagem mquina constituda por um
conjunto de bits, directamente interpretvel pelo processador. Considere-se, a
ttulo de exemplo, a sequncia de instrues de linguagem mquina do processador P3, representada na Tabela 11.1, que soma trs nmeros inteiros guardados nas posies de memria N1=00A0h, N2=00B0h, N3=00B1h, e guarda
o complemento do resultado na posio N4=F000h. Esta sequncia de bits
no parece ter qualquer significado para um programador, embora especifique
de forma no ambgua as operaes a efectuar. Com efeito, um programa em
linguagem mquina tem a desvantagem de ser muito difcil de entender por
seres humanos. Por essa razo, programar directamente em linguagem mquina exige dos programadores um esforo muito grande de memorizao e
de consulta de documentao, revelando-se muito ineficiente em termos do
tempo que necessrio investir.
No nvel de abstraco imediatamente superior encontra-se a linguagem
assembly. Cada instruo nesta linguagem corresponde a uma instruo de
linguagem mquina, mas, em vez de ser especificada em termos de zeros e
155

CAPTULO 11. CONJUNTOS DE INSTRUES

156
Endereo
Base 2
0001000000000000
0001000000000001
0001000000000010
0001000000000011
0001000000000100
0001000000000101
0001000000000110
0001000000000111
0001000000001000

Base 16
1000
1001
1002
1003
1004
1005
1006
1007
1008

Valor
Base 2
1010111001110000
0000000010100000
1000011001110000
0000000010110000
1000011001110000
0000000010110001
0100000000000001
1010110001110000
1111000000000000

Base 16
AE70
00A0
8670
00B0
8670
00B1
4001
AC70
F000

Tabela 11.1: Instrues em linguagem mquina do processador P3.


uns, especificada utilizando mnemnicas e nomes simblicos. Por exemplo,
a instruo de somar dois nmeros guardados nos registos R1 e R2 e depositar
o resultado em R1 poder ser codificada como ADD R1,R2. Para o programador, muito mais fcil memorizar esta instruo do que o seu equivalente
em linguagem mquina que , no caso do P3, 1000011001000010, ou seja,
8642h. Ao programa descrito em linguagem mquina na Tabela 11.1 corresponde o programa em assembly descrito na segunda coluna da Tabela 11.2. Em
Endereo
1000h
1001h
1002h
1003h
1004h
1005h
1006h
1007h
1008h

Cdigo assembly
MOV R1, M[00A0h]
ADD

R1, M[00B0h]

ADD

R1, M[00B1h]

NEG
MOV

R1
M[F000h], R1

Cdigo mquina
AE70
00A0
8670
00B0
8670
00B1
4070
AC70
F000

Tabela 11.2: Correspondncia entre as instrues assembly e mquina.


geral, alm do uso de mnemnicas para as instrues, as linguagens assembly permitem definir nomes simblicos para endereos de memria, constantes
numricas, constantes alfa-numricas e endereos. Neste exemplo, usaramse directamente os endereos pretendidos, mas teria sido possvel definir nomes simblicos N1, N2, N3 e N4 para representarem os valores N1=00A0h,
N2=00B0h, N3=00B1h e N4=F000h usando a directiva EQU da linguagem assembly. Admitiu-se, no exemplo anterior, que o programa comeava na posio
1000h, o que em assembly se especifica usando a directiva ORIG. Se se usarem estas directivas, a seguinte sequncia de instrues assembly corresponde
exactamente sequncia de instrues mquina da Tabela 11.1. Por anlise e
comparao entre o cdigo do Programa 11.1 e as instrues mquina da Tabela 11.1, possvel verificar que, embora ambos descrevam exactamente a
mesma sequncia de instrues, o cdigo em assembly muito mais compreen-

11.1. LINGUAGENS DE PROGRAMAO


ORIG
N1
N2
N3
N4

1000h
EQU
EQU
EQU
EQU

00A0h
00B0h
00B1h
F000h

MOV
ADD
ADD
NEG
MOV

R1, M[N1]
R1, M[N2]
R1, M[N3]
R1
M[N4], R1

157

Programa 11.1: Programa em assembly que soma trs nmeros em memria.

svel e fcil de editar, depurar ou modificar. Note-se que a cada instruo pode
corresponder uma ou mais palavras de memria, dependendo do tipo de instruo e dos seus operandos. Pode tambm observar-se que as directivas no
se traduzem directamente para instrues de linguagem mquina, mas podem
traduzir-se na ocupao de uma ou mais posies de memria.
Quando programa em assembly, o programador continua a ter de conhecer
a arquitectura e os recursos do processador de forma detalhada, uma vez que
as instrues assembly s fazem sentido para aquele processador. Embora semelhantes entre si, as linguagens assembly so diferentes de processador para
processador.
A traduo de um programa escrito em assembly para um programa escrito
em linguagem mquina um processo relativamente simples, uma vez que a
cada instruo assembly corresponde uma e uma s instruo em linguagem
mquina. Esta traduo pode ser feita manualmente, mas geralmente efectuada por um programa chamado assembler. O assembler aceita um programa escrito em assembly e gera um programa em linguagem mquina, processando as
directivas e traduzindo as instrues descritas no ficheiro fonte. A Seco 11.8
descreve em detalhe o funcionamento de um assembler para o processador P3.
Como foi referido no captulo anterior, a programao de um computador
pode ser feita utilizando nveis de abstraco superiores usando linguagens de
alto nvel que so, na maior parte dos casos, independentes do processador.
Exemplos de linguagens deste tipo so as linguagens C, Pascal e Java. Programas escritos nestas linguagens tm de ser traduzidos para linguagem assembly e da para linguagem mquina, antes de serem executados pelo processador. Este processo de traduo muito mais complexo que o referido anteriormente, e efectuado por programas chamados compiladores. Em geral, a cada
instruo de uma linguagem de alto nvel correspondem vrias instrues assembly. Em alguns casos, uma linguagem de alto nvel poder ser interpretada
directamente por um programa, o interpretador, no havendo assim necessidade de compilao, mas conduzindo a uma execuo do programa consideravelmente mais lenta. Linguagens que, embora possam ser compiladas, so
muitas vezes utilizadas desta forma so o LISP e o Scheme, para as quais existem interpretadores muito eficientes. Tambm o Java por vezes usado com
um interpretador, embora o programa original seja, neste caso, traduzido para

158

CAPTULO 11. CONJUNTOS DE INSTRUES

uma linguagem intermdia que se aproxima de linguagem mquina.

11.2 Instrues Assembly


Uma vez que existe uma correspondncia directa entre uma instruo assembly
e uma instruo em linguagem mquina, usar-se- a partir de agora o termo
instruo para designar qualquer uma das duas. Tipicamente, o contexto ser
suficiente para indicar se a referncia a uma instruo de linguagem mquina
ou a uma instruo assembly.
Uma instruo guardada em memria como uma combinao de bits que
especifica, de forma nica, uma sequncia de operaes de transferncias entre registos que deve ser executada pelo processador. De um modo geral, as
instrues so executadas pela ordem em que esto ordenadas em memria.
Em diversos casos, porm, esta sequncia de execuo alterada, quer porque
executada uma instruo de controlo, quer porque o processador recebe um
pedido externo e tem de alterar a ordem de execuo das instrues. Existem
trs grandes classes de instrues:
As instrues de transferncia de dados transferem informao de um local
(registo, posio de memria ou porto de entrada/sada) para outro, sem
alterar a informao original.
As instrues de manipulao de dados aplicam um operador aritmtico ou
lgico ao operando ou operandos, especificados pela sua localizao, e guardam o resultado da mesma.
As instrues de controlo permitem alterar a sequncia normal de instrues e definir qual a prxima instruo a ser executada.
As instrues de transferncia de dados so usadas para copiar ou salvaguardar dados. So tipicamente usadas para copiar valores para registos ou
posies de memria onde possam ser manipulados, para criar diversos tipos
de estruturas de dados como, por exemplo, arrays e listas, e, ainda, para efectuar operaes de entrada e sada.
No processador P3, a instruo de transferncia de dados mais simples
a instruo MOV. Por exemplo, a instruo MOV R1, M[00A0h] copia o contedo da posio de memria 00A0h para o registo R1.
As instrues de manipulao de dados so as que efectivamente executam
as operaes teis num programa. Todos os processadores suportam instrues aritmticas bsicas tais como adio e subtraco. So tambm suportadas por todos os processadores operaes lgicas bsicas, como a disjuno
e a conjuno, e operaes de deslocamento. Muitos processadores executam
tambm operaes aritmticas mais complexas como multiplicao, diviso e
outras funes matemticas sobre nmeros inteiros ou reais.
Entre estas instrues encontram-se, tipicamente, instrues como ADD, SUB,
INC, MULT, AND, OR e XOR. Por exemplo, no processador P3, a instruo ADD
R1,M[00B0h] soma o contedo do registo R1 ao contedo da posio de memria 00B0h, guardando o resultado no registo R1.
A sequncia de instrues a executar controlada por um registo especial,
o contador de programa. Na maioria dos processadores, este registo designado por PC (program counter). Este registo contm o endereo de memria

11.2. INSTRUES ASSEMBLY

159

onde se encontra a prxima instruo a ser executada. Tipicamente, as instrues de transferncia e de manipulao de dados incrementam o contador de
programa para o valor correspondente posio de memria onde se inicia a
instruo que se segue na sequncia normal de execuo, o que faz com que
essa instruo seja a prxima a ser executada.
As instrues de controlo permitem alterar a ordem de execuo de instrues, incondicionalmente ou, em alternativa, apenas se a operao anterior
produzir um resultado que satisfaa certas condies. Mais especificamente,
as instrues de controlo permitem especificar qual o endereo da prxima
instruo a executar, atravs da alterao do registo contador de programa, PC.
Estas instrues so estudadas em mais detalhe na Seco 11.5. Este tipo de
instrues permite tomar decises em funo dos resultados de clculos anteriores ou de acontecimentos externos, sendo portanto fundamentais para o
funcionamento correcto de qualquer programa.
Um exemplo de uma instruo de controlo no processador P3 a instruo
JMP. Por exemplo, a instruo JMP 00CCh faz com que a prxima instruo a
ser executada seja a instruo na posio de memria 00CCh.
A combinao de bits que corresponde a cada instruo codifica, de forma
nica, quais as operaes a executar, quais os operandos e qual a localizao
onde deve ser guardado o resultado. Assim, cada instruo mquina contm,
necessariamente, trs componentes, que se reflectem na estrutura da instruo:
O cdigo de operao (operation code ou opcode), que especifica qual a operao a executar. Por exemplo, no processador P3, o cdigo para somar


dois nmeros representado pela combinao de bits
.
A especificao dos operandos aos quais deve ser aplicada a operao.
Por exemplo, se num processador com 8 registos se pretender somar o
registo R1 com o registo R2, seria possvel usar 6 bits (3 + 3) para repre 
sentar os dois operandos, o que corresponderia sequncia
. O
nmero de operandos de cada instruo varia com o tipo de instruo e
com o processador, desde processadores em que as instrues no tm
operandos explcitos (todos os operandos so guardados em localizaes
pr-estabelecidas) at processadores em que as instrues aceitam um,
dois ou trs operandos.
A especificao da localizao (registo ou memria) onde dever ser guardado o resultado da operao. Por exemplo, se se pretender guardar o
resultado no registo R1, num processador com 8 registos, a sequncia de

bits
poder ser usada para o indicar.
A ttulo de exemplo, no processador P3, a instruo ADD R1,M[N2], usada
no exemplo da Seco 11.1, codificada com duas palavras de 16 bits. A pri

meira palavra contm o cdigo de operao (
) nos bits mais significativos. Contm ainda, nos trs bits menos significativos, o nmero do registo que

deve ser usado como primeiro operando e como destino do resultado (
).
Os restantes bits indicam, usando uma codificao que ser discutida na Seco 11.7.3, que o segundo operando deve ser obtido a partir da posio de memria cujo endereo est guardado na segunda palavra desta instruo. Assim,
esta instruo codificada com as palavras 8670h e 00B0h, que correspondem
aos valores em binrio 1000011001110000 e 0000000010110000.

160

CAPTULO 11. CONJUNTOS DE INSTRUES

Na prtica, a especificao dos operandos e da localizao do resultado


pode ser consideravelmente complexa. Isto deve-se ao facto de que as instrues de manipulao de dados e as instrues de transferncia operarem sobre
valores localizados numa das seguintes possveis posies:
Registos internos do processador
Constante, especificada na prpria instruo
Localizaes de memria
Portos de entrada/sada
Para que seja possvel especificar de forma flexvel qualquer uma destas localizaes so geralmente utilizadas formas mais complexas de codificao. A
Seco 11.7 descreve o mecanismo de codificao das instrues no processador P3.
Muitos processadores comerciais possuem a possibilidade de executar instrues mais complexas. Por exemplo, o processador 8086 dispe de uma instruo que copia um determinado nmero de posies de memria para uma
outra zona de memria. Uma instruo deste tipo requer pelo menos trs operandos: dois para especificar os endereos de origem e destino, e um para especificar o nmero de posies de memria a copiar.
Para instrues complexas deste tipo, muitas vezes um ou mais operandos
so fixos e pr-definidos, para evitar a necessidade de codificar todos os operandos na instruo. Este tipo de endereamento, chamado endereamento implcito, tambm usado em instrues mais simples mas muito comummente
utilizadas, como por exemplo as instrues de manipulao da pilha descritas na Seco 11.3.5. Existem tambm processadores, chamados processadores
de pilha, em que todos os operandos so guardados numa pilha, e todas as
operaes aritmticas operam sobre os dois operandos guardados no topo da
pilha. Estes operandos so, assim, especificados de forma implcita. Noutras
mquinas, um dos operandos sempre um registo especial, denominado o acumulador, pelo que uma operao aritmtica apenas necessita ter um operando
definido explicitamente.

11.3 Especificao dos Operandos


Existem quatro origens possveis para os operandos de uma instruo: registos internos do processador, constante especificada na prpria instruo, uma
localizao em memria, e portos de entrada/sada.

11.3.1 Registos Internos


A utilizao de operandos em registos vantajosa por duas razes. Em primeiro lugar, o acesso a dados guardados num registo interno muito mais rpido do que o acesso a dados em memria. Em segundo lugar, existem menos
registos internos do que posies de memria, o que permite utilizar menos
bits para especificar um registo do que uma posio de memria. Isto leva a
que as instrues que utilizam apenas registos necessitem de menos bits para

11.3. ESPECIFICAO DOS OPERANDOS

161

a sua codificao, ocupando menos memria e sendo lidas e executadas mais


rapidamente.
Os registos internos podem estar organizados de diversas formas. Na sua
forma mais simples, os registos internos so simplesmente um conjunto de
registos, com igual funcionalidade, organizados num banco de registos e especificados pelo seu nmero. Este tipo de organizao foi usado no banco de
registos descrito na Seco 7.5.4, e ser utilizado no processador P3.
Outros processadores tm organizaes mais complexas. Podem existir registos com funes especficas, que so sempre usados em determinadas operaes. Em processadores que tenham um registo especial denominado acumulador, este guarda o resultado das operaes e tambm muitas vezes usado
para especificar o endereo de acesso memria. Processadores complexos,
como, por exemplo, a famlia x86 da Intel, tm diversos registos com funes
especficas, como a manipulao de cadeias de caracteres em memria e a gesto da memria do processador.
Mesmo os processadores simples e com organizaes muito regulares dos
registos possuem, geralmente, dois registos de uso especfico, que podem ou
no ser acessveis directamente ao programador. Estes dois registos so o contador de programa (PC), cuja funcionalidade descrita em mais detalhe na
Seco 11.5 e o apontador para a pilha (em ingls, stack pointer, SP), cuja utilidade
ser estudada na Seco 11.3.5.

11.3.2 Constantes Especificadas na Prpria Instruo


Quase todos os processadores podem executar instrues em que um ou mais
operandos so valores constantes, especificados na prpria instruo. Por exemplo, a instruo ADD R1,0005h soma ao contedo do registo R1 o valor 5,
valor este que se encontra especificado na prpria instruo.
Embora este mtodo possa parecer tanto ou mais eficiente que a utilizao
de um valor em registo, isso no , geralmente, verdade. De facto, a especificao de uma constante na prpria instruo obriga, na prtica, a utilizar
mais uma palavra de memria para codificar a instruo, onde guardada a
constante.
Assim, para carregar este valor, geralmente necessrio fazer um acesso
extra a memria1 o que se revela muito mais lento que um acesso a um registo
interno. Desta forma, em termos de velocidade, o uso de uma constante especificada na prpria instruo , na prtica, equivalente, em termos de velocidade
de execuo, ao uso de um operando guardado em memria.

11.3.3 Memria e Portos de Entrada/Sada


Existem duas formas possveis de tratar os dados provenientes de portos de
entrada/sada. Uma filosofia, adoptada em muitas famlias de processadores,
consiste em disponibilizar um conjunto de instrues especiais para a entrada e
sada de dados. Esta soluo que equivale a ter entradas/sadas independentes
do sistema de memria (independent IO) foi adoptada em muitos processadores,
e, nomeadamente, na famlia x86 da Intel. Neste caso, existe um espao de
1 O carregamento da constante pode ser mais rpido se a constante for especificada de uma
forma que no exija uma palavra extra na instruo.

162

CAPTULO 11. CONJUNTOS DE INSTRUES

endereamento especfico para operaes de entrada sada. Um acesso a um


dado porto de entrada/sada especificado colocando um dado valor nos bits
de endereo do processador (ou em parte deles) e controlando uma ou mais
linhas adicionais que especificam que a operao uma operao de entrada
ou sada e no um acesso a memria.
Em alternativa, possvel considerar que os portos de entrada/sada so
mapeados para o espao de memria do processador (memory-mapped IO), sendo
os dados disponveis nestes portos manipulados atravs das mesmas operaes que manipulam os dados em memria. Esta soluo permite reduzir a
complexidade do conjunto de instrues, tendo como desvantagem principal a
reduo do espao de memria enderevel pelo processador. Quando esta soluo adoptada, a leitura de dados de um porto de entrada executada como
se tratasse de uma leitura de determinadas posies de memria, enquanto
que a escrita de dados em portos de sada executada como se se tratasse de
uma escrita em determinadas posies de memria. Compete aos dispositivos
exteriores ao processador distinguir, atravs da correcta descodificao dos endereos, acessos feitos a portos de entrada/sada e acessos feitos a memria.
menor complexidade do conjunto de instrues vai corresponder uma maior
sofisticao da arquitectura do sistema de memria, como ser estudado no
Captulo 13. Quando esta soluo adoptada as instrues de entrada/sada
podem usar todos os modos de endereamento disponveis, sendo os portos
tratados pelo programador como se fossem posies de memria. Esta abordagem tem ainda a vantagem adicional de se poder processar dados directamente
a partir de (ou com destino a) portos de entrada/sada. Esta foi a soluo adoptada no processador P3, onde todos os acessos a portos de entrada e sada so
feitos usando as operaes normais de transferncia de dados.
Para aceder a operandos em memria ou a portos de entrada/sada, necessrio especificar o endereo da memria ou o porto onde o operando se
encontra, o que pode ser feito de diversas formas. As diferentes alternativas
existentes para a especificao da localizao de um operando, ou seja, os possveis modos de endereamento, so estudadas em detalhe na seco seguinte.

11.3.4 Modos de Endereamento


A escolha dos modos de endereamento suportados por um processador tem
um grande impacto na sua estrutura interna e na flexibilidade do conjunto de
instrues. Considere-se um acesso a memria em que o valor do registo RX
e/ou o valor de uma palavra W so usados para especificar a localizao do
operando. Existem diversas formas de usar o valor de RX e de W para definir
o valor do operando ou a localizao do mesmo. Caso o operando se encontre numa posio de memria, o endereo onde ele se encontra chamado de
endereo efectivo. A Tabela 11.3 sumaria alguns modos de endereamento comummente utilizados.
No endereamento por registo, o operando o valor guardado num registo
interno. Este modo de endereamento eficiente, uma vez que, como foi atrs
referido, obter um operando a partir de um registo mais eficiente que obter
um operando a partir de memria.
No modo de endereamento indirecto por registo, o contedo do registo especificado indica o endereo efectivo de memria onde os dados se encontram,
no caso de uma leitura, ou onde devem ser guardados, no caso de uma escrita.

11.3. ESPECIFICAO DOS OPERANDOS


Modo de endereamento
Por registo
Indirecto por registo
Imediato
Directo
Indexado
Relativo
Baseado
Indirecto
Duplamente indirecto por registo
Implcito

163
Operao
op  RX
op  M[RX]
op  W
op  M[W]
op  M[RX+W]
op  M[PC+W]
op  M[SP+W]
op  M[M[W]]
op  M[M[RX]]

Tabela 11.3: Principais modos de endereamento utilizados.


No modo de endereamento imediato, o valor do operando encontra-se codificado na prpria instruo, usando, se necessrio, palavras de memria adicionais. Este modo de endereamento s pode ser usado em operaes de leitura
de operandos, uma vez que o uso deste modo de endereamento para definir a
localizao do resultado implicaria uma escrita na zona de memria onde est
guardado o cdigo mquina, com a consequente alterao do mesmo.
No modo de endereamento indexado, o contedo do registo indicado adicionado a um valor codificado na prpria instruo para obter o endereo efectivo que deve ser usado pela operao para ler o operando e/ou guardar o
resultado na memria.
No modo de endereamento directo, o endereo efectivo de memria que deve
ser usado pela operao para ler o operando e/ou guardar o resultado especificado na prpria instruo.
Os modos de endereamento relativo e endereamento baseado so casos especiais do endereamento indexado, em que o registo RX toma um valor particular.
No endereamento relativo o registo RX o contador de programa, PC, e no
endereo baseado, o registo RX o apontador para a pilha do processador, SP.
Os dois ltimos modos descritos na Tabela 11.3 so menos utilizados e so
suportados apenas por um pequeno nmero de processadores. No endereamento indirecto, o valor especificado na instruo indica a posio de memria
que guarda o endereo efectivo. No endereamento duplamente indirecto por registo, o contedo do registo indica, de forma similar, a posio de memria que
guarda o endereo efectivo onde se encontra o operando. Estes dois modos de
endereamento requerem assim dois acessos a memria, um para obter o endereo efectivo e outro para obter o operando (ou guardar o resultado) pelo
que so consideravelmente menos utilizados que os anteriormente descritos.
No modo de endereamento implcito, diversos registos, no especificados na
instruo, so utilizados para especificar a posio dos operandos. Uma vez
que a utilizao particular que feita deste modo de endereamento varia de
acordo com a instruo em que utilizado, no possvel sistematizar a sua
utilizao da mesma forma que para os outros modos de endereamento referidos.
As instrues do processador P3 podem especificar operandos usando qualquer um dos modos de endereamento da Tabela 11.3, com excepo dos dois

CAPTULO 11. CONJUNTOS DE INSTRUES

164

ltimos, que no so suportados por este processador. No entanto, no processador P3, apenas um dos operandos pode usar um dos modos mais complexos,
enquanto que o outro operando deve usar necessariamente o modo de endereamento por registo, opo esta muito comum em processadores comerciais.
Diferentes processadores comerciais exibem diferentes filosofias no que respeita aos modos de endereamento suportados e forma como o endereo
dos operandos da instruo obtido a partir dos dados codificados na mesma.
Em particular, a utilizao do conceito de memria segmentada, utilizada, por
exemplo, nos processadores da Intel, implica a existncia de registos que so
usados implicitamente no processo de endereamento. Estes e outros mecanismos de endereamento sero estudados em mais detalhe no Captulo 13.

11.3.5 Utilizao de Pilhas


Uma opo muito utilizada para aceder e guardar operandos em memria consiste no uso de uma pilha (em ingls, stack.). Uma pilha um conjunto contguo
de posies de memria cujo acesso gerido por um registo especial, o apontador de pilha, geralmente denominado SP (em ingls, stack pointer). Conceptualmente, a pilha consiste num conjunto de posies de memria sobrepostas
umas s outras, e s quais apenas possvel aceder uma a uma, a partir do
topo, quer para colocar um dado (operao de PUSH) quer para o retirar (operao de POP). A pilha tem uma base que corresponde posio inferior, que
no deve ser ultrapassada, o que significa que no devem ser retirados dados
que no foram l colocados. Em alguns processadores, a base da pilha especificamente considerada e acessos para l desse limite so impedidos, mas, no
caso do P3, esta verificao no efectuada pelo processador. A forma mais
simples de utilizao permite apenas aceder ao valor guardado no topo da pilha, e que corresponde ao ltimo valor l colocado. Assim, possvel guardarse um valor no topo da pilha usando a operao de PUSH (ou semelhante) ou
recuperar o valor guardado no topo da pilha atravs da operao de POP (ou
semelhante).
Quando um novo valor guardado na pilha, o valor do registo SP incrementado e quando um valor retirado da pilha, o valor do apontador
decrementado, conforme exemplificado na Figura 11.1. Desta forma, o valor
PUSH R1

POP R3

0055h

FF03h
FF02h

00CCh

00CCh

00CCh

FF01h

00BBh

00BBh

00BBh

FF00h

00AAh

00AAh

00AAh

FF02h

FF03h

FF02h

SP

SP

SP

Figura 11.1: Exemplo de uso da pilha do processador.

11.3. ESPECIFICAO DOS OPERANDOS

165

do apontador de pilha indica sempre a posio de memria que representa o


topo da pilha. Considere a sequncia de operaes exemplificada nesta figura.
Inicialmente, o registo R1 tem o valor 0055h, e o apontador de pilha (SP) o
valor FF02h. Aps a instruo de PUSH R1, o valor do registo SP incrementado para FF03h que a posio de memria onde fica guardado o ltimo
valor colocado na pilha. A instruo POP R3 tem como resultado carregar em
R3 o valor que se encontrava no topo da pilha (0055h) e decrementar o valor
do registo SP. Note-se que, embora tal no se encontre representado na figura,
o valor da posio de memria FF03h mantm o valor 0055h aps a operao de POP. No entanto, este valor j no est, de um ponto de vista lgico, na
pilha, pelo que no representado.
Existem numerosas utilizaes para a pilha do processador. Uma das mais
comuns consiste em utilizar a pilha como um espao temporrio para guardar
o valor de registos que so momentaneamente necessrios para outras operaes. Assim, o programador pode decidir colocar os contedos do registos R1,
R2 e R3 na pilha, com o objectivo de libertar estes registos para alguma operao. Quando esta operao estiver terminada, pode retirar os valores da pilha,
pela ordem inversa, repondo assim os valores originais nos registos.
Uma outra aplicao comum para a pilha a passagem de parmetros para
subrotinas. Esta aplicao ser descrita em detalhe na Seco 11.5.2.
Dado que a pilha tem numerosas aplicaes, alguns processadores podem
possuir diversas pilhas, que podem ou no ser acessveis ao programador.
Neste caso, existir mais do que um registo apontador de pilha.
Embora o mecanismo bsico de utilizao de uma pilha seja muito simples,
necessrio tomar algumas precaues para que a mesma seja correctamente
utilizada e no interfira com o funcionamento correcto do processador.
Em primeiro lugar, a pilha deve utilizar uma zona de memria que no seja
utilizada por mais nenhum programa ou subrotina. Para garantir que a zona
de memria usada pela pilha no entra em conflito com as zonas de memria
utilizadas por outros mdulos, importante inicializar o valor do registo SP
(definindo assim implicitamente a base da pilha) com um valor tal que garanta
que, dentro das condies normais de utilizao, o topo da pilha nunca atingir a zona onde o cdigo se encontra nem a zona reservada para dados.
tambm necessrio garantir que existe uma operao de remoo de dados do
topo da pilha para cada operao de insero de dados na mesma. Se no existir esta correspondncia, o valor do apontador de pilha crescer (ou decrescer)
sem parar, acabando as operaes de escrita por corromper zonas de memria
reservadas para outras utilizaes.
de notar tambm que o funcionamento lgico das operaes de PUSH e
POP no se altera se a pilha crescer na direco inversa ilustrada na Figura 11.1, isto , se o registo SP for decrementado quando se insere um valor na
pilha, ao invs de ser incrementado. De igual forma, o valor do registo SP
pode ser alterado antes ou depois da escrita em memria propriamente dita.
No primeiro caso, o registo SP aponta para a primeira posio livre, enquanto
que no segundo caso, aponta para a valor no topo da pilha.
No processador P3, o valor do registo SP decrementado aps uma operao de PUSH. Este decremento efectuado aps a escrita do valor, pelo que o
registo SP aponta sempre para a prxima posio livre.

CAPTULO 11. CONJUNTOS DE INSTRUES

166

11.4 Codificao das Instrues


Na maioria dos processadores, as instrues bsicas de manipulao de dados
actuam sobre um mximo de dois operandos. Por exemplo, uma instruo

 . Para especificar completamente
de adio poder calcular 
=
+
uma instruo deste tipo, necessrio especificar qual o tipo de operao, quais

 e qual a localizao de destino do resultado.
e
os operandos
Para analisar as diversas possibilidades de codificao das instrues de
um processador, considere-se um processador com a seguinte configurao:
Registos: o processador possui 8 registos internos de 16 bits cada um,
numerados de 0 a 7.



Memria: o processador acede a uma memria de  palavras de 16 bits


cada, o que significa que cada posio de memria acedida com um
endereo de 16 bits. Isto corresponde a uma capacidade total de endereamento de 64K palavras ou 128K octetos.
Portos de entrada/sada: os portos de entrada sada so mapeados em
memria, fazendo-se o acesso aos mesmos atravs de instrues normais
de transferncia de dados.
Instrues: o conjunto de instrues contm 40 instrues.
Suponha-se que, para este hipottico processador, se pretende que cada
instruo de dois operandos possa ter como origem e destino qualquer das
possveis localizaes, e observe-se qual o impacto que esta opo tem na codificao das instrues. Analise-se, assim, quantos bits so necessrios para
codificar cada instruo:
Cdigo de operao: uma vez que existem 40 instrues diferentes, sero
necessrios 6 bits para codificar a operao a realizar.
Operandos: cada um dos operandos pode ser especificado usando um
dos 4 primeiros modos de endereamento especificados na Tabela 11.3.
Podem ser utilizados dois bits para indicar qual o modo de endereamento. Para alguns modos de endereamento, necessrio especificar
um registo e um endereo.
Com estas opes, e se se pretender uma codificao uniforme para todas as
instrues, obtm-se a codificao ilustrada na Figura 11.2. A vantagem de
Cdigo
6

Resultado
Modo Reg Ender
2
3
16

Operando 1
Modo Reg Ender
2
3
16

Operando 2
Modo Reg Ender
2
3
16

Figura 11.2: Codificao de uma instruo com trs operandos especificados


com qualquer um dos quatro modos de endereamento permitidos.
um formato uniforme deste tipo clara, uma vez que esta abordagem permite
uma total flexibilidade na especificao dos operandos, que podem estar em
qualquer localizao. Note-se, porm, que esta codificao exige um total de

11.4. CODIFICAO DAS INSTRUES

167

69 bits por cada instruo o que implica que cada instruo ocupe 5 palavras
de memria, ou seja, 10 octetos.
Considere-se, por exemplo, o Programa 11.2, que, utilizando instrues
deste hipottico processador, soma o contedo das posies de memria N1,
N2 e N3, e guarda o resultado, complementado, na posio de memria N4:
ADD
ADD
NEG

R1, M[N1], M[N2]


R1, R1, M[N3]
M[N4], R1

Programa 11.2: Programa em assembly que soma trs nmeros em memria,


para um processador que permite modos de endereamento complexos para
todos os operandos.
Note-se que, embora este cdigo contenha apenas trs instrues, o cdigo
mquina correspondente utiliza 15 palavras de memria.
Em termos de desempenho, esta opo revela-se, em geral, desvantajosa,
uma vez que, no s os programas em linguagem mquina ocupam mais memria do que seria realmente necessria, como acabam por se tornar mais lentos. Com efeito, a superior flexibilidade dos modos de endereamento permitidos contrabalanada pelo tempo que demora a carregar da memria e a
executar uma instruo.
assim vantajoso restringir o nmero de operandos e os modos de endereamento permitidos, ou, pelo menos, permitir a existncia de instrues
com modos de endereamento mais limitados. Uma restrio comummente
adoptada consiste em obrigar a que o resultado da operao seja guardado na
mesma localizao que o primeiro operando. Embora isto implique a destruio do valor guardado neste operando, esta restrio reduz consideravelmente
o nmero de bits necessrio para codificar cada instruo.
Adicionalmente, possvel obrigar a que pelo menos um dos operandos
esteja disponvel em registo. Novamente, isto reduz fortemente o nmero de
bits necessrio para codificar a instruo, embora implique uma considervel
restrio no tipo de operaes que podem ser efectuadas.
Com estas duas restries, possvel usar um formato mais compacto para
representar cada instruo. necessrio utilizar um bit de direco que indicar se o modo de endereamento sem restries aplicado ao primeiro ou ao
segundo operando. Por exemplo, a instruo ADD M[R1+N1],R2 ter o va
lor deste bit igual a para indicar que o modo de endereamento genrico se
aplica ao primeiro operando e, consequentemente, localizao do resultado.
Com esta abordagem, agora possvel utilizar o formato descrito na Figura 11.3. Com esta codificao, cada instruo gasta agora apenas duas palavras
Cdigo
6

Direco
1

Modo
2

Reg
3

Reg
3

Ender
16

Figura 11.3: Codificao de uma instruo em que um dos operandos deve ser
endereado por registo.
de memria. Como contrapartida, j no possvel representar uma instru-

168

CAPTULO 11. CONJUNTOS DE INSTRUES

o como ADD R1,M[N1],M[N2]. No entanto, possvel representar todas as


instrues utilizadas no exemplo da pgina 156, conduzindo ao Programa 11.3
que ocupa apenas 10 palavras de memria para realizar a mesma tarefa, contra
15 na verso anterior. Na prtica, geralmente necessrio utilizar mais do que
MOV
ADD
ADD
NEG
MOV

R1, M[N1]
R1, M[N2]
R1, M[N3]
R1
M[N4], R1

Programa 11.3: Programa em assembly que soma trs nmeros em memria,


para um processador que permite um modo de endereamento complexo apenas para um operando.
um formato para codificar instrues. Assim, uma instruo em que os dois
operandos sejam registos pode ser codificada numa nica palavra de memria,
enquanto que uma instruo que use um modo de endereamento indexado ou
imediato (entre outros) pode necessitar de duas palavras de memria. Nestes
casos, o valor de um bit ou combinao de bits na primeira palavra especifica
o modo de endereamento e a existncia ou no de uma segunda palavra.
Em alguns processadores onde se define como um dos objectivo fundamentais que as instrues mais frequentes sejam codificadas o mais uniformemente possvel e em pouco espao, ainda que perdendo flexibilidade, impe-se
mesmo que todas as operaes lgicas e aritmticas sejam realizadas entre registos. Neste caso, todos os acessos a memria so realizados atravs de operaes de transferncia de dados (LOAD e STORE), pelo que a arquitectura destes
processadores geralmente referida como do tipo load/store.
Num processador deste tipo, poder-se-ia utilizar o seguinte formato para
as instrues que especificam operaes aritmticas, sendo neste caso possvel
codificar instrues como ADD R1,R2,R3 numa s palavra de memria. J as
Cdigo
6

Reg
3

Reg
3

Reg
3

Figura 11.4: Codificao de uma instruo com trs operandos em registos.


instrues de LOAD e STORE necessitam de usar um outro formato, dado que
especificam apenas um registo, mas necessitam de especificar um endereo:
Cdigo
6

Reg
3

Ender
16

Figura 11.5: Codificao de instrues de LOAD e STORE.


A maior eficincia com que so codificadas as instrues aritmticas tem
um custo elevado, uma vez que passa a existir a necessidade de carregar todos
os operandos em registos (usando instrues de LOAD, ou similares) antes de

11.5. CONTROLO DA SEQUNCIA DE EXECUO

169

efectuar qualquer operao. Da mesma forma, quando necessrio guardar


o resultado em memria tem de se executar explicitamente uma operao de
STORE.
A tarefa de somar as trs posies de memria e complementar o resultado
que tem sido usada como exemplo seria implementada pelo Programa 11.4,
num processador deste tipo:
LOAD
LOAD
LOAD
ADD
ADD
NEG
STORE

R1, M[N1]
R2, M[N2]
R3, M[N3]
R4, R1, R2
R4, R4, R3
R4, R4
M[N4], R4

Programa 11.4: Programa em assembly que soma trs nmeros em memria


para um processador do tipo load/store.
Dado que as instrues de LOAD e STORE usam duas palavras de memria,
enquanto que as operaes aritmticas usam apenas uma, este cdigo ocuparia
11 palavras de memria.
Como se pode depreender destes exemplos, a escolha da filosofia a adoptar no que respeita codificao das instrues obedece a muitas restries e
compromissos, tendo tipicamente um grande impacto no desempenho final do
processador. Na Seco 11.7 sero estudados em detalhe os formatos de codificao de instrues do processador P3.

11.5 Controlo da Sequncia de Execuo


Normalmente, os processadores executam sequencialmente instrues que se
encontram em endereos consecutivos de memria. Porm, este fluxo de execuo pode ser interrompido em duas condies: quando executada uma
instruo de controlo e quando atendida uma interrupo.

11.5.1 Instrues de Salto


As instrues de controlo mais simples so os saltos incondicionais, normalmente designados em linguagem assembly por JUMP ou BRANCH. Estas instrues especificam qual o endereo da prxima instruo a ser executada, atravs da manipulao do valor do PC. Em linguagem assembly, este endereo
normalmente especificado atravs da utilizao de um nome simblico. Assim, por exemplo a sequncia de instrues do processador P3 representada
no Programa 11.5 representa um ciclo infinito que incrementa continuamente
o valor do registo R1.
Em muitos casos, necessrio transferir o controlo apenas quando uma
dada condio se verifica. Por exemplo, pode-se querer terminar um ciclo
quando o valor de um contador guardado num dado registo atinge o valor
. Nestes casos, utilizam-se instrues de salto condicional, que apenas transferem controlo para o endereo especificado quando uma dada condio se

170

CAPTULO 11. CONJUNTOS DE INSTRUES


Etiq1:

INC
BR

R1
Etiq1

Programa 11.5: Exemplo de utilizao do salto incondicional.


verifica. Por exemplo, no processador P3, a instruo BR.Z Etiq transfere
controlo para a instruo com rtulo Etiq apenas se a ltima operao aritmtica ou lgica executada teve como resultado o valor .
O troo de cdigo representado no Programa 11.6 ilustra a utilizao das
instrues de salto condicional. Quando a instruo DEC executada, o valor

Etiq:

DEC
BR.Z
MOV
ADD

R1
Etiq
R1, 55AAh
R2,R1

Programa 11.6: Exemplo de utilizao do salto condicional.


de R1 decrementado, ou seja, reduzido de uma unidade. Caso o valor que
resulta desta operao seja igual a 0, a instruo BR.Z Etiq transfere o controlo para a instruo com rtulo Etiq. Caso contrrio, a instruo seguinte
executada. Neste caso, a instruo que carrega o registo R1 com o valor
55AAh.
comum fazer com que a condio de salto dependa da ltima operao
efectuada, uma vez que isso evita que seja necessrio especificar qual a localizao do valor que deve ser testado. Assim, necessrio guardar num registo
bits que mantenham o valor das condies que podem ser testadas por instrues de controlo.
Alguns processadores, porm, adoptam outra estratgia e permitem que
a condio seja obtida por teste de um valor de um registo. Porm, mesmo
neste caso, til guardar o resultado de condies que podem ser testadas em
instrues posteriores. Este resultado guardado num registo chamado registo
de estado do processador. A cada condio corresponde, em princpio, um bit
de estado. Entre as condies que podem ser testadas por instrues deste tipo
encontram-se, tipicamente, as seguintes:
Zero (Z): a condio verdadeira se o resultado da ltima operao foi
zero.
Negativo (N): a condio verdadeira se o resultado da ltima operao
foi negativo.
Transporte (C): esta condio (carry) verdadeira se o resultado da ltima
operao aritmtica teve transporte.
Excesso (O): esta condio (overflow) verdadeira se o resultado da ltima
operao excede a capacidade de representao do processador.
Positivo (P): esta condio verdadeira se o resultado da ltima operao
foi estritamente positivo.

11.5. CONTROLO DA SEQUNCIA DE EXECUO

171

Considere-se, a ttulo de exemplo, a sequncia de instrues do Programa 11.7.



A instruo SUB R1,0004h tem como resultado o valor , que guardado

Etiq1:
Etiq2:

MOV
SUB
BR.Z
BR.N
NOP
NOP

R1, 0003h
R1, 0004h
Etiq1
Etiq2

Programa 11.7: Efeitos da instruo SUB nos valores dos bits de estado.
no registo R1.
Esta operao activa os bits de estado negativo, N, uma vez que o valor obtido negativo, e o bit de transporte, C, uma
 vez que a subtraco conseguida
somando o complemento aritmtico de . Ao mesmo tempo, coloca os bits de
estado Z, P e O a , uma vez que o resultado no foi zero, no positivo, nem
resultou num valor no representvel.
Desta forma, a instruo BR.Z Etiq1 no vai transferir controlo para a
instruo com rtulo Etiq1, uma vez que o bit de estado Z est inactivo. J
a instruo BR.N Etiq2 vai transferir controlo para a instruo com rtulo
Etiq2, dado que o bit de estado N est activo. Note-se que, de uma forma geral, s as instrues de manipulao de dados que envolvem a unidade lgica
e aritmtica (Seco 9.4) alteram os valores dos bits de estado.
Muitos processadores permitem tambm condies de salto que testam diversos bits de estado do processador, para alm dos referidos acima. Pode,
por exemplo, testar-se se o resultado de uma operao foi par, ou se uma dada
condio interna ao processador se verifica.
Existem duas possibilidades para a especificao do endereo de salto. A
primeira possibilidade especificar o endereo de forma absoluta, dando directamente um endereo em memria que contm a prxima instruo a ser
executada. A segunda possibilidade consiste em especificar este endereo de
forma relativa, sendo que a constante usada representa um valor que deve ser
adicionado ao PC. Quando esta possibilidade utilizada, so muitas vezes usados menos bits que os necessrios para descrever um endereo arbitrrio em
memria, uma vez que muitos saltos so para posies de memria relativamente prximas da instruo que est a ser executada.
A vantagem da primeira abordagem permitir que qualquer endereo em
memria seja especificado, independentemente da sua proximidade da instruo que est a ser executada. A segunda abordagem, alm de permitir poupar
espao na codificao das instrues, permite que o programa seja realojvel.
Isto significa que o programa continua a funcionar mesmo que seja copiado
para posies de memria diferentes daquela onde foi inicialmente localizado.
Na prtica, muitos processadores suportam ambos os mtodos de especificao, cabendo ao assembler escolher, de forma transparente para o programador, qual o tipo de salto que resulta da codificao de uma dada instruo.
No processador P3, existem os dois tipos de instrues de salto. Quando
o salto especificado com a instruo de BR, trata-se de uma salto relativo, e
o valor especificado adicionado ao contedo do PC. Quando o salto espe-

172

CAPTULO 11. CONJUNTOS DE INSTRUES

cificado com a instruo de JMP, trata-se de um salto absoluto, sendo o valor


especificado carregado directamente no registo PC. Muitas vezes os saltos relativos podem ser codificados usando menos bits, uma vez que muitos dos
endereos de salto so prximos do endereo actual do PC.
Note-se que, do ponto de vista do programador, estas duas instrues so
praticamente indistinguveis, uma vez que o assembler tem a responsabilidade
de codificar a instruo. Porm, em alguns casos particulares, pode existir interesse em utilizar um dos tipos de salto, especialmente nos casos em que haja
interesse em realojar cdigo mquina, sem utilizar o assembler.

11.5.2 Chamadas a Subrotinas


Um programa bem estruturado tipicamente constitudo por blocos de programa que desempenham uma tarefa bem definida e que so executadas repetidas vezes num programa. Em assembly esta estruturao de um programa em
mdulos conseguida atravs do uso de subrotinas.
Uma subrotina chamada atravs de uma instruo CALL, que, tal como
faria uma instruo de JMP, transfere controlo para a instruo inicial da subrotina. Adicionalmente, porm, a instruo CALL causa o armazenamento do
endereo de onde a subrotina foi chamada para que, quando esta terminar, seja
possvel continuar a execuo com a instruo seguinte instruo CALL. Uma
subrotina terminada com uma instruo de retorno, (RET ou RETURN), que
transfere controlo para a instruo seguinte quela que chamou a subrotina.
Embora diferentes processadores adoptem diferentes alternativas, uma soluo muito comum guardar o endereo de retorno no topo da pilha. Assim,
a instruo de retorno tem simplesmente de repr no contador de programa
o valor guardado no topo da pilha para que seja retomada a sequncia normal de execuo. Outros processadores utilizam mecanismos mais complexos
que permitem melhorar o desempenho, mas um estudo destas alternativas est
fora do mbito deste texto.
A Figura 11.6 ilustra a sequncia de execuo de instrues durante o processo de chamada e retorno de uma subrotina, tal como ela acontece no processador P3. Neste exemplo, a instruo CALL Etiq1 transfere o controlo para a
instruo cujo rtulo Etiq1, carregando este valor no registo PC. O topo da
pilha fica com o valor do endereo da instruo ADD R1,R2, que a instruo que se segue instruo de CALL e o valor do registo SP decrementado
para apontar para a prxima posio de memria2 . Quando, aps a execuo
de todas as instrues da subrotina, a instruo RET finalmente executada,
o endereo de retorno encontra-se no topo da pilha, pelo que basta carregar o
valor do PC com este valor. Para um funcionamento correcto, importante que
a instruo RET encontre a pilha no mesmo estado em que ela se encontrava
quando a subrotina foi chamada, para que o endereo de retorno seja correctamente recuperado. Isto significa que na execuo da subrotina o nmero de
instrues de PUSH e de POP tem de ser igual.
As subrotinas podem ter parmetros, cujos valores so definidos pelo programa principal na altura da chamada da subrotina. A passagem de parmetros para subrotinas pode ser feita de diversas formas. Uma forma comum de
2 No processador P3, a pilha do processador invertida, sendo o valor do apontador de pilha
decrementado quando executada uma instruo de PUSH

11.5. CONTROLO DA SEQUNCIA DE EXECUO

173

CALL Etiq1
ADD R1,R2

...
...

Etiq1 : MOV R3,R4

...
RET

Figura 11.6: Ilustrao do processo de chamada a uma subrotina.


passar parmetros atravs da pilha do processador. Neste caso, define-se a
conveno de que se uma subrotina aceita um certo nmero de parmetros,
estes parmetros se encontram no topo da pilha quando a rotina se inicia. Naturalmente, isto implica que o programa que chamou a subrotina coloque os
parmetros na pilha antes de a chamar. Em relao passagem de parmetros
por registos, esta soluo tem a vantagem de permitir subrotinas recursivas e
de no limitar o nmero de parmetros ao nmero de registos disponveis. O
modo de endereamento baseado permite o acesso a valores que se encontram
na pilha, mas no no topo da mesma. Este modo de endereamento especialmente til para aceder directamente aos parmetros de uma subrotina, sem
que seja necessrio executar explicitamente operaes de POP.

11.5.3 Interrupes
Uma outra situao em que a sequncia normal de execuo das instrues
alterada acontece quando o processador recebe e atende um pedido de interrupo.
Em muitos sistemas, o processador tem de reagir a sinais vindos do exterior,
que sinalizam a necessidade de efectuar algum processamento especfico ou
operaes de entrada/sada. Por exemplo, um perifrico pode querer sinalizar
o processador que uma tecla foi premida, ou que uma palavra foi recebida num
porto srie.
Uma alternativa ao uso de interrupes garantir que o processador amostra, a intervalos regulares, o valor de alguma linha, ou linhas, de entrada/sada.
A esta amostragem regular chama-se, em ingls, polling. O uso de polling impe uma sobrecarga grande ao processador, uma vez que necessrio garantir
que um ou mais portos de entrada/sada so lidos a intervalos de tempo que
no podem ser demasiado longos, conforme discusso na Seco 14.5.1.
Por esta razo, a esmagadora maioria dos processadores permite que um
dispositivo exterior sinalize, de alguma forma, que a sequncia normal de instrues deve ser interrompida e que o controlo deve ser transferido para uma

174

CAPTULO 11. CONJUNTOS DE INSTRUES

subrotina de atendimento. Em sistemas complexos, este dispositivo geralmente um controlador de interrupes, que centraliza os pedidos provenientes
de diversas fontes, os codifica, e os envia para o processador, de acordo com as
suas prioridades.
Embora o mecanismo exacto atravs do qual as interrupes so sinalizadas, identificadas e atendidas varie de processador para processador, a seguinte descrio de alto nvel aplica-se maioria dos processadores comerciais
e ao P3.
Em primeiro lugar, cada processador disponibiliza uma ou mais linhas de
interrupo, que so activadas pelos dispositivos exteriores. O nmero de linhas no corresponde, porm, ao nmero total de origens de interrupes possveis que , em geral, muito superior. Isto possvel porque, aps ter recebido
indicao que a interrupo vai ser atendida, o dispositivo utiliza um dos barramentos exteriores para identificar qual a interrupo que foi activada. Desta
forma possvel, por exemplo, usar apenas uma linha de interrupo e 8 linhas
do barramento de dados para assinalar 256 tipos diferentes de interrupo.
Aps receber a interrupo e o nmero que a identifica, o processador acede
a uma tabela que indica qual o endereo da subrotina que deve ser usada para
atender o pedido. O controlo de execuo ento transferido para esta subrotina, aps salvaguarda do contedo do contador do programa e de outra
informao sobre o estado do processador. Esta informao inclui necessariamente o valor dos bits de estado do processador, mas pode tambm incluir o
valor de outros registos internos cujo contedo possa ser destrudo pela subrotina de interrupo. A salvaguarda desta informao necessria para que a
execuo possa continuar, sem alteraes, na instruo seguinte que estava a
ser executada quando a interrupo foi recebida.
Repare-se que, ao contrrio das chamadas a subrotinas, as interrupes externas ocorrem em qualquer momento sem que o programador o possa prever.
Assim, as interrupes podem surgir em qualquer instante, por exemplo entre
a execuo de uma instruo aritmtica e uma instruo de salto condicional
que testa o resultado dessa instruo.
No processador P3, como na maioria dos outros processadores, o programador pode actuar um bit de estado por forma a impedir que as interrupes
sejam atendidas. Isto pode ser necessrio em zonas de cdigo onde a ocorrncia de uma interrupo pudesse causar comportamentos indesejados.
Existem numerosas variaes a este modo de operao e diversos detalhes
de funcionamento que variam de processador para processador, mas o princpio geral de funcionamento comum a todos eles. O mecanismo de interrupes do processador P3 ser estudado em mais detalhe quando forem descritas
as instrues que controlam o atendimento das mesmas.
Uma funcionalidade tambm existente em muitos processadores consiste
em disponibilizar uma instruo (por exemplo, INT ou TRAP) que aceita um
argumento (o nmero da interrupo) e que faz com que o processador se comporte exactamente como se tivesse recebido uma interrupo. Embora esta instruo possa, em princpio, ser substituda por uma instruo de chamada a
subrotina, algumas diferenas nos detalhes de funcionamento so suficientes
para justificar a sua existncia como uma instruo separada. Este tipo de instrues tambm til na fase de depurao de um programa, em que as rotinas
de interrupo podem ser usadas para analisar o valor de diversos registos e
variveis internas que podem no ser acessveis de outra forma.

11.6. CONJUNTO DE INSTRUES DO PROCESSADOR P3

175

Em geral, as interrupes podem ter 3 origens distintas: podem ser externas, causadas pelo hardware; podem ser internas, despoletadas por uma instruo de TRAP; ou, em processadores mais complexos que o P3, podem ser
causadas por excepes, como por exemplo um acesso incorrecto a memria
ou a execuo de uma diviso por zero.

11.6 Conjunto de Instrues do Processador P3


O processador P3 dispe internamente de 16 registos, R0 a R15, dos quais apenas 8 (R0 a R7) podem ser usados directamente por instrues assembly. O
processador P3 um processador de 16 bits, o que significa que manipula, em
cada instruo, dados de 16 bits.
Neste processador tanto os registos de dados como a memria tambm
se encontram organizados em palavras de 16 bits, pelo que uma operao de
transferncia de dados manipula sempre um valor de 16 bits. Noutros processadores, o nmero de bits transferido em operaes de manipulao de dados
e acessos a memria nem sempre igual ao nmero de bits dos registos. Por
exemplo, no processador Intel 8088, os registos internos so de 16 bits, mas as
transferncias de memria so feitas em blocos de 8 bits, para simplificar a organizao da memria exterior. No entanto, e de uma forma geral, quando um
processador designado como sendo de bits, isto significa que tem capacidade para transferir e manipular dados em blocos de bits.
No processador P3, o registo R0 um registo fictcio, e contm sempre o
valor 0. Isto revela-se muito til uma vez que a constante muitas vezes
utilizada e um acesso a um registo mais rpido que o acesso a uma constante
guardada em memria. Os registos com nmeros entre 8 e 15 so registos
de uso especial cuja utilidade ser estudada no captulo seguinte. Estes registos desempenham funes especficas, no podendo ser manipulados directamente por instrues assembly genricas. Dois destes registos so os registos
PC e SP que podem ser usados em acessos a memria efectuados com os modos de endereamento relativo e baseado. Para uso geral, o programador tem
acesso aos registos R1 a R7. Existe ainda um registo de estado que guarda os
bits de estado do processador.
O processador P3 disponibiliza todas as instrues bsicas de transferncia
de dados, manipulao e controlo que so comuns em processadores comerciais simples. Estas instrues podem classificar-se nas seguintes classes:
Instrues aritmticas: aplicam um operador aritmtico ao operando ou
operandos. Exemplos de operaes aritmticas de dois operandos so a
soma, a subtraco e a multiplicao. Entre as operaes aritmticas de
um operando encontram-se as operaes de incremento e decremento.
Instrues lgicas: aplicam um operador lgico ao operando ou operandos. Exemplos de operaes lgicas de dois operandos so a disjuno
e conjuno, enquanto que o complemento Booleano uma operao lgica de um s operando.
Instrues de deslocamento: aplicam uma operao de deslocamento a
um registo. Os deslocamentos podem ser direita, esquerda, circulares
ou no, aritmticos ou lgicos.

CAPTULO 11. CONJUNTOS DE INSTRUES

176

Instrues de controlo: controlam a sequncia de instrues executada


pelo processador, eventualmente com base no resultado de operaes anteriores.
Instrues de transferncia: copiam ou movimentam dados de uma localizao para outra.
Instrues genricas: agrupam-se nesta categoria um conjunto de instrues que executam diversas operaes sobre o estado do processador, e
que sero analisadas detalhadamente mais tarde.
A Tabela 11.4 contm as mnemnicas das instrues disponveis no processador P3.
Aritmticas

Lgicas

Deslocamento

NEG
INC
DEC
ADD
ADDC
SUB
SUBB
CMP
MUL
DIV

COM
AND
OR
XOR
TEST

SHR
SHL
SHRA
SHLA
ROR
ROL
RORC
ROLC

Controlo

BR
BR.cond
JMP
JMP.cond
CALL
CALL.cond
RET
RETN
RTI
INT

Transferncia

Genricas

MOV
MVBH
MVBL
XCH
PUSH
POP

NOP
ENI
DSI
STC
CLC
CMC

Tabela 11.4: Conjunto de instrues do processador P3.

11.6.1 Instrues Aritmticas


O processador P3 disponibiliza as operaes aritmticas descritas na Tabela 11.5. Todas as operaes aritmticas disponveis actuam sobre operandos
Instruo
Complemento aritmtico
Incrementar
Decrementar
Adicionar
Adicionar com transporte
Subtrair
Subtrair com transporte
Comparar
Multiplicar
Dividir

Mnemnica
NEG
INC
DEC
ADD
ADDC
SUB
SUBB
CMP
MUL
DIV

Exemplo
NEG R1
INC M[R2]
DEC M[R3+A5A5h]
ADD R3, M[R5+4]
ADD R3, M[R6]
SUB R3, M[R5+4]
SUBB R1, R2
CMP R1,R2
MUL R3,R4
DIV R3,R4

Tabela 11.5: Instrues aritmticas do processador P3.


de 16 bits, que, quando representam nmeros com sinal, so descritos em notao de complemento para dois. Em todas as operaes, com excepo da

11.6. CONJUNTO DE INSTRUES DO PROCESSADOR P3

177

multiplicao e diviso, o resultado tambm de 16 e guardado no primeiro


operando, destruindo o valor que se encontrava no mesmo. Por exemplo, a
instruo ADD R1,R2 executa a operao R1  R1 + R2.
No caso da multiplicao, o resultado que tem, naturalmente, 32 bits,
guardado nas localizaes que foram usadas para especificar os operandos, ficando a parte mais significativa guardada no primeiro operando. No caso da
diviso, o resultado guardado no primeiro operando enquanto que o resto da
mesma guardado no segundo operando. Esta opo de projecto leva a que
as operaes de multiplicao e diviso no possam ser usadas com operandos
do tipo imediato. Por outro lado, o algoritmo utilizado para estas operaes
leva a que o seu resultado s faa sentido quando os operandos so nmeros
sem sinal. Pelas mesmas razes, os operandos no podem estar colocados fisicamente no mesmo local, o que significa que uma instruo MUL R1,R1, se
utilizada, resultar num valor incorrecto.
Para simplificar as operaes aritmticas com operandos de mais de 16 bits,
operaes de soma e subtraco com transporte esto tambm disponveis. O
bit de transporte, C, um bit de estado gerado pela unidade lgica e aritmtica,

cujo valor colocado a quando existe um transporte numa operao aritmtica ou de deslocamento.
Uma operao de adio com transporte, como por exemplo, ADDC R1,R2
calcula o resultado de R1+R2+C, onde C o valor guardado no bit de transporte. De forma idntica, a subtraco com transporte, SUBB R1,R2 calcula
R1-R2-C.
Para exemplificar o funcionamento destas operaes, considere-se um caso
simplificado em que se pretendem somar dois nmeros sem sinal, de 8 bits,
mas utilizando apenas registos de 4 bits e utilizando uma unidade lgica e
aritmtica de
4 bits.
Mais concretamente, suponha-se que se pretende
somar

  
, guardado nos registos R1 e R2, com o valor
, guaro valor
dado nos registos R3 e R4.
 

 
Quando se soma o valor
com o valor
, o resultado
, que no
cabe num registo de 4 bits. O bit mais significativo corresponde ao valor do bit
de transporte, e utilizado pela prxima instruo de adio ou subtraco

com transporte. Isso significa que quando se somarem os valores
com


adicionando o bit de transporte se obtm o valor
, sendo assim obtido


o valor final correcto de
.
Assim, no processador P3 a sequncia de instrues do Programa 11.8 calcula correctamente uma soma de dois valores de 32 bits, sem sinal, guardados,
respectivamente, nos registos R1, R2 e R3, R4, ficando o valor resultante guardado no par de registos R1 e R2.
ADD
ADDC

R2, R4
R1, R3

Programa 11.8: Soma de dois nmeros de 32 bits.


Existem tambm instrues aritmticas unrias. A instruo NEG calcula o
complemento aritmtico do seu operando, enquanto que as instrues INC e
DEC incrementam e decrementam, respectivamente, o seu operando.
Finalmente, a instruo de comparao CMP efectua uma subtraco, mas

178

CAPTULO 11. CONJUNTOS DE INSTRUES

sem guardar o resultado. til quando se pretende actualizar os bits de estado


do processador sem alterar nenhum dos operandos envolvidos. Por exemplo,
o troo de cdigo descrito no Programa 11.9 determina e guarda em R2 o endereo da primeira posio de memria que contm um valor igual ao do registo
R1.

Loop:

MOV
INC
CMP
BR.NZ

R2, 0
R2
R1, M[R2]
Loop

Programa 11.9: Determinao da primeira posio de memria que contm um


valor igual ao registo R1.
Os operandos de todas as instrues, excepto a diviso e multiplicao, podem ser nmeros inteiros sem sinal ou nmeros com sinal em representao
de complemento para 2. A interpretao dos resultados depende apenas do
programador, sendo que o bit de estado O (excesso) s tem significado se se
interpretarem os operandos como nmeros com sinal.
Todas as instrues aritmticas alteram o valor dos bits de estado do processador, nomeadamente dos bits Z, N, C e O, que indicam, respectivamente, se
o resultado foi zero, se foi negativo, se gerou transporte e se gerou um valor
maior que o que possvel armazenar.

11.6.2 Instrues Lgicas


A Tabela 11.6 descreve as instrues lgicas do processador P3. As trs primeiras instrues lgicas descritas nesta tabela aplicam aos seus operandos as
Instruo
Conjuno
Disjuno
Disjuno exclusiva
Complemento lgico
Teste

Mnemnica
AND
OR
XOR
COM
TEST

Exemplo
AND R1, M[R3]
OR R1, 00FFh
XOR M[R1], R2
COM M[R2+4]
TEST R5, M[R4]

Tabela 11.6: Instrues lgicas do processador P3.


operaes de conjuno, disjuno e disjuno exclusiva, respectivamente. Estas operaes so aplicadas bit a bit, sendo o resultado guardado na mesma
posio do primeiro operando. A instruo lgica COM calcula o complemento,
bit a bit, do seu nico operando. Finalmente, a instruo TEST aplica o operador conjuno aos seus dois operandos, no guardando o seu resultado, mas
alterando o valor dos bits de estado.
As operaes lgicas alteram o valor dos bits de estado Z e N, mas deixam
inalterados os bits de estado C e O. Com efeito, uma operao lgica nunca gera
transporte nem um valor que no possa ser representado, pelo que estes bits
so deixados inalterados.

11.6. CONJUNTO DE INSTRUES DO PROCESSADOR P3

179

11.6.3 Instrues de Deslocamento


As instrues de deslocamento disponveis neste processador esto descritas
na Tabela 11.7. O funcionamento das instrues de deslocamento foi explicado
Instruo
Deslocamento lgico direita
Deslocamento lgico esquerda
Deslocamento aritmtico direita
Deslocamento aritmtico esquerda
Rotao para a direita
Rotao para a esquerda
Rotao para a direita, com transporte
Rotao para a esquerda, com transporte

Mnemnica
SHR
SHL
SHRA
SHLA
ROR
ROL
RORC
ROLC

Exemplo
SHR R1, 4
SHL M[R1], 2
SHRA M[R1], 2
SHLA M[R2], 4
ROR R4, 15
ROL R4, 1
RORC R4, 15
ROLC R2, 15

Tabela 11.7: Instrues de deslocamento do processador P3.


na Seco 9.4.5, que deve ser consultada para uma descrio mais detalhada
do funcionamento das mesmas.
Para todas estas instrues, um deslocamento direita significa um deslocamento na direco dos bits menos significativos. Estas instrues tm dois
operandos. O primeiro necessariamente um registo ou posio de memria
que o objecto do deslocamento, enquanto que o segundo uma constante
positiva que especifica o nmero de bits do deslocamento que deve ser aplicado ao primeiro operando. A constante pode tomar um valor entre 1 e 15. Em
todas as operaes de deslocamento, o bit de transporte C fica com o valor que
sai do registo.
As instrues de SHR e SHL deslocam direita e esquerda, respectivamente,
o seu operando. Na operao SHR o bit mais significativo preenchido com o
valor . O mesmo acontece para o bit menos significativo na operao SHL.
O deslocamento aritmtico direita semelhante ao deslocamento lgico,
excepto no valor que introduzido no bit mais significativo. No deslocamento
aritmtico, o valor do bit mais significativo aps o deslocamento igual ao seu
valor antes do deslocamento. A diferena entre os deslocamentos lgicos e aritmticos importante quando os mesmos so aplicados a nmeros com sinal.
Com efeito, um deslocamento aritmtico direita tem como efeito dividir por
dois o nmero deslocado, quer o mesmo seja positivo ou negativo. Pelo contrrio, o deslocamento lgico direita no corresponde a uma diviso por dois
quando aplicado a um nmero negativo. Os deslocamentos esquerda lgicos e aritmticos so equivalentes no que respeita ao resultado, mas alteram
os bits de estado de forma diferente, uma vez que o primeiro considerado
uma operao lgica, alterando apenas os bits de estado Z, N, e C enquanto que
o segundo, tal como o deslocamento aritmtico direita, considerado uma
operao aritmtica, alterando todos os bits de estado.
As operaes de rotao ROR e ROL representam deslocamentos circulares,
onde os bits que so deslocados para fora do registo so re-injectados pelo
outro extremo do registo. As operaes de rotao com transporte aplicam
uma operao de rotao ao conjunto do operando mais o bit de transporte.
Assim, numa rotao direita, o bit de transporte injectado na parte alta do

180

CAPTULO 11. CONJUNTOS DE INSTRUES

registo, e o bit menos significativo passa para o bit de transporte. Numa rotao
esquerda passa-se o oposto. Estas operaes afectam os bits de estado Z, N e
C.

11.6.4 Instrues de Controlo


As instrues de controlo disponveis neste processador so as descritas na Tabela 11.8.
Instruo
Salto relativo incondicional
Salto relativo condicional
Salto incondicional absoluto
Salto condicional absoluto
Chamada a subrotina
Chamada condicional a subrotina
Retorno de subrotina
Retorno de subrotina com N parmetros
Interrupo
Retorno de interrupo

Mnemnica
BR
BR.cond
JMP
JMP.cond
CALL
CALL.cond
RET
RETN
INT
RTI

Exemplo
BR Pos1
BR.cond R3
JMP M[R3+1]
JMP.cond Rot1
CALL Rotina1
CALL.cond Rot2
RET
RETN 4
INT 55
RTI

Tabela 11.8: Instrues de controlo do processador P3.


A instruo de salto incondicional JMP Pos transfere o controlo da execuo para a instruo guardada na posio Pos. Esta instruo efectivamente
carrega o contador de programa com o valor especificado. Normalmente,
usado um nome simblico para especificar o endereo de destino, embora
possa ser usada qualquer constante numrica ou mesmo um operando especificado com qualquer um dos modos de endereamento suportados pelo processador.
A instruo de salto condicional JMP.cond Etiq transfere controlo para
a instruo especificada, mas apenas se se verificar a condio cond. possvel especificar qualquer uma das condies descritas na Tabela 11.9. Um teste
de condio refere-se sempre ao resultado da ltima operao que afectou os
bits de estado. Geralmente, esta uma operao aritmtica, lgica ou de deslocamento, embora tambm possa ser uma instruo de outro tipo, como por
exemplo, CMC. Por exemplo, a instruo BR.Z Dest transfere controlo para a
instruo no endereo Dest apenas se a ltima operao que alterou o registo
de estado deu como resultado zero.
A condio C testa o resultado guardado no bit de transporte. A condio
N testa se o ltimo resultado foi negativo, o que em representao de complemento para 2 equivalente a testar se o bit mais significativo do resultado

. A condio P testa se o resultado estritamente positivo. Finalmente, um
teste condio O (excesso ou, em ingls, overflow) d um resultado verdadeiro
se a ltima operao aritmtica deu um resultado que, interpretado como um
nmero inteiro com sinal, no pde ser adequadamente representado pelo processador.
Os bits que definem o valor das condies so guardados no registo de

11.6. CONJUNTO DE INSTRUES DO PROCESSADOR P3


Condio
Zero
No zero
Transporte
No transporte
Negativo
No negativo
Excesso
No excesso
Positivo
No positivo
Interrupo
No interrupo

Mnemnica
Z
NZ
C
NC
N
NN
O
NO
P
NP
I
NI

181

Descrio
ltima operao deu resultado zero
ltima operao deu resultado no zero
ltima operao gerou transporte
ltima operao no gerou transporte
ltima operao deu resultado negativo
ltima operao deu resultado no negativo
ltima operao gerou excesso (overflow)
ltima operao no gerou excesso (overflow)
ltima operao deu resultado positivo
ltima operao no deu resultado positivo
Existe uma interrupo pendente
No existe interrupo pendente

Tabela 11.9: Condies de salto para o processador P3.


estado do processador, que, no entanto, no directamente acessvel ao programador.
As instrues de chamada a subrotina transferem controlo para a posio
do programa especificada, mas apenas depois de guardarem na pilha o contedo do contador de programa. Isto permite que a instruo RET retorne o
controlo para a instruo que se segue instruo de chamada, copiando para
o contador de programa o valor guardado no topo da pilha. Para que este mecanismo funcione correctamente, importante que, dentro de cada rotina, o
nmero de operaes de insero na pilha seja igual ao nmero de remoes.
comum usar a pilha para passar parmetros para uma rotina. Assim,
existe tambm a instruo RETN que, alm de repr o valor do contador de
programa, actualiza o apontador para a pilha por forma a que o nmero de
valores especificado deixe de estar no topo da pilha do processador. Assim,
por exemplo, a instruo RETN 3 retira 3 valores da pilha do processador, e
poder ser usada para retornar de uma rotina que tem 3 parmetros passados
atravs da pilha. A instruo RETN 0 equivalente instruo RET.
A instruo de INT Intnum comporta-se de forma semelhante a uma chamada a uma subrotina, uma vez que transfere controlo para a posio do programa associada interrupo especificada com Intnum. A execuo desta
instruo tem o mesmo efeito que a recepo da interrupo Intnum. Como
foi referido na Seco 11.5.3, isso conseguido guardando na pilha no s o valor do contador de programa, mas tambm o registo de estado do processador.
Isto permite que a instruo de retorno de interrupo (RTI) reponha o estado
completo do processador3 , recuperando o valor do contador do programa e
o registo de estado do processador. Esta instruo deve ser sempre e exclusivamente usada para efectuar o retorno de rotinas de interrupo, que podem
ser chamadas quer atravs da instruo INT quer atravs do mecanismo de
interrupes do processador.
As instrues de controlo no alteram o valor dos bits de estado do proces3 No que respeita ao valor do contador do programa e do registo de estado. A rotina de interrupo poder ter alterado o valor de outros registos.

182

CAPTULO 11. CONJUNTOS DE INSTRUES

sador, ao contrrio do que acontece com as operaes aritmticas, lgicas e de


deslocamento estudadas nas seces anteriores.

11.6.5 Instrues de Transferncia de Dados


Estas instrues permitem copiar palavras ou octetos entre posies de memria ou registos do processador. Tambm so consideradas instrues de transferncia as instrues de manipulao da pilha do processador. O processador
P3 dispe das instrues de transferncia de dados descritas na Tabela 11.10. A
Instruo
Copiar o contedo
Copiar octeto menos significativo
Copiar octeto mais significativo
Trocar o contedo
Colocar na pilha
Remover da pilha

Mnemnica
MOV
MVBL
MVBH
XCH
PUSH
POP

Exemplo
MOV R1, M[R2]
MVBL M[Pos1], R3
MVBL R3, R4
XCH R1, M[R2]
PUSH R1
POP M[R5+4]

Tabela 11.10: Instrues de transferncia de dados do processador P3.


instruo mais bsica de transferncia de dados a instruo MOV POS1,POS2
que copia a palavra guardada em POS2 para POS1. A instruo MVBH POS1,
POS2 copia o octeto mais significativo da posio POS2 para o octeto mais significativo da posio POS1, deixando o octeto menos significativo inalterado.
A instruo MVBL funciona de modo semelhante para o octeto menos significativo. A instruo de XCH troca os contedos das duas localizaes especificadas.
Finalmente, as instrues de PUSH e POP so usadas para manipular a pilha.
Mais especificamente, a instruo PUSH Val coloca na posio de memria
apontada pelo registo SP o valor especificado, e, em seguida, decrementa o
valor do registo SP. A instruo POP Loc comea por incrementar o valor do
registo SP, e em seguida guarda em Loc (que pode ser um registo ou uma
posio de memria) o valor da posio de memria apontada por SP.
As instrues de transferncia de dados no alteram o valor dos bits de
estado, uma vez que a sua principal funcionalidade copiar dados de uma
localizao para outra. Caso seja necessrio alterar o valor dos bits de estado
de acordo com um valor manipulado por uma destas instrues necessrio
executar uma instruo lgica ou aritmtica que opere sobre o valor copiado.
Tipicamente, esta instruo ser a instruo CMP ou TEST.

11.6.6 Outras Instrues


O processador P3 disponibiliza ainda algumas instrues, descritas na Tabela 11.11, que manipulam diversos aspectos do funcionamento do processador.
A instruo ENI d ao processador ordem para aceitar interrupes a partir
deste momento. A instruo DSI faz com que o processador deixe de aceitar
interrupes. Ambas as instrues actuam modificando o valor de um bit do
registo de estado, o bit E, que funciona como bit de controlo do sistema de
interrupes.

11.6. CONJUNTO DE INSTRUES DO PROCESSADOR P3


Instruo
Activar interrupes
Desactivar interrupes
Activar bit de transporte
Desactivar bit de transporte
Complementar bit de transporte
Operao nula

183

Mnemnica
ENI
DSI
STC
CLC
CMC
NOP

Tabela 11.11: Outras instrues do processador P3.

Outras instrues que modificam directamente o valor de bits no registo


de estado so as instrues de STC, CLC e CMC que, respectivamente, activam,
desactivam e complementam o bit de transporte do processador.
Finalmente, a instruo NOP no executa qualquer operao nem altera o
estado do processador. Pode ser usada para preencher temporariamente zonas
de cdigo que possam vir a ser alteradas mais tarde, mas no geralmente
utilizada excepto quando se pretenderem introduzir atrasos de curta durao
em programas.

11.6.7 Exemplos de Utilizao


Considere-se, a ttulo de exemplo, que se pretende programar o processador
P3 para somar 10 posies de memria consecutivas, com incio na posio
Start. O troo de cdigo do Programa 11.10 executa essa operao.

Ciclo:

MOV
MOV
ADD
DEC
BR.NN

R1, 9
R2, R0
R2, M[Start+R1]
R1
Ciclo

; Limpa o registo R2

; Continua se R1>=0

Programa 11.10: Soma das 10 posies de memria com incio na posio


Start.
Inicializando o registo R1 com o valor e iterando at que este registo
atinja um valor negativo, este cdigo soma todas as posies de memria entre M[Start] at M[Start+9], comeando com as posies de endereo mais
alto.
Em alternativa, seria possvel inicializar R1 com o valor e iterar at que

se atinja o valor , que j no deve ser adicionado. Neste caso, o cdigo seria o representado no Programa 11.11. A instruo CMP R1, 10 actualiza os
registos de estado do processador da mesma maneira que a execuo de uma


subtraco. Assim, quando R1 atingir o valor , o bit de estado Z ir ficar a
e o ciclo termina.

CAPTULO 11. CONJUNTOS DE INSTRUES

184

Ciclo:

MOV
MOV
ADD
INC
CMP
BR.NZ

R1, R0
R2, R0
R2, M[Start+R1]
R1
R1, 10
Ciclo

; Limpa o registo R2

; Compara R1 com 10
; Continua se R1-10 <> 0

Programa 11.11: Soma das 10 posies de memria com incio na posio


Start, incrementando o contador.

11.7 Formato das Instrues do Processador P3


As instrues do processador P3 so codificadas em uma ou duas palavras de
memria. A segunda palavra de memria s usada quando o modo de endereamento requer a especificao do endereo de uma posio de memria
ou de um operando imediato, nomeadamente nos modos de endereamento
imediato e indexado. Assim, todas as instrues que usem um destes modos
de endereamento usam duas posies de memria, a segunda das quais especifica o valor da palavra W usada no endereamento.
A Figura 11.7 descreve o formato genrico de uma instruo do processador
P3. Nesta figura, os campos marcados com um ponto de interrogao podem
ou no estar presentes numa dada instruo. Os primeiros seis bits (bits 15 a 10)
15

14

13

12

OPCODE

11

10

7 6 5 4 3 2 1
Descrio dos Operandos ?

W : Operando imediato ?
Figura 11.7: Formato genrico das instrues do processador P3.
da primeira palavra de cada instruo especificam qual o cdigo da operao
a executar (em ingls, operation code, ou mais simplesmente, opcode). A lista
completa dos cdigos de operao para o processador P3 encontra-se na Tabela 11.12. As instrues que no tm operandos nem parmetros apenas usam
o campo que especifica o cdigo de operao. Nas instrues que tm um

operando, existe, na descrio dos operandos, um campo
com dois bits, que
controla o modo de endereamento usado, de acordo com a Tabela 11.13.


Nas operaes que tm dois operandos, o campo


especifica tambm o
modo de endereamento de um dos operandos, sendo o outro operando necessariamente um registo.


A descrio dos operandos inclui outros campos para alm do campo


que especificam os operandos e os parmetros de cada instruo, de uma forma
que ser detalhada em seguida. Esta especificao varia conforme o tipo de
operao e especificada pelo valor dos trs primeiros bits do cdigo de operao.

11.7. FORMATO DAS INSTRUES DO PROCESSADOR P3


Mnemnica
NOP
ENI
DSI
STC
CLC
CMC
RET
RTI
INT
RETN
NEG
INC
DEC
COM
PUSH
POP
SHR
SHL
SHRA
SHLA
ROR
ROL
RORC
ROLC

Cdigo
000000
000001
000010
000011
000100
000101
000110
000111
001000
001001
010000
010001
010010
010011
010100
010101
011000
011001
011010
011011
011100
011101
011110
011111

Mnemnica
CMP
ADD
ADDC
SUB
SUBB
MUL
DIV
TEST
AND
OR
XOR
MOV
MVBH
MVBL
XCH
JMP
JMP.cond
CALL
CALL.cond
BR
BR.cond

185

Cdigo
100000
100001
100010
100011
100100
100101
100110
100111
101000
101001
101010
101011
101100
101101
101110
110000
110001
110010
110011
111000
111001

Tabela 11.12: Cdigos de operao do processador P3.




Endereamento
Por registo
Por registo indirecto
Imediato
Indexado, directo, relativo ou baseado

00
01
10
11

Operao
op = RX
op = M[RX]
op = W
op = M[RX+W]

Tabela 11.13: Modos de endereamento do processador P3.

11.7.1 Instrues sem Operandos


As instrues NOP, ENI, DSI, STC, CLC, CMC, RET e RTI no utilizam qualquer operando e so codificadas como se encontra ilustrado na Figura 11.8. As
0

Figura 11.8: Codificao de instrues sem operandos.


posies definidas com X X X tem um valor diferente para cada uma destas
instrues, de acordo com os valores descritos na Tabela 11.12. Para estas operaes, os 10 bits menos significativos no so usados e o seu valor ignorado.

CAPTULO 11. CONJUNTOS DE INSTRUES

186

As instrues INT e RETN aceitam um parmetro como argumento, que


necessariamente um nmero inteiro, entre 0 e 1023. Este argumento codificado no campo ARG, como se ilustra na Figura 11.9.
ARG
0

Figura 11.9: Codificao de instrues com um parmetro.

11.7.2 Instrues com Um Operando


As instrues NEG, INC, DEC, COM, PUSH e POP aceitam um operando. Para
as quatro primeira instrues, este operando especifica simultaneamente a origem dos dados aos quais vai ser aplicada a operao e o destino a dar ao resultado da mesma. Para a instruo PUSH, o operando determina o valor que ser
escrito na pilha. Para a instruo POP, o operando indica a localizao onde
dever ser guardado o valor que se encontra no topo da pilha. Em qualquer
dos casos, o operando pode ser especificado usando qualquer dos modos de
endereamento descritos na Seco 11.3.4. O modo de endereamento espe
cificado pelos dois bits do campo , de acordo com a Tabela 11.13 e o esquema

da Figura 11.10. O valor do campo  , de 4 bits, usado para especificar o va0

IR1

X
W?

Figura 11.10: Codificao de instrues com um operando.


lor de RX (ver Tabela 11.13), usado de acordo com o modo de endereamento.
Isto permite codificar qualquer valor entre e  , para os registos de uso geral, e
tambm dois outros valores para especificar os registos PC e SP nos modos de
endereamento relativo e baseado. Os quatro bits restantes no so utilizados.
As instrues SHR, SHL, SHRA, SHLA, ROR, ROL, RORC, ROLC aceitam, alm
do operando, um parmetro que pode ser um nmero inteiro entre 1 e 15. Este
segundo operando codificado nos bits 6 a 9 da instruo, de acordo com a
Figura 11.11.
PAR
0

IR1

X
W?

Figura 11.11: Codificao de instrues com um operando e um parmetro.

11.7. FORMATO DAS INSTRUES DO PROCESSADOR P3

187

11.7.3 Instrues com Dois Operandos


As instrues CMP, ADD, ADDC, SUB, SUBB, MUL, DIV, TEST, AND, OR, XOR, MOV,
MVBL, MVBH e XCH usam dois operandos, sendo que o primeiro operando especifica simultaneamente um dos operandos fonte e a localizao onde dever
ser guardado o resultado. Estas instrues so codificadas de acordo com o
esquema da Figura 11.12. Uma vez que, como foi discutido na Seco 11.4,
S
1

IR2

IR1

X
W?

Figura 11.12: Codificao de instrues com dois operandos.


possibilitar a utilizao de um modo arbitrrio de endereamento para ambos
os operandos exigiria instrues demasiado longas, neste processador um dos
operandos , como foi referido anteriormente, especificado usando enderea
mento por registo. Assim, o valor do campo
serve para especificar o modo
de endereamento de apenas um dos operandos. Se o valor de for , o pri
meiro operando endereado com o registo  de acordo com o modo de
endereamento especificado e   usado para aceder ao segundo operando.



Se o valor de for ,  especifica (de acordo com ) qual o segundo operando, e   usado para especificar o primeiro operando.
Em todos os casos, o 
registo ao qual se aplica o modo de endereamento

especificado pelo campo
o registo especificado no campo  do registo
de instruo.

11.7.4 Instrues de Controlo


As instrues de controlo JMP, JMP.cond, CALL e CALL.cond so codificadas
de acordo com o esquema da Figura 11.13.
COND
1

IR1

X
W?

Figura 11.13: Codificao das instrues de salto absoluto




e  so interpretados
Os campos
  da mesma forma do que nas instrues de um operando. O campo
, quando necessrio, codificado de
acordo com a Tabela 11.14.
As instrues de controlo BR e BR.cond so codificadas de acordo com o
esquema da Figura 11.14. O valor do campo
especifica um valor,
relativo ao PC. Um valor de
igual a 0 equivalente instruo de
NOP.
Como discutido na Seco 11.5.1, esta instruo tem a vantagem de ocupar sempre apenas uma posio de memria. A limitao que, como campo
tem apenas 6 bits, os saltos relativos s so possveis at 32 posies
de memria atrs e 31 posies de memria frente da posio actual do PC.

CAPTULO 11. CONJUNTOS DE INSTRUES

188

Condio
Zero
No zero
Transporte
No transporte
Negativo
No negativo
Excesso
No excesso
Positivo
No positivo
Interrupo
No interrupo

Mnemnica
Z
NZ
C
NC
N
NN
O
NO
P
NP
I
NI

Cdigo
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011

Tabela 11.14: Codificao das condies de teste.


COND
1

OFFSET

Figura 11.14: Codificao das instrues de salto relativo.

11.7.5 Exemplos de Codificao


A ttulo de exemplo, considere-se a instruo JMP.NZ R3 que salta para a posio de memria apontada por R3 se o ltimo resultado na unidade lgica e
aritmtica no foi . A codificao desta instruo ser obtida notando que:
O cdigo de operao



(Tabela 11.12).

O modode endereamento por registo, o que significa que o valor do


.
campo
O valor do campo

O valor do campo COND



, por forma a especificar o registo R3.




, de acordo com a Tabela 11.14.

Isto conduz a que a codificao desta instruo seja conseguida com uma s pa



lavra que obtida por concatenao destes valores, ou seja,
o que equivalente a C443h.
Considere-se agora a instruo ADD R1,M[R7+00A0h], ligeiramente mais
complexa, que tem dois operandos e usa um modo de endereamento diferente. A codificao desta instruo obtida considerando que:


O cdigo de operao para a instruo


ADD
. Note-se que o valor

dos dois bits mais significativos , o que indica que uma instruo
de dois operandos.
Esta instruo tem dois operandos, dos quais o primeiro endereado
por registo (R1) e o segundo obtido atravs do uso de endereamento
indexado a partir dos valores do registo R7 e da constante 00A0h. Isto
significa que:

11.8. UM ASSEMBLER PARA O PROCESSADOR P3


O valor do campo
indexado.



189

, para indicar modo de endereamento

O valor do campo , para indicar que o modo de endereamento


se aplica ao segundo operando.


O valor do campo  ,que,


neste caso, usado na especificao do

segundo operando,
, uma vez que o registo utilizado R7.


O valor do campo  
, especificando o registo usado na definio do primeiro operando.
O valor do campo

, na segunda palavra da instruo, ser 00A0h.

Esta instruo assim codificada com duas palavras de memria, que con
    
 
tm os valores
e
, ou seja, 8677h e 00A0h.
Para outros exemplos de codificao, pode consultar-se o exemplo da Seco 11.1, que contm o cdigo em linguagem mquina do P3 e o correspondente cdigo em assembly.

11.8 Um Assembler para o Processador P3


Embora exista uma correspondncia directa entre uma instruo assembly e
uma instruo de linguagem mquina, a traduo manual de um programa
em assembly para a sequncia de bits que constituem a linguagem mquina
um processo penoso e sujeito a erros.
Por esta razo, geralmente utilizada uma ferramenta, o assembler, que traduz um programa de linguagem assembly para linguagem mquina. Alm de
traduzir as mnemnicas das instrues e os valores dos argumentos e dos operandos, o assembler permite que o programador utilize nomes simblicos em
vez de constantes, o que simplifica a tarefa de programar e torna mais legveis
os programas.
A primeira e talvez a mais importante caracterstica de um assembler o
facto de permitir ao programador usar mnemnicas para as instrues e nomes simblicos para os endereos das mesmas. O uso de mnemnicas de
bvia vantagem para o programador, j que evita a memorizao dos cdigos
de operao. Tambm o uso de nomes simblicos para os endereos simplifica consideravelmente a tarefa do programador que, na especificao de uma
instruo de controlo, pode usar um rtulo que o nome simblico do endereo da instruo para onde pretende transferir controlo. Caso no existisse
esta possibilidade, teria de se usar o endereo real da instruo que, por vezes,
no ainda conhecido e est, em todo o caso, sujeito a ser alterado no futuro,
quando outras partes do programa forem modificadas.
Considere-se, por exemplo, o troo de cdigo em assembly descrito no Programa 11.12.
Este troo de cdigo tem como objectivo identificar a primeira posio de
memria cujo contedo igual ao contedo do registo R1, comeando na posio start=0F00h.
Neste troo de cdigo foi usada a directiva ORIG para definir o endereo
de memria onde ir iniciar-se a escrita em memria do cdigo mquina do
programa e a directiva EQU que define a constante start com o valor 0F00h.

CAPTULO 11. CONJUNTOS DE INSTRUES

190

start

ORIG
EQU

; Procura:
;
; Entradas:
; Sadas:

Localiza a primeira posio de memria


que contm o valor do registo R1
R1 - Valor a procurar
R2 - Endereo do resultado

Procura:
CProcura:

MOV
CMP
BR.Z
INC
BR
RET

FimProc:

0A00h
0F00h

R2, start
R1, M[R2]
FimProc
R2
CProcura

;
;
;
;
;
;

Inicializa R2
Compara os valores
Termina se encontrou
Incrementa o ponteiro
Prxima iterao
R2 contm o resultado

Programa 11.12: Programa em Assembly que localiza a primeira posio de memria cujo contedo igual ao do registo R1.

Esta constante pode ser usada mais tarde em qualquer posio onde for necessrio usar o valor 0F00h. As definies de constantes devem vir no incio do
programa, para que possam ser facilmente alteradas. Os nomes das constantes permitem tornar a leitura do cdigo mais fcil por serem mais inteligveis
que um valor numrico. Para alm disso, se se pretender alterar o valor da
constante basta alterar a definio e todo o cdigo fica automaticamente actualizado. Por esta razo, no devem existir constantes numricas dispersas pelo
programa, devendo sempre ser usadas definies das mesmas no princpio do
programa ou mdulo respectivo.
Foram tambm usados comentrios para documentar o programa. Um comentrio comea pelo caracter ;, que indica ao assembler que todo o texto que
se segue nessa linha dever ser ignorado no processo de traduo do cdigo
assembly.
Note-se que as directivas ORIG e EQU no so instrues assembly. Uma
anlise da Tabela 11.15, que contm o cdigo mquina resultante deste cdigo
assembly, revela que no foram geradas nenhumas instrues que correspondam a estas directivas. O resultado das directivas s visvel quando se analisa a primeira instruo mquina gerada (Tabela 11.15), verificando-se que esta
instruo equivalente instruo assembly MOV R2, 0F00h e se localiza na
posio de memria 0A00h. De uma forma geral, podem ser usadas constantes
tanto como operandos de instrues como para especificar endereos de memria. Em segundo lugar, repare-se que foram usados nomes simblicos para
trs endereos de instrues, os rtulos Procura, CProcura e FimProc. Dois
destes rtulos foram utilizados no programa, nas instrues com mnemnica
BR.Z e BR. Desta forma, o programador no tem de lidar com o valor numrico
dos endereos das instrues para onde pretende transferir controlo. O rtulo
Procura, por outro lado, no usado dentro da subrotina, mas poder ser
usado mais tarde por outra subrotina que pretenda usar esta. A chamada subrotina Procura poder ser efectuada atravs da instruo CALL Procura,
no necessitando o programador de conhecer o endereo onde esta rotina ir

11.8. UM ASSEMBLER PARA O PROCESSADOR P3


Endereo
0A00h
0A01h
0A02h
0A03h
0A04h
0A05h
0A06h

Instruo
1010111010100000b
0000111100000000b
1000001001010010b
1110010000000010b
0100010000000010b
1110000000111100b
0001100000000000b

AEA0h
0F00h
8252h
E402h
4402h
E03Ch
1800h

191
Mnemnica
MOV R2, start
CMP R1,M[R2]
BR.Z FimProc
INC R2
BR CProcura
RET

Tabela 11.15: Linguagem mquina da subrotina Procura.

ficar localizada.
O assembler do processador P3 aceita vrias directivas, descritas na Tabela 11.16. Alm das directivas ORIG e EQU, j usadas, o assembler do processador
ORIG
EQU
WORD
STR
TAB

Especifica o endereo de origem do cdigo que se segue


Define o valor de uma constante
Reserva uma posio de memria para uma varivel
Guarda uma cadeia de caracteres em memria
Reserva posies de memria

Tabela 11.16: Directivas para o assembler do processador P3.


P3 aceita trs outras directivas, cujo uso est exemplificado no Programa 11.13.
Abc
Xyz
Texto1
Tabela1

WORD
WORD
STR
TAB

0055h
0011h
Hel,lo
3

Programa 11.13: Exemplo de uso das directivas.


A directiva WORD reserva uma posio de memria para conter uma varivel, que pode mais tarde ser referenciada usando um nome simblico. Permite
ainda inicializar essa posio de memria. No exemplo acima, reserva uma
posio de memria para a varivel Abc, que inicializada a 0055h e uma
posio de memria para a varivel Xyz, inicializada a 0011h.
A directiva STR permite guardar uma cadeia de caracteres em memria. No
caso acima, so reservadas 5 posies de memria, que so preenchidas com
os valores ASCII da cadeia de caracteres Hello e o nome simblico Texto1
fica definido com o valor do endereo da posio de memria onde comea a
cadeia. O terceiro argumento desta directiva consiste numa lista de elementos,
separada por vrgulas, onde cada elemento pode ser uma cadeia de caracteres,
comeada e terminada pelo smbolo ou uma constante numrica. As cadeias
de caracteres so substitudas pelos seus valores ASCII, concatenadas umas
com as outras (ou com argumentos numricos, caso existam) e o resultado
guardado em memria.

192

CAPTULO 11. CONJUNTOS DE INSTRUES

Finalmente, a directiva TAB reserva posies de memria, inicializadas a


, que podero ser usadas para guardar uma tabela, cujo princpio pode ser
referenciado com um nome simblico. No exemplo acima, so guardadas trs
posies de memria e definido o nome simblico Tabela1.
Se se assumir que as directivas acima apareciam no princpio do programa,
antecedidas de uma directiva ORIG 0000h, as primeiras 10 posies de memria ficariam preenchida de acordo com a Tabela 11.17. Ficariam ainda deEndereo
0000h
0001h
0002h
0003h
0004h
0005h
0006h
0007h
0008h
0009h

Instruo
0055h
0011h
0048h
0065h
006Ch
006Ch
006Fh
0000h
0000h
0000h

Tabela 11.17: Contedo das posies de memria, de acordo com as directivas


do Programa 11.13.
finidas as constantes Abc, Xyz, Texto1 e Tabela1 com os valores 0000h,
0001h, 0002h e 0007h, respectivamente, constantes estas que podem ser utilizadas noutro contexto para referenciar os respectivos endereos.

11.9 Programao em Linguagem Assembly


Como em qualquer linguagem de programao, o uso de tcnicas de programao estruturada fundamental para que seja possvel levar a bom termo um
projecto de programao. No entanto, o uso de uma estrutura modular num
programa em assembly talvez ainda mais importante do que em linguagens
de alto nvel, por duas razes. Em primeiro lugar, quando se usa linguagem assembly so geralmente necessrias mais instrues para realizar uma operao
do que numa linguagem de alto nvel, o que torna os programas consideravelmente mais extensos. Em segundo lugar, a legibilidade de um programa escrito
em assembly consideravelmente menor, dada as maiores restries impostas
ao formato do programa e ao uso de nomes de variveis.
assim importante fugir tentao de comear a programar imediatamente, sem passar por uma fase de definio da estrutura do programa. Esta
definio, que pode ser feita quer em termos de fluxograma quer em termos de
pseudo-cdigo, a parte mais importante de qualquer projecto de programao em assembly e deve ser aquela a que se dedica mais tempo.
Se este tempo no for usado aqui, a fase de programao detalhada ser,
com elevada probabilidade, muito mais extensa, acabando o projecto por demorar mais tempo na sua totalidade. A fase de definio da estrutura do programa permitir definir e perceber bem o problema e dividi-lo em problemas

11.9. PROGRAMAO EM LINGUAGEM ASSEMBLY

193

mais simples, sem a preocupao de conhecer detalhes relacionados com a linguagem de programao.

11.9.1 Programao Estruturada em Assembly


O uso de subrotinas est directamente relacionado com a estruturao do programa. A cada bloco definido na fase de estruturao do programa corresponder uma ou mais subrotinas. Uma subrotina dever ter bem definido:
A sua funcionalidade
Os parmetros de entrada e sada
Registos e posies de memria alterados na subrotina
Com uma boa estruturao do trabalho, cada subrotina pode e deve ser
desenvolvida e testada independentemente do resto do cdigo. Isto permitir
que a construo do programa final, obtido atravs da ligao de subrotinas,
seja feita com relativa simplicidade e rapidez uma vez que a maioria dos erros
de programao j foram detectados na fase de teste de cada mdulo. Pelo
contrrio, sempre de evitar o procedimento que consiste em juntar vrias
subrotinas ainda no testadas, com o objectivo de depurar o programa na sua
totalidade. Verifica-se que os erros so extremamente difceis de identificar e
resolver nesta fase, mesmo que sejam relativamente simples quando analisados
ao nvel de uma subrotina.
Dada a relativa ilegibilidade de um programa em assembly, o uso de comentrios que documentem o funcionamento das subrotinas e de partes importantes das mesmas fundamental.
Cada subrotina dever, assim, ter um cabealho que documente devidamente cada um dos trs pontos identificados acima. Alm disso, partes complexas ou menos bvias de cada subrotina devero ser comentadas independentemente.
A utilizao de constantes numricas embebidas no cdigo dificulta a manuteno e alterao posterior do mesmo, alm de ser uma fonte de possveis
erros que so difceis de identificar. A metodologia que dever ser adoptada
a definio de todos os valores de constantes numricas no incio do programa
utilizando a directiva EQU.
Embora seja possvel usar os registos ou posies de memria para passar
parmetros para subrotinas, esta soluo no permite a utilizao de subrotinas
recursivas. Por essa razo, em muitos casos utilizada a pilha para efectuar
a passagem de parmetros. Quando se utiliza esta abordagem, os parmetros
devero ser colocados na pilha e, dentro da rotina, devero ser acedidos atravs
de acessos pilha. O tipo de parmetros aceites e a ordem pela qual eles devem
ser passados deve ser documentados no cabealho da subrotina.

11.9.2 Exemplo de Programao em Assembly


Para ilustrar os conceitos descritos acima, projecta-se em seguida um programa
em assembly para um problema especfico. O programa a desenvolver dever
copiar um texto de um porto de entrada e escrev-lo num porto de sada com
a primeira letra de todas as palavras em maisculas. Neste problema, o nico

194

CAPTULO 11. CONJUNTOS DE INSTRUES

separador de palavras o espao e o fim do texto indicado por um caracter


especial, @.
A primeira fase consiste em definir a estrutura global do programa. Numa
primeira abordagem, o programa pode ser dividido em trs blocos, que correspondem aos blocos do fluxograma na Figura 11.15. Este fluxograma, embora

L Texto

Processa Texto

Escreve Texto

Figura 11.15: Fluxograma para o programa principal.


simples, define que, numa primeira fase o texto lido do porto de entrada e
escrito em memria; na segunda fase, o texto processado em memria; e na
terceira fase, o texto modificado em memria escrito para o porto de sada.
Nesta fase, deve tambm ser definido que a subrotina que l o texto retorna o
nmero de caracteres lidos, para uso dos mdulos seguintes. Os trs passos
indicados na figura ainda no so to simples que a sua realizao seja bvia,
pelo que cada um desses blocos deve agora ser refinado.
O bloco que l o texto pode ser realizado de acordo com o fluxograma da
Figura 11.16. Esta subrotina l o texto, caracter a caracter, e escreve-o em memria, testando cada caracter para ver se o caracter que indica o fim do texto
e verificando se se atingiu o tamanho mximo permitido para o texto4 . Com
este nvel de detalhe j fcil transpor o fluxograma para linguagem assembly
e criar a subrotina correspondente, descrita no Programa 11.14. Uma vez que o
programa em assembly geralmente escrito usando um editor de ficheiros que
no tem suporte especial para a programao neste ambiente, conveniente
utilizar uma formatao que melhore a legibilidade do programa. Em geral,
cdigo assembly escrito em quatro colunas: rtulos, mnemnica da instruo
assembly, operandos e comentrios.
Note-se que no programa no aparecem constantes numricas, mas sim
constantes que sero definidas no cabealho do programa. Neste caso, definiram-se: fim_txt, cdigo do caracter que indica o fim de texto; Texto,
primeira posio de memria reservada para o texto; e max_car, nmero de
4 Nesta soluo simples para o problema no devolvida qualquer indicao se a leitura terminou por ter sido recebido o carcter @ ou por ter sido atingido o nmero mximo de caracteres
possvel.

11.9. PROGRAMAO EM LINGUAGEM ASSEMBLY

195

Inicializa Apontador

L Caracter

Sim

Fim Texto ?

No
Copia para Memria

Incrementa
Apontador

Sim

Max. Car ?

No

Figura 11.16: Fluxograma da subrotina de leitura de caracteres.


; LeTexto:
;
; Entradas:
; Sadas:
; Efeitos:
LeTexto:
CicloLeit:

FimLeTexto:

efectua a leitura caracter a caracter


e preenche a zona Texto
R2 - numero de caracteres lidos
altera o registo R1
MOV
R2, R0
; inicializa R2
CALL
LeCaracter
; l um caracter
CMP
R1, fim_texto
BR.Z
FimLeTexto
MOV
M[R2+Texto], R1
INC
R2
CMP
R2, max_car
BR.NZ CicloLeit
RET

Programa 11.14: Subrotina de leitura de texto assembly.

caracteres mximo para o texto. A leitura de um caracter feita pela subrotina


do Programa 11.18. Esta subrotina espera que exista um caracter no porto de

CAPTULO 11. CONJUNTOS DE INSTRUES

196

entrada, at o retornar. Assumiu-se aqui que uma leitura do porto de controlo


devolve caso nenhum caracter tenha sido introduzido desde a ltima leitura
do porto de entrada que corresponde ao teclado. necessrio agora especi; LeCaracter:
; Entradas:
; Sadas:
; Efeitos:
LeCaracter:

efectua a leitura de um caracter


R1 - caracter lido
altera o registo R1
CMP
R0, M[controlo]
BR.Z LeCaracter
MOV
R1, M[in_port]
RET

; Ciclo de espera
; L o caracter

Tabela 11.18: Subrotina de leitura de um caracter.


ficar o bloco que processa o texto. Um possvel fluxograma para esse bloco
o da Figura 11.17. Neste bloco avana-se caracter a caracter, em memria,

Inicializa Apontador
Incrementa
Apontador
Sim

No

Fim Texto ?

Sim

Espao ?
No

Torna Maiscula
Torna Minscula

Incrementa
Apontador
No
Fim Texto ?
Sim

Espao ?

No

Sim

Figura 11.17: Fluxograma do bloco de processamento de texto.


convertendo cada letra a seguir a um espao numa letra maiscula at que se
tenha processado o nmero de caracteres lidos. A converso de minsculas
para maisculas pode ser efectuada aplicando a operao AND, que usa o facto

11.9. PROGRAMAO EM LINGUAGEM ASSEMBLY

197

de, no cdigo ASCII, os cdigos para a minscula e maiscula de uma dada



letra diferirem apenas no sexto bit, que , respectivamente, para minscula
e para maiscula. A operao inversa conseguida com a operao OR. A
alterao do valor do sexto bit efectuada com a ajuda de uma mscara, que
tem apenas esse bit a 1.
Tambm aqui se chegou a uma representao suficientemente simples para
que seja possvel escrever o cdigo assembly para esta subrotina, descrito no
Programa 11.15. Note-se que existe uma correspondncia entre o fluxograma e
; ProcTexto:
; Entradas:
; Sadas:
; Efeitos:
ProcTexto:

CicloExt:

Incr1:

Incr2:
FimProcTexto:

Converte em maiscula o primeiro caracter


de cada palavra
R2 - numero de caracteres
modifica o texto em memria;
altera registos R1, R3 e R4
MOV
R3, R0
; inicializa R3
MOV
R4, mascara
; Complemento da
COM
R4
; mscara
CMP
R3, R2
BR.Z FimProcTexto
MOV
R1, M[R3+Texto]
CMP
R1,
BR.Z Incr2
AND
R1, R4
; torna maiscula
MOV
M[R3+Texto], R1
INC
R3
CMP
R3, R2
BR.Z FimProcTexto
; Fim de texto
MOV
R1, M[R3+Texto]
CMP
R1,
BR.Z Incr2
OR
R1, mascara
; torna minscula
MOV
M[R3+Texto], R1
BR
Incr1
INC
R3
; prxima palavra
BR
CicloExt
RET

Programa 11.15: Subrotina de processamento do texto.


o cdigo.
Finalmente, falta especificar o bloco de impresso do texto. Um possvel
fluxograma para este bloco o da Figura 11.18. Dada a simplicidade deste
bloco, possvel fazer uma traduo imediata para linguagem assembly, resultando no cdigo do Programa 11.16.
O programa principal, descrito no Programa 11.17, corresponde ao fluxograma da Figura 11.15, ser simplesmente uma sequncia de chamadas s subrotinas j definidas, antecedido das directivas necessrias, que definem a origem do programa e os valores das constantes e variveis usadas no programa

CAPTULO 11. CONJUNTOS DE INSTRUES

198

Inicializa Apontador

Imprime Caracter

Incrementa
Apontador
Sim

Fim Texto ?

No

Figura 11.18: Fluxograma do bloco de escrita de texto.


;
;
;
;
;

Imprime:
Entradas:
Sadas:
Efeitos:

Imprime:
CicloImp:

escreve o texto no porto de sada.


R1 - incio do texto
R2 - nmero de caracteres no texto
altera os registos R3 e R4
MOV
MOV
MOV
INC
INC
CMP
BR.NZ
RET

R3, R0
R4, M[R1]
M[out_port], R4
R1
R3
R3, R2
CicloImp

; inicializa R3
; escreve caracter

; verifica terminou

Programa 11.16: Subrotina de escrita do texto modificado.

e subrotinas.

Sumrio
Neste captulo estudaram-se algumas das possveis alternativas para a arquitectura do conjunto de instrues de micro-processadores e apresentou-se o
conjunto de instrues do processador didctico P3. Este conjunto de instrues, tpico de processadores simples de segunda gerao, inclui instrues de
controlo, transferncia e manipulao de dados. Foi tambm descrita a lin-

11.9. PROGRAMAO EM LINGUAGEM ASSEMBLY

199

; Definio de constantes
fim_texto EQU
@
controlo
EQU
FFFDh
max_car
EQU
100h
in_port
EQU
FFFFh
out_port
EQU
FFFEh
mascara
EQU
0020h
; Definio de variveis
ORIG 8000h
Texto
TAB
max_car

Inicio:

ORIG
MOV
MOV
CALL
CALL
MOV
CALL
BR

0000h
R1, F000h
SP, R1
LeTexto
ProcTexto
R1, Texto
Imprime
Inicio

; Inicializa a pilha

; Parmetro para Imprime

Programa 11.17: Programa principal.

guagem assembly do processador P3 que permite efectuar a sua programao


utilizando um conjunto de mnemnicas em vez de linguagem mquina.
Foi tambm estudada a forma como a linguagem assembly traduzida para
linguagem mquina, tendo sido descrita a forma como cada instruo codificada.
Finalmente, foi apresentado um conjunto de regras e recomendaes que
devero ser adoptadas sempre que se desenvolvam programas em linguagem
assembly, uma vez que tornam o processo de desenvolvimento mais simples e
isento de erros.

200

CAPTULO 11. CONJUNTOS DE INSTRUES

Captulo 12

Estrutura Interna de um
Processador
No captulo anterior definiu-se a arquitectura do conjunto de instrues do
processador P3. A arquitectura do conjunto de instrues define a interface
visvel para o programador, especificando as instrues que esto disponveis,
quais os registos internos, os modos de acesso memria e outras caractersticas relevantes do processador.
Para uma dada arquitectura do conjunto de instrues, existem muitas realizaes possveis para a estrutura do processador. As numerosas realizaes
possveis resultam do grande nmero de escolhas que esto disponveis ao
projectista de sistemas digitais e implicam diferentes compromissos entre o nmero de ciclos de relgio necessrios para executar cada instruo, a frequncia
mxima de relgio possvel para o sistema e a rea ocupada em silcio para a
realizao fsica do processador.
Este captulo descreve em detalhe uma realizao particular do processador
P3 e descreve os diversos compromissos que so inerentes s escolhas tomadas,
focando, quando tal julgado oportuno, as alternativas mais bvias e as razes
pelas quais as mesmas foram preteridas em detrimento da implementao descrita.
Como qualquer circuito complexo, til analisar o processador P3 considerando separadamente duas componentes principais, tal como foi estudado no
Captulo 9: o circuito de dados e o circuito de controlo.
No circuito de dados encontra-se toda a lgica regular que usada para armazenar e processar dados do utilizador, lgica esta que opera, de uma forma
geral, sobre conjuntos de dados organizados em octetos e palavras. Fazem
parte do circuito de dados o banco de registos, a unidade lgica e aritmtica,
os circuitos de acesso a memria e portos de entrada/sada e ainda os barramentos de interligao internos.
O circuito de controlo gera os sinais que controlam o circuito de dados, por
forma a que este execute a sequncia de operaes que so necessrias para
carregar e executar cada instruo assembly, tendo em conta o estado do circuito
de dados.
201

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

202

12.1 Circuito de Dados


O circuito de dados do processador P3, esquematizado na Figura 12.1, tem
cinco componentes principais: o banco de registos, a unidade lgica e aritmtica, o registo de instruo (RI), o registo de estado (RE), e, por ltimo, os
circuitos de interligao e multiplexagem de dados.
O banco de registos, cuja estrutura interna foi descrita na Seco 7.5.4, contm 16 registos, R0 a R15 de 16 bits cada e acedido atravs de dois portos de
leitura (portos A e B) e um porto de escrita (porto D). Dois destes registos so
registos de uso especial, o contador de programa PC e o apontador para a pilha
SP.
A unidade lgica e aritmtica, descrita em detalhe na Seco 9.4, utilizada
para realizar todas as operaes lgicas e aritmticas sobre os operandos que
so fornecidos pelo banco de registos.
O registo de instruo, RI, um registo de uso especial que no est integrado no banco de registos. Este registo no precisa de ser acedido directamente pelo circuito de dados. No entanto, todos os seus bits so usados pela
unidade de controlo.
O registo de estado, RE, agrupa os diversos bits de estado do processador,
ligados ao circuito de dados atravs de dois barramentos de 5 bits que permitem ler e escrever este registo.
16
WR
SelAD
SelB

Banco de
Registos

Reset

16

16
0

MA

MUXA


16
0

MB

MUXB


WM


16

FIN

LF
16

FR

CULA

ULA

FM

BUS B

16

BUS A

16

Estado

Memria

Endereo
Escrita de dados
Leitura de dados

16

RE
Registo de Estado
FOUT

5
000h

11

16
MD
2

MUXD

12
CONST
LI

RI

0000

Figura 12.1: Circuito de dados do processador P3.


Os circuitos de acesso memria so constitudos pelo barramento de en-

12.1. CIRCUITO DE DADOS

203

dereos e por dois barramentos de dados, um para escrita, outro para leitura.

O barramento de endereos est ligado ao porto do banco de registos, en
quanto que o barramento de dados est ligado ao porto . O barramento de
leitura de dados est ligado ao porto de escrita do banco de registos. Estas ligaes permitem executar uma leitura de memria para o banco de registos,
 
atravs do controlo dos portos e do
 banco
 de registos, ou uma escrita na
mesma, atravs do controlo dos portos e .
O funcionamento do circuito de dados controlado pela palavra de controlo, sendo o funcionamento de cada um dos blocos descrito em detalhe nas
seces seguintes.

12.1.1 Banco de Registos


O banco de registos foi estudado na Seco 7.5.4 e utilizado quase sem modificaes no circuito de dados do processador. A nica alterao que o registo
R0 toma, neste caso, sempre o valor 0. O sinal de controlo de escrita,  , ge 
rado
 pela
   os valores nos barramentos
 unidade de controlo, assim como
e
, de 4 bits cada. O valor de
especifica qual o registo cujo con
tedo colocado no porto e, simultaneamente, qual o registo em que dever

ser
 escrito o valor contido no porto , se o sinal  estiver activo. O valorde
especifica qual o registo cujo contedo dever ser colocado no porto .
Para que seja possvel flexibilizar o controlo da unidade lgica e aritmtica,
o registo R0 contm sempre o valor 0. Isto permite seleccionar 0 como um dos
operandos e efectuar diversas operaes que, doutro modo, necessitariam de
uma unidade lgica e aritmtica mais complexa. Na prtica, o registo R0 no
um verdadeiro registo, uma vez que implementado ligando as linhas do
barramento directamente ao nvel lgico 0, atravs de buffers de trs estados.
Com a excepo do registo R0, todos os outros registos podem ser usados
para guardar valores. No entanto as funes de alguns dos registos esto prdefinidas, de acordo com a Tabela 12.1.
Note-se que todos os registos que esto destinados a funes especficas
tem nmero superior a 7. Isto impede que um programa codificado ao nvel
do assembly tenha acesso aos mesmos e perturbe o funcionamento normal do
processador, uma vez que, ao nvel do assembly, o programador apenas pode
aceder aos registos com nmeros entre 0 e 7.
Entre os registos de uso especial, encontram-se o R14 e o R15. O registo R14
o registo apontador da pilha, SP. este registo que usado para enderear
a memria quando se executa uma operao que manipule directa (POP ou
PUSH) ou indirectamente (CALL, INT, RET e RTI) a pilha do processador.
O registo R15 guarda o valor do contador de programa, PC, que, aps a
execuo de cada instruo, aponta sempre para a prxima instruo que o
processador ir executar.
Alterar o valor de qualquer um destes registos fora do seu contexto normal
de utilizao ir interromper o funcionamento normal do processador. Assim,
o seu uso para quaisquer outras funes dever ser sempre evitado.
Os registos R11 a R13 esto tambm destinados a funes especficas, mas
o seu significado s se tornar claro quando se analisar a forma como so executadas as instrues assembly, na Seco 12.3.

204

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR


Registo
R0
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R13
R14
R15

Descrio
Constante 0
Registo de uso geral
Registo de uso geral
Registo de uso geral
Registo de uso geral
Registo de uso geral
Registo de uso geral
Registo de uso geral
Registo de uso restrito
Registo de uso restrito
Registo de uso restrito
Operando (SD)
Endereo destino (EA)
Resultado (RD)
Apontador da pilha (SP)
Contador programa (PC)

Tabela 12.1: Banco de registos.

12.1.2 Unidade Lgica e Aritmtica


A unidade lgica e aritmtica (ULA) usada por este processador a que foi
estudada na Seco 9.4, e que se reproduz na Figura 12.2.
A

B
n

Unidade
Aritmtica
p

Palavra de
Controlo

Unidade
Lgica
q

Unidade de
Deslocamento
r

0 1 2 3
Sel MUX
n

Resultado

Figura 12.2: Estrutura da unidade lgica e aritmtica.

A unidade lgica e aritmtica controlada por 5 bits de controlo,


 .O
valor destes 5 bits especifica, de acordo com a Tabela 9.1, qual a operao que
a ULA executa sobre os dois operandos na sua entrada. Estes dois operandos
 
so provenientes dos portos e do banco de registos.
Os quatro bits de estado gerados pela ULA esto ligados ao registo de estado, cujo funcionamento ser detalhado na Seco 12.1.4.

12.1. CIRCUITO DE DADOS

205

12.1.3 Registo de Instruo


O registo de instruo, RI, encontra-se ligado directamente ao barramento de
leitura de dados a partir da memria, utilizado para guardar o cdigo mquina da instruo assembly que est a ser executada.
Os 16 bits deste registo codificam, como foi descrito na Seco 11.4, qual a
operao que deve ser executada e quais os operandos aos quais a mesma deve
ser aplicada. De uma forma geral, o contedo deste registo no passa no circuito de dados, excepto na primeira fase de execuo de uma instruo, em que
o registo de instruo carregado a partir de memria. O carregamento deste
registo controlado pelo valor do sinal  , gerado pela unidade de controlo.
Para algumas operaes, necessrio ler um ou mais campos do registo de
instruo para o circuito de dados. Assim, possvel seleccionar o contedo

do registo de instruo para a entrada no porto da ULA, activando o sinal

.

12.1.4 Registo de Estado


O registo de estado, RE, guarda os bits de estado do processador, permitindo ao
programador testar o resultado da operao anterior e manter diversos bits de
estado, que so actualizados de acordo o resultado das operaes efectuadas
pela unidade lgica e aritmtica.
Quando o sinal de controlo  est a , o valor dos bits de estado actualizado de acordo com o resultado da ltima operao efectuada pela ULA. Para


isso, o correspondente bit na mscara
dever estar a , de acordo com a
Figura 12.3 definida pela unidade de controlo e no visvel pelo programador

ao nvel do assembly. Os bits de micro-estado, e , so actualizados em todos

Figura 12.3: Bits da mscara

FM 3

FM 2

FM 1

FM 0

que controla a actualizao dos bits de estado.

os ciclos de relgio. A unidade de controlo define, em cada ciclo de relgio,


quais os bits de estado que devem ser actualizados, de acordo com o que foi
referido na Seco 11.6.1 sobre o modo como cada instruo assembly actualiza
os mesmos.

Quando o valor de  est a , o registo de estado carregado com um


valor proveniente do barramento
, atravs do barramento
. Independentemente do valor dos sinais de controlo, o registo de estado pode ser

carregado no banco de registos, atravs do porto , usando para tal o barramento
.
A Figura 12.4 descreve o esquema interno do registo de estado. O funcionamento do registo de estado controlado por
 sinais activados pela unidade de
controlo e por quatro bits de estado   ,  ,  ,  , gerados pela unidade
lgica e aritmtica.
Quando o sinal  activado pela
 unidade
 de controlo, o registo de estado
carregado a partir do barramento
.

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

206
FIN

FR
4

LF

ZR

0 1
MUX

FM 3
LF

LD

CR

LF

LF
E

0 1
MUX

FM 2
LD

LF

OR

0 1
MUX

FM 1
LD

0 1
MUX

LF
FM 0

LD

LF
Z

NR

LD

LF
C

LF
N

FOUT

Figura 12.4: Esquema interno do registo de estado.


Alm dos bits Z, C, N e O, cujo significado foi descrito na Seco 11.6.4, existe
ainda o bit E que controla se o processador deve ou no responder a interrupes e cujo valor no vem da ULA, mas sim atravs da entrada
. Note-se
que o sinal P no corresponde a um bit no registo de estado, uma vez que este
bit gerado pela lgica representada a partir dos valores dos bits Z e N.

12.1.5 Barramentos de Interligao


Os dois portos de leitura do banco de registos alimentam a unidade lgica e
aritmtica atravs dos multiplexadores MUXA e MUXB, que atacam os barramen
 

tos
e
.


contm o endereo
Quando efectuado um acesso memria, o
 
que dever ser acedido. No caso de uma operao de escrita (sinal
a ),


o valor no barramento
especifica qual o valor que dever
ser escrito.



No caso de uma leitura (sinal
a ), o multiplexador
dever ser
controlado por forma a seleccionar o valor devolvido pela memria, colocando


o valor de
a . Neste caso, o valor
 lido
 da memria escrito para o registo
especificado pelo sinal de controlo
, devendo o sinal de escrita no banco
de registos,  , estar activado.

12.1.6 Controlo do Circuito de Dados


O controlo do circuito de dados feito atravs da palavra de controlo, descritos
na Tabela 12.2. Cada um dos sinais descritos nesta tabela controla o funcionamento de um dos elementos do circuito de dados, tal como descrito nas seces
anteriores.
Para se perceber melhor o funcionamento deste circuito de dados, consideramse em seguida alguns exemplos que permitem ilustrar as operaes de transferncia entre registos possibilitadas pelo mesmo.
Suponha-se, por exemplo, que se pretende somar o contedo do registo R3
com o contedo do registo R7 e deixar o resultado no registo R3, alterando
os valores dos bits de estado C e Z. Que valores devem tomar as variveis de
controlo do circuito de dados?

12.1. CIRCUITO DE DADOS


Sinal

 
   
 














# bits
1
4
4
1
1
2
1
1
1
1
4
5
12

207

Funo
Inicializa o contedo dos registos a
Controla os portos A e D do banco de registos
Controla o porto B do banco de registos
Controlo do multiplexador A
Controlo do multiplexador B
Controlo do multiplexador D
Escrita no banco de registos
Escrita em memria
Carrega os bits de estado
Carrega o registo de instruo
Controla a actualizao dos bits de estado
Controla operao a executar na ULA
Valor de constante numrica

Tabela 12.2: Palavra de controlo do circuito de dados.

 

e
Em primeiro lugar, para que 
o banco de
 registos coloque nos portos 

os registos R3 e R7, os sinais
e
devem tomar os valores
e
 
, respectivamente. Adicionalmente, e como se pretende que tenha lugar

uma escrita no banco de registos, o valor do sinal  dever ser .
 
chePara que os valores presentes nos portos e do banco de registos
 
guem s entradas da unidade lgica e aritmtica, o valor dos sinais
e
dever ser .
 
A operao
 da ULA controlada pelo valor do sinal  . Da Tabela 9.1,
 dever tomar o valor
tira-se que
para que seja realizada uma
operao de adio. Para conseguir que os bits de estado sejam actualizados

com os valores desta operao, o sinal  dever tomar o valor e o sinal

dever tomar o valor
.
Finalmente, e para que o porto de escrita do banco de registos receba o valor

de sada da unidade lgica e aritmtica, necessrio controlar
por forma a

que o multiplexador seleccione na sua sada o valor da sua entrada , o que

consegue colocando
a .
Resta agora controlar o valor dos sinais ainda no definidos por forma a que
no se realizem operaes indesejadas. Uma vez que 
no se pretende escrever
na memria nem no registo de instruo os sinais
e  devero tomar o
valor . O campo constante, no utilizado, pode tomar qualquer valor.
Conclu-se assim que a micro-operao R3  R3+R7 executada se os sinais
de controlo tomarem os valores da segunda coluna da Tabela 12.3.
Para um segundo exemplo, suponha-se agora que se pretende enderear
a memria usando o contedo do registo R5 e guardar o valor dessa posio
de memria no registo R3, sem mexer no contedo de qualquer dos outros
registos.
      

Nestas condies, ser necessrio forar
a
e
a
, activando tambm o sinal  .

O multiplexador MUXA dever agora seleccionar a sua entrada , pelo que


o valor do sinal
dever ser . Para efectuar uma leitura de memria e
seleccionar o valor lido como aquele que entra no porto do banco de registo,

208

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR


Sinal

 
  
 














R3  R3+R7
0
0011
0111
0
0
00
1
0
0
0
1100
00000
xxxxxxxxxxxx

R3  M[R5]
0
0011
0101
1
x
01
1
0
0
0
0000
xxxxx
xxxxxxxxxxxx

Tabela 12.3: Sinais que controlam a execuo das micro-operaes R3  R3+R7


(coluna 2) e R3  M[R5] (coluna 3).




o sinal
dever tomar o valor e o sinal
o valor .
Para que no haja escrita no registo de instruo nem no registo de estado,

os sinais  e  devero tomar o valor . Tambm o sinal
dever ter
todos os seus bits a .
Neste exemplo, como em muitos outros, os valores de alguns dos sinais so
irrelevantes, uma vez que controlam partes do circuito
 de dados
  que no so
lidos nem guardados. o caso dos sinais de controlo
e
,
 ,
que podem tomar qualquer valor sem afectar o funcionamento do circuito. A
terceira coluna da Tabela 12.3 descreve os valores que os sinais devem tomar
para que seja executada a micro-operao R3  M[R5].

12.2 Unidade de Controlo


Os sinais que controlam o circuito de dados so gerados por uma unidade de
controlo micro-programada, descrita nesta seco. Como foi visto na Seco
8.3.3, a utilizao de uma unidade de controlo micro-programada permite uma
maior flexibilidade da unidade de controlo, e tambm uma organizao mais
estruturada que no caso em que a unidade de controlo feita sintetizando uma
mquina de estados.
A Figura 12.5 descreve a estrutura geral da unidade de controlo do processador P3. O corao da unidade de controlo o micro-sequenciador, que controla a ordem pela quais so executadas as micro-instrues guardadas na memria de controlo. As micro-instrues definem o valor dos sinais utilizados
para controlar o circuito de dados, o prprio micro-sequenciador, e diversos
aspectos do funcionamento dos outros mdulos que aparecem na Figura 12.5.
O funcionamento do micro-sequenciador controlado pela unidade de teste
de condies e pela unidade de mapeamento, alm dos sinais de controlo gerados directamente pelas micro-instrues. A unidade de teste de condies
permite testar os bits de estado do processador e, tambm, outros bits internos

12.2. UNIDADE DE CONTROLO

209

REGISTO DE INSTRUO (RI)

CIRCUITO
DE
MAPEAMENTO

TESTE

CONTROLO
DO
BANCO
DE
REGISTOS

DE
CONDIES

MICRO
SEQUENCIADOR

MEMRIA DE
CONTROLO

MICRO-INSTRUO

Figura 12.5: Esquema geral da unidade de controlo.


unidade de controlo.
O controlo do banco de registos feito por um circuito dedicado, controlado
directamente por bits do registo de instruo e do registo de micro-instruo.

12.2.1 Formato das Micro-instrues


Tanto o circuito de dados como partes do prprio circuito de controlo so controlados por um conjunto de sinais que constituem a micro-instruo. Numa
unidade micro-programada como esta, as micro-instrues que constituem o
micro-programa so guardadas na memria de controlo, endereada pelo registo CAR.
Uma opo possvel seleccionar uma micro-instruo que tenha um bit
por cada um dos sinais de controlo que se pretendem gerar. No entanto, esta
opo nem sempre se revela a mais adequada, uma vez que nem todas as combinaes dos sinais de controlo so necessrias ou teis.
 
A ttulo de exemplo, no circuito da Figura 12.1, o valor do sinal
 no
importante quando
se
pretende
carregar
o
valor
de
uma
constante
usando
o

sinal de controlo
.
Nesta realizao, optou-se por utilizar dois formatos para a micro-instruo,
que se distinguem entre si pelo valor do bit mais significativo da micro-instruo,
. A Figura 12.6 descreve os dois formatos possveis para a micro-instruo.

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

210

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9

M5

S
R
1

S
R
2

I
A
K

FM

S
R
1

S
R
2

L
S

MCOND

CALU

M
A

M
B

M
2

M
R
B

RB

MD

M
A
D

RAD

MD

M
A
D

RAD

M5

C
C

L
I

L
F

CONST/NA

W
R

Figura 12.6: Formato das micro-instrues.


O formato correspondente a = corresponde a micro-instrues que controlam fundamentalmente o circuito de dados, enquanto que o formato corres
pondente a = , prioritariamente, destinado a controlar a unidade de controlo, nomeadamente a unidade de teste de condies e o micro-sequenciador.
Muitas outras opes teriam sido possveis, desde um formato nico em
que todos os sinais de controlo estivessem sempre disponveis, at uma soluo
em que existissem mais do que dois formatos de micro-instruo. A primeira
alternativa iria requerer uma micro-instruo com 50 bits, sem, no entanto, ser
significativamente mais rpida, uma vez que raramente necessrio controlar
todas as unidades do processador simultaneamente. J a utilizao de uma
alternativa com mais formatos de micro-instruo poderia de facto reduzir o
nmero de bits nas micro-instrues, mas implicaria uma reduo significativa
da velocidade de execuo, por passarem a existir demasiados sinais que no
podem ser controlados simultaneamente.
Pode observar-se que, na soluo adoptada, alguns sinais esto presentes
em ambos os formatos da micro-instruo, como, por exemplo, o sinal 
que controla a escrita no banco de registos. Estes sinais podem ser activados
quer em micro-instrues do tipo ( = ) quer em micro-instrues do tipo


( = ).
Outros sinais esto presentes apenas num dos tipos de micro-instrues,

como por exemplo o sinal que controla a escrita em memria,
. Estes sinais
s podem ser activados em micro-instrues desse tipo, devendo permanecer
inactivos nas restantes. Isto significa que, no circuito de dados da Figura 12.1,
os sinais que aparecem apenas num dos formatos de micro-instruo devem
resultar da conjuno do sinal , negado ou no, com o valor do bit da microinstruo.
O circuito de dados, modificado para incluir explicitamente as portas lgicas que executam esta funo, encontra-se representado na Figura 12.7. Note


se que a lgica adicionada fora a que o controlo do multiplexador
e
o sinal de escrita em memria fiquem activos apenas em micro-instrues do
tipo , uma vez que o sinal que controla de facto o circuito de dados a conjuno do sinaloriginal com o complemento do bit . Do mesmo modo, os 4
bits do sinal
devem ficar activos apenas quando = , o que se consegue
com 4 portas AND, na figura representadas apenas por uma delas aplicada aos
4 bits do barramento.
Os sinais de carregamento do registo de instruo e de carregamento do
registo de estado, que s so gerados pela unidade de controlo em micro
instrues do tipo , so mascarados de forma anloga, sendo feita a conjuno
com o bit .

12.2. UNIDADE DE CONTROLO

211

16
WR
SelAD
SelB

Banco de
Registos

Reset

16

16
0

MA

MUXA

16
0

MB

WM

MUXB

Endereo
Escrita de dados

16
FM

BUS A
BUS B
16

FIN

ULA

Leitura de dados

16

RE
FR

CULA
5

16

F
LF
16

Memria

Estado

Registo de Estado
FOUT

5
000h

11

16
CONST

12

MD
2

MUXD

4
0000

LI
F

RI

Figura 12.7: Circuito de dados e sinais de controlo.


A mesma regra aplicvel a sinais que controlam diversas partes da unidade de controlo propriamente dita.
De uma forma geral, quando
um dado sinal gerado pela unidade de con
trolo apenas no formato = , dever ser feita uma conjuno com o sinal ,
enquanto que quando esse sinal existe apenas no formato = , feita a conjuno com o complemento do sinal , isto , .
Em alguns casos possvel poupar esta lgica se o sinal actuar partes do
circuito que que no tm efeitos devido ao valor de outros sinais de controlo.




Por exemplo, o sinal de controlo
, que controla o multiplexador
est activo apenas no formato de micro-instruo que tem = . Assim, em
bora pudesse existir uma porta AND que fizesse a conjuno do sinal
com
a negao de , esta porta revela-se intil. De facto, uma anlise cuidada do

circuito de dados na Figura 12.1 mostra que, quando = , no existe controlo
nem sobre a unidade lgica e aritmtica nem sobre o sinal de escrita em memria, que est necessariamente inactivo. Assim, o valor que fica no barramento

nunca usado, pelo que no necessrio controlar o multiplexador MUXB,
poupando-se uma porta lgica.

12.2.2 Micro-Sequenciador
No centro da unidade de controlo encontra-se o micro-sequenciador, que gera a
sequncia de endereos de micro-instrues que deve ser executada. O micro-

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

212

sequenciador pode, em cada ciclo de relgio, executar uma das seguintes operaes, de acordo com os sinais de controlo:
Incrementar o endereo da micro-instruo a executar ou saltar para um
endereo
  especificado na micro-instruo, de acordo com o valor do sinal
, gerado pela unidade de teste de condies.
Retornar de uma micro-rotina.
Saltar para um dos endereos fornecidos pela unidade de mapeamento.
A estrutura do micro-sequenciador est descrita na Figura 12.8. O microEND A
9

END B

F
SBR

LS
9
COND

MUX4
1

M5

MUX5

CAR

9
+1

NA

9
ENDEREO
DA MEMRIA
DE CONTROLO

Figura 12.8: Esquema do micro-sequenciador.


sequenciador usa dois registos. O registo CAR (Control Address Register) contm o endereo da memria de micro-instrues onde est a micro-instruo
que est a ser executada. Este registo desempenha para um micro-programa o
mesmo papel que o contador de programa desempenha para um programa em
assembly e pode tambm ser referido por contador de micro-programa. O registo
SBR guarda o endereo de micro-programa para onde dever ser transferido
controlo aps terminar a execuo de uma micro-rotina. Uma vez que existe s
um registo para guardar o endereo de retorno, apenas possvel utilizar um
nvel de profundidade de micro-rotinas, o que significa que uma micro-rotina
no pode chamar outra.
importante sublinhar que no existe qualquer relao entre uma microrotina e uma subrotina definida ao nvel do assembly.
O funcionamento do micro-sequenciador controlado pelos dois bits do

sinal
que controla o carregamento do registo CAR, da seguinte forma:


= : CAR incrementado se
for , e carregado com o valor
de
(o endereo da memria de controlo para onde se deve saltar), se

12.2. UNIDADE DE CONTROLO

213

for , permitindo assim a execuo de saltos condicionais dentro


de micro-programas.


=
: CAR carregado com o valor contido em SBR, sendo assim
executado um retorno de micro-rotina.










=
: CAR carregado com o valor especificado em
unidade de mapeamento.
=
: CAR carregado com o valor especificado em
unidade de mapeamento.

pela
pela

A maioria das micro-instrues so executadas de forma sequencial, pelo


que aps a execuo de uma micro-instruo o CAR deve ser incrementado
para ficar a apontar para a prxima posio da memria de controlo. Este

comportamento consegue-se colocando o valor de
a na micro-instruo,
 
e controlando o bloco de teste de condies por forma a que o valor de
seja . Caso
se pretenda executar um salto condicional no micro-programa, o

dever ser na mesma, e a unidade de teste de condies dever
valor de
seleccionar a condio de salto desejada.
A possibilidade de carregar o registo CAR com o contedo do registo SBR
permite a existncia de micro-rotinas. Quando sepretende
chamar uma micro

deve ser carregado com
rotina, o sinal  deve ser activado e o registo

o valor de
, que especifica o endereo da micro-rotina que se pretende chamar. Como o sinal  s existe nas micro-instrues com = , o sinal de carregamento do registo SBR deve ser inibido quando = . A activao deste sinal
faz com que o registo SBR seja carregado com o valor de CAR+1, que representa
o endereo da primeira micro-instruo a ser executada quando a execuo da

micro-rotina termina. O retorno de micro-rotina executado seleccionado

=
o que fora o carregamento do registo CAR com o endereo de retorno.
O contedo do registo CAR tambm pode ser carregado com os valores

 

  
(colocando
= ) ou
(colocando
= ), gerados pela unidade de mapeamento, e cuja utilidade ser estudada na Seco 12.2.4.

12.2.3 Teste de Condies


A unidade de teste de condies, descrita na Figura 12.9, tem como funo
seleccionar qual a condio que testada pelo micro-sequenciador quando o
mesmo executa uma micro-instruo de salto ou chamada a micro-rotina, condicional ou no.
 
, que indica ao
Esta unidade tem um nico bit de sada, o sinal
micro-sequenciador se deve ou no executar um salto, tal como foi descrito
na seco anterior.
Esta unidade fundamentalmente constituda por dois multiplexadores, e
algumas portas

lgicas auxiliares. O multiplexador, MUXCOND, controlado pelo
campo
da micro-instruo, permite seleccionar um dos seguintes
bits:
A constante 1, o que permite ao micro-sequenciador incrementar
  ou executar saltos incondicionais, dependendo do valor do sinal
(Complementar Condio).

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

EINT

INT
E
RI15
RI14
S

M0

M1

CC

COND

MCOND

INT

MUX6

RI6

MUXCOND

214

6
7

3
RI97

Figura 12.9: Unidade de teste de condies.

Os bits e do registo de estado. Estes bits so tambm conhecidos por



bits de micro-estado. O bit est a se a ltima operao na ULA deu


resultado zero, enquanto que o bit est a se a ltima operao na ULA
gerou transporte.
A conjuno do bit E do registo de estado com o sinal
que assinala
a presena de uma interrupo, indicando se deve atender uma interrupo presente.


Os bits do campo
do registo de instruo, que codificam o modo de
endereamento da instruo assembly que est a ser executada.
 
O bit do registo de instruo, mascarado pela expresso  
que
indica qual o operando ao qual deve ser aplicado o modo de endereamento da instruo, no caso de instrues de dois operandos.
Um dos bits do registo de estado, mais os sinais e
, escolhido de
acordo com o valor dos bits  a do registo de instruo.
A entrada  do multiplexador MUXCOND controlada pela sada do multiplexador MUX6. Uma vez que os bits  a do registo de instruo especificam,
conforme Figura 11.13) e de acordo com a Tabela 11.14, qual a condio que
testada numa dada instruo, possvel seleccionar directamente qual a condio que dever ser testada pelo micro-sequenciador.

Uma anlise da Tabela 11.14 revela que os bits  , e do registo de instruo
seleccionam qual a condio, enquanto que o bit indica se a condio deve
ser complementada. A ligao do multiplexador MUX6 conforme indicado na
figura e o uso de uma porta XOR, que funciona como uma negao condicional,
permite que, na entrada  do multiplexador MUXCOND, esteja j seleccionada a

12.2. UNIDADE DE CONTROLO

215

condio correcta. Isto leva a que o teste de uma destas condies seja efectuado numa s micro-instruo, no sendo necessrio efectuar diversos testes

aos valores dos bits de estado e do valor dos bits a do registo de instruo.
Quando se pretende que o micro-sequenciador execute
 as instrues de
forma sequencial, dever ser colocado o valor
na
sada
. Isto conse

guido
colocando
o
valor
no
campo
da
micro-instruo
e o valor


no campo
da micro-instruo.
Caso se pretenda que o micro-sequenciador
  execute um salto incondicional,



dever
ser
colocado
o
valor
na
sada
, colocando
em
e

em
.
Finalmente, caso se pretenda que o micro-sequenciador execute um salto
na condio de um dado bit tomar um dado valor, o multiplexador MUXCOND
dever
 ser controlado de forma a seleccionar o bit pretendido, enquanto que o
sinal
define se a condio dever ser complementada ou no.
Tanto o salto incondicional como o salto condicional s podem ser executa
dos pelo micro-sequenciador quando a micro-instruo
 dotipo
 = , uma vez
que s neste
,
e o endereo de
 formato esto disponveis os campos
salto
.
 
Caso a micro-instruo seja do tipo , o valor de
colocado a e o
micro-sequenciador incrementa sempre o contador de micro-programa.

12.2.4 Unidade de Mapeamento


A unidade de mapeamento utilizada para gerar, de forma rpida, os endereos das micro-rotinas chamadas durante a execuo de instrues. Com efeito,
em diversos passos da execuo de uma instruo assembly torna-se necessrio
saltar para uma micro-rotina ou troo de micro-cdigo, de acordo com o valor
presente num dado campo do registo de instruo.
Por exemplo, o valor contido nos seis bits mais significativos do registo de
instruo representa o cdigo de instruo e define qual a operao que dever
ser executada. Este valor utilizado na fase de descodificao de uma instruo
assembly, para gerar o endereo da memria de controlo que corresponde s
micro-instrues que implementam a instruo assembly.
Noutra fase da execuo da instruo, necessrio saltar para um dado
endereo de micro-cdigo, de acordo com o modo de endereamento utilizado,

e especificado no campo
do registo de instruo.
A unidade de mapeamento utilizada em diversas fases da execuo de
uma instruo. No processador P3, esta execuo feita nos seguintes passos:
1. Carregamento do registo de instruo.
2. Descodificao do cdigo de operao e carregamento dos operandos.
3. Execuo do micro-programa que implementa a instruo.
4. Escrita do resultado.
5. Teste de pedidos de interrupo.
Com esta sequncia de operaes, necessrio descodificar o cdigo de
operao para saber quais os operandos a carregar e qual o endereo da memria de micro-programa que contm as micro-instrues a executar. Dado

216

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

que o micro-sequenciador pode testar de cada vez apenas o valor de um bit,


seleccionado pela unidade de teste de condies, e que o cdigo de operao
tem 6 bits, a escolha da micro-rotina utilizando este mecanismo iria requerer seis micro-instrues s para descobrir qual o endereo da micro-rotina a
efectuar. Seriam ainda necessrias mais micro-instrues para decidir quais
as micro-rotinas que deveriam ser chamadas para fazer a leitura dos operandos e a escrita do resultado, o que se revelaria muito ineficiente. A unidade
S

SR1
OPCODE
SR2

MUX1

MEMRIA
A
9
END A

MEMRIA
B
9
END B

Figura 12.10: Unidade de mapeamento.


de mapeamento, esquematizada na Figura 12.10, permite que a transferncia
de controlo seja feita numa nica micro-instruo. Isso consegue-se utilizando
duas memrias de mapeamento, que so endereadas de acordo com o cdigo
da operao, o modo de endereamento e o valor do bit de direco presentes
no registo de instruo.
A unidade de mapeamento pode gerar dois endereos, qualquer um dos
quais pode ser seleccionado pelo micro-sequenciador como o prximo endereo de micro-instruo a executar (ver Figura 12.8).
A
A endereada directamente pelo cdigo de operao (campo
 memria

da instruo assembly) e implementa uma tabela que contm os endereos das micro-rotinas que executam as operaes de transferncia entre
registos que realizam cada uma das instrues.
As linhas de endereo da memria de mapeamento B so controladas pelo


valor dos bits  e   da micro-instruo e tambm pelo valor dos bits

e do registo de instruo. De acordo com os valores dos bits  e   , esta
memria gera o endereo das micro-rotinas de carregamento de operandos ou
de escrita do resultado.

Isto permite que, atravs do controlo dos bits  e   , seja possvel gerar
quatro endereos diferentes. Estes endereos so usados para especificar diversas micro-rotinas de leitura e escrita, conforme especificado na Tabela 12.4.
Assim, caso se pretenda que a memria de mapeamento B gere o endereo
da micro-rotina de leitura de um operando, a micro-instruo dever colocar

  e  a . Neste caso, o valor de ser ignorado, o que correcto
uma vez que este campo no tem significado quando a instruo de um operando. Caso se pretenda o endereo da micro-rotina de leitura de dois ope
randos, basta forar   a , sendo nestas condies o valor de usado para
enderear a memria, atravs do multiplexador MUX1.

12.2. UNIDADE DE CONTROLO


SR2
0
0
1
1

SR1
0
1
-

S
0
1

217

Endereo seleccionado
Micro-rotina de leitura de um operando
Micro-rotina de escrita do resultado
Micro-rotina de leitura de dois operandos para S=0
Micro-rotina de leitura de dois operandos para S=1

Tabela 12.4: Funcionamento da memria de mapeamento B.

Para que o circuito de controlo funcione de acordo com o especificado, a


memria B dever ser carregada com os endereos das micro-rotinas correspondentes a cada uma das operaes desejadas, de acordo com o esquema da
Figura 12.11.

0000
0100
1000
1100

Rotinas de leitura de um operando


Rotinas de escrita do resultado

0000

Leitura de um operando para M=00

0001

Leitura de um operando para M=01

0010

Leitura de um operando para M=10

0011

Leitura de um operando para M=11

Rotinas de leitura de dois operandos para S=0


Rotinas de leitura de dois operandos para S=1

Figura 12.11: Preenchimento da memria de mapeamento B.

Para se analisar o funcionamento da unidade de mapeamento, suponha-se


que se pretende controlar o micro-sequenciador por forma a transferir controlo
para a primeira micro-instruo que implementa a instruo assembly guardada
no registo de instruo. O endereo desta micro-instruo est guardado na
memria demapeamento
A, que endereada pelos 6 bits mais significativos

(campo
) do registo de instruo.
necessrio agora assegurar que este valor carregado no registo CAR no
prximo flanco do relgio. Por anlise da Figura 12.8, verifica-se que o sinal de




controlo
dever tomar o valor , por forma a que o multiplexador

seleccione o valor gerado pela memria de mapeamento como o prximo
valor do registo CAR.
O controlo da memria de mapeamento B ligeiramente mais complexo,
mas tambm fcil de perceber. Suponha-se que se pretende transferir o controlo para a sequncia de micro-instrues que carrega um operando. Por anlise da
Tabela 12.4, verifica-se que necessrio colocar os bits de controlo  

e  a para que a memria de mapeamento B gere o endereo dessa micro
rotina. Dado que valor do campo
do registo de instruo enderea directa  
mente esta memria, basta agora colocar o sinal
a
para que a prxima
micro-instruo a ser executada seja a desejada.

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

218

12.2.5 Controlo do Banco de Registos


A unidade de controlo controla o banco de registos atravs do circuito de controlo do banco de registos, descrita na Figura 12.12. Controlando o valor do
IR1
4

IR2

RI15

M2

MUX3

RAD
4
MAD

WBR

4
1

M2

MUX2
RB

4
0

MUXAD

MRB

MUXRB

SelAD

SelB

Figura 12.12: Circuito de controlo do banco de registos.




sinal  , disponvel na micro-instruo, a unidade de controlo escolhe se o


endereo do porto B do banco de registos igual a  (especificado na microinstruo) ou aos valores especificados no registo de instruo. A situao
idntica para o controlo dos portos A e D do banco de registos, sendo desta
 
vez a escolha controlada pelo sinal
.
Quando o endereo do porto B especificado directamente pelo registo de

instruo, o valor do sinal de controlo  escolhe qual dos campos do registo
de instruo dever controlar este endereo.
No caso dos portos A e D, esta escolha feita directamente por lgica que
usa os valores do bit e do bit mais significativo do cdigo de operao. Esta


lgica permite escolher o valor de
 como sendo igual a  ou   , de
acordo com a Tabela 12.5. Apesar da aparente complexidade desta tabela, a

RI
0
1
1
1
1

S
0
0
1
1

M2
0
1
0
1

WBR
IR1
IR1
IR2
IR2
IR1

Tabela 12.5: Controlo do multiplexador MUX3.


sua utilizao muito simples, e descrita na Tabela 12.6.
A lgica descrita na Figura 12.12 necessria porque, nas instrues com
dois operandos, o campo do registo de instrues que contm o registo ao qual

aplicado o modo de endereamento pode ser  ou   , de acordo com o
valor de . Estas instrues tm todas o bit mais significativo do registo de
instruo a , conforme descrito na Seco 11.7.3. Todas as instrues que tm

12.2. UNIDADE DE CONTROLO


M2
0
1

219

Valor seleccionado
Registo usado pelo primeiro ou nico operando
Registo usado pelo segundo operando, quando exista

Tabela 12.6: Valor seleccionado pelo multiplexador MUX3.

o bit mais significativo do registo de instruo a devem escrever o resultado



no registo especificado pelo campo  , o que conseguido com a porta AND
da figura.
Para ilustrar o funcionamento desta unidade do micro-controlador, suponhase que se pretende operar com registos definidos pelos valores dos campos da
micro-instruo (RAD e RB), sem ter em ateno quais os registos definidos pela
instruo assembly propriamente dita. Neste caso, h que enderear o banco de


registos com o valor
definido pelos campos 
e  da micro-instruo,
   
e  devero ser colocados a .
pelo que os sinais
Para uma utilizao mais complexa, suponha-se que se est na fase final de
execuo da instruo assembly ADD R1, M[R7+00A0h]. A codificao desta
instruo j foi estudada na Seco 11.7.5, onde se viu que esta instruo representada pela sequncia de duas palavras 1000011001110111b (8677h) e
0000000010100000b (00A0h). Uma vez que se est na fase final de execuo
da instruo, o resultado da adio, j calculado, est guardado no registo R13.
Pretende-se carregar este resultado no registo de destino especificado pela instruo assembly. Como se viu na Seco 11.7.5, o registo de destino encontra-se
especificado no campo   do registo de instruo. Isto acontece porque, na
codificao desta instruo, o modo de endereamento indexado se aplica ao

segundo operando da instruo, o que indicado pelo valor = .
Para conseguir executar esta
 operao, h, em primeiro lugar, que garantir
que o valor presente no porto do banco de registos se propague at ao porto
de escrita do mesmo. Por anlise da Figura 12.1 e da Tabela 9.1, verifica-se que
necessrio colocar os valores no campos da micro-instruo de acordo com a
Tabela 12.7.
Sinal
MB
MD
WR
WM
LF
LI
FM
CULA

Valor
0
00
1
0
0
0
0000
11XXX

Tabela 12.7: Sinais que controlam a execuo da micro-operao R1  R13.


agora necessrio controlar o circuito da Figura 12.12 por forma a conseguir que o registo usado como primeiro operando da instruo assembly seja
 


escrito com o resultado. O valor de  dever ser , para que
o
campo
 
da micro-instruo possa especificar o registo R13. J o valor de
dever

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

220



ser 0, para que o valor seleccionado


seja o que


 pelo multiplexador
provm do multiplexador
.




Para controlar adequadamente o multiplexador
, basta colocar 
a , como descrito na Tabela 12.6. Pode verificar-se que o valor do bit 
do
registo de instruo
toma o valor necessrio para que o controlo do multiple



xador
fique com o valor adequado, que, neste caso, .

12.2.6 Circuito de Controlo


O circuito completo de controlo do processador P3, descrito na Figura 12.13
resulta da ligao dos diversos blocos descritos nas seces anteriores. NoteLI

REGISTO DE INSTRUO
IR2
0

SR2

MUX1

EINT

E
RI15

M0

RI14

M1

2
3
4

SelAD
4

RAD

F
SBR

MAD

9
RI15

MCOND

MUX6

LS

COND

INT

RI6

4
4

MUXCOND

c
INT

END A

CC

MRB
WBR
0

END B

RB
M2
0

MEMRIA
B

MUX3

MEMRIA
A

SelB
4

IR1

MUXRB

MUXAD

S
SR1

MUX2

OP

MUX4
1

M5

MUX5

M2 S

CAR
+1

NA
3
RI97

MEMRIA
Controlo

32

MICROINSTRUO

Figura 12.13: Circuito de controlo do processador P3.


se que o controlo do multiplexador MUX5 permite seleccionar, como prximo
endereo da micro-instruo a ser executada, quer o que vem do multiplexador MUX4, controlado pela unidade de teste de condies, quer o contedo do
registo SBR, quer qualquer um dos endereos especificados pela unidade de
mapeamento.
O sinal  permite carregar o registo de instruo, que se encontra duplicado nesta figura e na Figura 12.1, que ilustra o circuito de dados.
O registo CAR carregado em todos os ciclos de relgio, pelo que no so
necessrios sinais para controlar o seu carregamento.

12.3. MICRO-PROGRAMAO

221

12.3 Micro-Programao
Uma vez percebido o funcionamento da unidade de controlo, a programao
da memria de controlo relativamente simples. Com efeito, por anlise do circuito de controlo, possvel identificar o valor que cada bit da micro-instruo
deve tomar para se obtenha o funcionamento desejado do circuito de dados,
assim como um comportamento correcto do prprio circuito de controlo.
O primeiro passo para a definio do contedo da memria de controlo a
definio da estrutura de alto nvel dos micro-programas. Esta estrutura , em
grande parte, imposta pelas caractersticas do circuito de controlo e pelos tipos
de operaes que podem ser efectuados por este.
A sequncia de operaes efectuada quando uma instruo assembly executada foi descrita na Seco 12.2.4. A esta sequncia de operaes corresponde
o fluxograma da Figura 12.14. A execuo de uma instruo do processador

Carregamento
da Instruo

OPCODE

OPCODE=01...

OPCODE=00...

Execuo
da Instruo

OPCODE=10...

OPCODE=11...

Carregamento
do Operando

Carregamento
dos Operandos

Carregamento
do Operando

Execuo
da Instruo

Execuo
da Instruo

Execuo
da Instruo

(PUSH)

Escrita
Resultado

(TEST, CMP)

Teste de
Interrupes

Figura 12.14: Fluxograma da execuo de uma instruo assembly.


comea com o carregamento da instruo, da memria para o registo de instruo. Com base no cdigo da operao, efectuado um salto para o endereo
da primeira micro-instruo que executa essa operao, usando para tal a me-

222

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

mria A do circuito de mapeamento.


Para as instrues que tm um ou dois operandos, a execuo prossegue
com o carregamento dos mesmos. Este carregamento conseguido chamando
uma micro-rotina, cujo endereo fornecido pela memria B do circuito de
mapeamento. A fase seguinte consiste na execuo da instruo propriamente
dita, usando uma sequncia de micro-instrues que so especficas para cada
instruo.
Aps a execuo da instruo, o controlo transferido para a seco de
micro-cdigo que escreve o resultado, nos casos em que a instruo requer
esta operao1 . Para isto, novamente utilizada a memria B do circuito de
mapeamento, uma vez que a micro-rotina de escrita do resultado varia com o
modo de endereamento utilizado na instruo.
Finalmente, aps a escrita do resultado (ou aps a execuo, no caso de
instrues que no necessitam desse passo), o controlo transferido para uma
sequncia de micro-instrues que verificam se existe uma interrupo pendente. Em caso afirmativo, o controlo transferido para a micro-rotina de tratamento de interrupo. A excepo a instruo INT, que no necessita de
verificar se existem interrupes pendentes uma vez que faz a desactivao do
bit do registo de estado que permite o atendimento de interrupes.

12.3.1 Carregamento do Registo de Instruo


Como foi visto atrs, a primeira fase da execuo de uma instruo o carregamento do registo de instruo, RI (em Ingls, esta fase chama-se instruction fetch, ou, abreviadamente, IF). Nesta fase, necessrio carregar o registo
de instruo com o contedo da posio de memria apontada pelo contador
de programa, PC. Em seguida, deve ser incrementado o valor do contador de
programa, para que o mesmo fique a apontar para a prxima instruo a ser
executada. A ltima operao consiste em transferir controlo para o troo de
micro-programa que executa as operaes necessrias execuo da instruo
assembly. Ao contrrio do assembly que apenas permite que uma e uma s operao seja feita em cada ciclo de relgio, um passo de micro-programa pode
executar mais do que uma operao de transferncia entre registos, desde que
os circuitos de dados e controlo assim o permitam. A Tabela 12.1 descreve a
sequncia de operaes de transferncia entre registos que implementam esta
fase da execuo de uma micro-instruo. Como se pode observar, esta sequnIF0:
IF1:

RI  M[PC]
PC  PC+1, CAR  ROMA[OPCODE]

; Carrega RI
; Incrementa PC

Programa 12.1: Micro-programa da fase de carregamento do registo de instruo.


cia de operaes descrita utilizando uma sequncia de micro-instrues descritas na linguagem de transferncia entre registos que foi descrita no Captulo 9.
1 Algumas instrues, como por exemplo, as instruo de JMP, TEST e CMP no geram qualquer
resultado que necessite de ser escrito no operando da instruo.

12.3. MICRO-PROGRAMAO

223

Cada micro-instruo corresponde a uma ou mais operaes de transferncia entre registos, que so executadas sempre os que sinais de controlo correspondentes a essa micro-instruo esto activos. Para evitar a listagem exaustiva de todos os sinais de controlo que se encontram activos em cada microinstruo, cada micro-instruo precedida de um rtulo simblico. Este rtulo corresponde aos valores dos sinais de controlo que se encontram activos
durante a execuo dessa micro-instruo.
Embora cada micro-instruo seja descrita como um conjunto de transferncias de valores entre registos, a programao da memria de controlo
feita com uma sequncia de zeros e uns que especificam o valor de cada microinstruo, de acordo com o formato descrito na Figura 12.6. Os valores de cada
bit da micro-instruo devero ser tal que causem as transferncias entre registos indicadas.
A transformao do micro-programa, descrito ao nvel de transferncia entre registos, na combinao de bits que controla adequadamente os circuitos do
processador pode ser feita manualmente ou com o auxlio de um programa,
que, neste caso, se chama micro-assembler. Na prtica, e dado que a programao a este nvel requer um conhecimento profundo dos sinais e circuitos
envolvidos, a utilidade de um micro-assembler consideravelmente mais reduzida que a de um assembler, pelo que esta transformao feita, na maior parte
dos casos, manualmente.
No caso presente, ilustra-se o funcionamento das micro-rotinas usando a
linguagem de transferncia entre registos, sendo a Seco 12.3.6 dedicada ao
estudo do processo de traduo entre a micro-instruo e o micro-cdigo em
formato binrio.

12.3.2 Carregamento dos Operandos


A fase seguinte da execuo de uma instruo consiste no carregamento dos
operandos, de acordo com o nmero dos mesmos e o seu modo de endereamento. A micro-rotina a chamar depende da instruo assembly que est a
ser executada, embora o procedimento seja similar em todas elas. Como foi
descrito na Figura 12.10 da Seco 12.2.4, a memria de mapeamento B deve
conter o endereo das micro-rotinas de leitura de operandos, quer para os casos em que existe apenas um operando, quer para os casos em que existem dois
operandos.
Assim, uma instruo assembly que necessite apenas de um operando dever chamar a micro-rotina correspondente usando a memria B da unidade

de mapeamento, com os bits de controlo  e   a . Uma instruo que
necessite de dois operandos dever enderear a memria B da unidade de ma
peamento com o sinal   a . Neste caso, o segundo bit de endereo desta
memria o bit do registo de instruo, de acordo com o circuito da Figura 12.10.
Por forma a comunicarem facilmente entre si, os diversos passos de execuo de uma instruo assembly usam os registos temporrios de uma forma
regular, de acordo com a seguinte conveno e a Tabela 12.1.
O registo EA (R12) usado para guardar o endereo efectivo de um operando sempre que este operando provenha de memria (do ingls, effective address).

224

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR


O valor do primeiro operando deve ser copiado para o registo RD (R13).
Aps os clculos, o resultado da operao deve ser guardado nesse mesmo
registo.
O valor do segundo operando deve ser copiado para o registo SD (R11),
sempre que a instruo use dois operandos.

As instrues de carregamento de operandos devero funcionar de forma


a deixar o endereo do operando no registo EA (R12). O valor do primeiro
ou nico operando dever ser guardado no registo de destino, RD (R13). Em
alguns modos de endereamento (por exemplo, no modo imediato), no necessrio o endereo do operando e, nestes casos, o registo EA no carregado.
Quando as instrues tm dois operandos, o segundo operando deve ser deixado no registo SD (R11).
Pode-se agora examinar as micro-rotinas de carregamento de operandos,
comeando pelas que carregam apenas um operando. De acordo com o modo
de endereamento, o operando pode estar em vrias localizaes:
Endereamento por registo: o operando encontra-se num registo. Deve
ser copiado desse registo para o registo RD. No existe necessidade de
actualizar o registo EA.
Endereamento indirecto por registo: o operando encontra-se na posio
de memria cujo endereo est contido no registo. O valor do registo
deve ser copiado para o registo EA e o valor da memria apontado por
este registo deve ser copiado para o registo RD.
Endereamento imediato: o operando encontra-se na prpria instruo,
ou, mais exactamente, na posio de memria apontada pelo contador
de programa, que j foi incrementado na micro-instruo com rtulo IF1.
Esta posio de memria deve ser copiada para o registo RD, no havendo
necessidade de actualizar o registo EA.
Endereamento indexado: o operando encontra-se numa posio de memria cujo endereo obtido somando o contedo de um registo com o
valor da posio de memria apontada pelo contador de programa. Este
endereo deve ser carregado no registo EA e o seu contedo dever ser
copiado para o registo RD.
Em todos os casos, o registo ao qual se aplica o modo de endereamento o

registo especificado no campo  do registo de instruo.
Aps a execuo das micro-instrues que carregam o operando, o controlo
deve ser retornado para o cdigo que chamou a micro-rotina de carregamento
de operando.
Torna-se agora simples especificar os micro-programas para cada uma das
micro-rotinas de carregamento de um operando, descritas no Programa 12.2. A
mais complexa desta micro-rotinas a que trata do carregamento de operandos
quando o modo de endereamento indexado, caso
em que h que somar a

palavra W ao valor do registo especificado em  e enderear a memria com
o valor resultante.
As micro-rotinas de carregamento de dois operandos funcionam de forma
semelhante s de carregamento de um operando. Porm, neste caso, o valor

12.3. MICRO-PROGRAMAO

225

F1R0:

RD  R[IR1], CAR  SBR

; Copia operando

F1RI0:
F1RI1:

EA  R[IR1]
RD  M[EA], CAR  SBR

; Carrega o endereo
; Copia operando

F1IM0:
F1IM1:

RD  M[PC]
PC  PC+1, CAR  SBR

; Carrega o operando
; Incrementa o PC

F1IN0:
F1IN1:
F1IN2:
F1IN3:

EA  M[PC]
PC  PC+1
EA  EA+R[IR1]
RD  M[EA], CAR  SBR

;
;
;
;

Carrega a constante W
Incrementa PC
Guarda o endereo
Carrega o operando

Programa 12.2: Micro-rotinas de carregamento de um operando.


do bit do registo de instruo indica se o modo de endereamento aplicado
ao primeiro operando ou ao segundo operando. Quando o modo de endereamento aplicado ao primeiro operando, tambm se aplica ao destino da
operao, uma vez que o primeiro operando especifica simultaneamente um
dos operandos e o destino a dar ao resultado. Em ambos os casos, o modo

de endereamento aplica-se ao registo especificado no campo  do registo
de instruo. O outro operando, especificado pelo campo   do registo de
instruo, sempre um registo.
F2R0:
F2R1:

RD  R[IR1]
SD  R[IR2], CAR  SBR

; Copia primeiro operando


; Copia segundo operando

F2RI0:
F2RI1:
F2RI2:

EA  R[IR1]
RD  M[EA]
SD  R[IR2], CAR  SBR

; Guarda endereo
; Copia primeiro operando
; Copia segundo operando

F2IM0:
F2IM1:
F2IM2:

RD  M[PC]
PC  PC+1
SD  R[IR2], CAR  SBR

; Copia primeiro operando


; Incrementa o PC
; Copia segundo operando

F2IN0:
F2IN1:
F2IN2:
F2IN3:
F2IN4:

EA  M[PC]
PC  PC+1
EA  EA+R[IR1]
RD  M[EA]
SD  R[IR2], CAR  SBR

;
;
;
;
;

Carrega a constante W
Incrementa o PC
Guarda o endereo
Copia primeiro operando
Copia segundo operando

Programa 12.3: Micro-rotinas de carregamento de dois operandos para

O primeiro conjunto de micro-rotinas, descrito no Programa 12.3, utilizado quando o valor de . Neste caso, o modo de endereamento aplica-se
ao primeiro operando, como, por exemplo, na instruo ADD M[R1+30],R3.
O procedimento a adoptar semelhante ao que foi utilizado nas instrues de
um operando, existindo, tal como antes, quatro casos distintos: endereamento
por registo, indirecto, imediato e indexado. A diferena consiste fundamentalmente em copiar para o registo SD o valor do segundo operando, por forma

226

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

F2RS0:
F2RS1:

SD  R[IR1]
RD  R[IR2], CAR  SBR

; Copia segundo operando


; Copia primeiro operando

F2RIS0:
F2RIS1:
F2RIS2:

EA  R[IR1]
SD  M[EA]
RD  R[IR2], CAR  SBR

; End. do seg. operando


; Copia segundo operando
; Copia primeiro operando

F2IMS0:
F2IMS1:
F2IMS2:

SD  M[PC]
PC  PC+1
RD  R[IR2], CAR  SBR

; Copia segundo operando


; Incrementa PC
; Copia primeiro operando

F2INS0:
F2INS1:
F2INS2:
F2INS3:
F2INS4:

EA  M[PC]
PC  PC+1
EA  EA+R[IR1]
SD  M[EA]
RD  R[IR2], CAR  SBR

;
;
;
;
;

Carrega a constante W
Incrementa PC
Guarda endereo
Copia segundo operando
Copia primeiro operando

Programa 12.4: Micro-rotinas de carregamento de dois operandos para

a que as instrues passem a dispor dos dois operandos nos registos RD e SD.
Nos casos em que tal se aplique, o registo EA deve, tal como anteriormente, ser
carregado com o valor do endereo onde se encontrava o primeiro operando.
Este valor ser mais tarde utilizado pelo micro-cdigo de escrita do resultado,
descrito no Programa 12.8.

Quando o valor do bit do registo de instruo , o tratamento algo diferente. Neste caso, o modo de endereamento aplica-se ao segundo operando,
como, por exemplo, na instruo ADD R3,M[R4+30]. Neste caso, o papel dos
registos RD e SD deve ser trocado, e no h necessidade de guardar o endereo
do operando no registo EA. Note-se que o modo de endereamento continua a


aplicar-se ao registo especificado em  , s que, neste caso, o campo  codifica o segundo operando, no o primeiro. Estas micro-rotinas esto descritas
no Programa 12.4.

12.3.3 Execuo das Instrues


Aps a execuo das micro-rotinas de carregamento de operandos, o processador pode operar sobre os dados, de acordo com a operao especificada no
cdigo de instruo.
Uma vez que os operandos esto j disponibilizados nos registos RD e SD,
a operao propriamente dita , de uma forma geral, relativamente simples.
No caso vertente, ilustra-se a execuo de instrues usando para tal alguns
exemplos que so representativos do conjunto de instrues do processador.
Como exemplo de uma instruo aritmtica, considere-se a instruo ADD.
Aps chamar a micro-rotina de carregamento de operandos, usando a unidade
de mapeamento, esta instruo dever somar o contedo dos registos RD e SD
e deixar o resultado no registo RD. Dever tambm actualizar os bits do registo

de estado, actuando para tal os bits do campo
.
Aps ter o resultado guardado no registo RD, o controlo deve ser transferido
para a micro-rotina de escrita do resultado. Uma vez que o endereo destas

12.3. MICRO-PROGRAMAO

227

micro-rotinas est guardado nas posies a  da memria B (ver Tabela 12.4)


da unidade de mapeamento, esta transferncia faz-se carregando o registo CAR
com o contedo
desta memria, endereada com os bits mais significativos


(  e  ) a .
ADD0:
ADD1:

CAR  ROMB[1|S|M], SBR  CAR+1


RD  RD+SD, FM  Fh, CAR  ROMB[0|1|M]

; Copia Ops
; Adio

Programa 12.5: Micro-programa da fase de execuo da instruo ADD.


Dada a simplicidade da operao de soma, a execuo da instruo propriamente dita resume-se operao RD  RD+SD e actualizao dos bits
de estado, sendo as outras duas instrues as chamadas s micro-rotinas de
carregamento de operandos e de escrita do resultado.
Um exemplo ligeiramente mais complexo o da instruo de PUSH, descrito
no Programa 12.6. Esta instruo dever guardar o seu operando na posio
de memria apontada pelo registo SP e, em seguida, decrementar o mesmo.
Esta instruo no tem de escrever o resultado no seu operando, uma vez que
o valor do mesmo no deve ser alterado. Desta forma, o controlo transferido
directamente para a micro-rotina de tratamento de interrupes.
PUSH0:
PUSH1:
PUSH2:

CAR  ROMB[0|0|M], SBR  CAR+1


M[SP]  RD, SP  SP-1
CAR  IH0

; Copia operando
; Escrita
; Salto para IH

Programa 12.6: Micro-programa da fase de execuo da instruo PUSH.


As instrues de controlo so programadas utilizando a mesma estrutura.
Neste caso, porm, estas instrues actuam directamente sobre o valor do registo PC. Por exemplo, o micro-programa que executa a instruo CALL o do
Programa 12.7.
CALL0:
CALL1:
CALL2:
CALL3:

CAR  ROMB[0|0|M], SBR  CAR+1


M[SP]  PC, SP  SP-1
PC  RD
CAR  IH0

;
;
;
;

Carregar endereo
Push do PC
Carregamento do PC
Salto para IH

Programa 12.7: Execuo da instruo CALL.

12.3.4 Escrita do Resultado


Aps a execuo da instruo, o resultado deve ser escrito, em registo ou em
memria, de acordo com o modo de endereamento usado. As micro-rotinas
de escrita do resultado (Programa 12.8) recebem oresultado no registo RD e
escrevem-no na localizao especificada pelos bits
e do registo de instruo.

Caso o bit seja , a escrita deve sempre ter lugar para um registo. O endereo deste registo especificado directamente pela unidade de controlo do
banco de registos, descrita na Figura 12.12. Caso o bit seja , o valor dever

228

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

ser escrito na posio de memria apontada pelo registo EA, caso o modo de


 
endereamento seja indirecto ( = ) ou indexado ( = ). Uma vez que s
WBR0:
WBR1:

R[WBR]  RD
CAR  IH0

; Escrita em registo
; Tratamento de interrupes

WBM0:
WBM1:
WBM2:

S: CAR  WBR0
M[EA]  RD
CAR  IH0

; Escrita em registo se
= 1
; Escrita do resultado
; Tratamento de interrupes

Programa 12.8: Micro-rotina de escrita do resultado.


existem duas micro-rotinas de escrita do resultado, a tabela correspondente na
memria de mapeamento B deve ser construda de tal forma que as entradas
correspondentes aos modos de mapeamento indexado e indirecto por registo
apontem para o micro-cdigo com rtulo WBM0. A entrada nesta tabela correspondente ao modo de endereamento imediato nunca usado, uma vez que
este modo de endereamento no pode ser utilizado para especificar o destino
de uma operao.
No caso em que o primeiro operando especificado utilizando o modo de
endereamento por registo, a escrita do resultado mais simples, bastando copiar o contedo do registo RD para o registo especificado na instruo assembly.
O endereo deste registo seleccionado directamente pelo circuito, de acordo
com a Figura 12.12.

12.3.5 Teste de Interrupes


A fase final da execuo de uma instruo o teste existncia de interrupes
est activo, o que significa
pendentes. Nesta fase, verifica-se se o sinal
que existe uma interrupo pendente e que o bit que assinala a disponibilidade
para atender interrupes est activo. Em caso negativo, o controlo dever ser
transferido para a primeira micro-instruo da micro-rotina de carregamento
de instrues,
, o que desencadear a execuo da prxima instruo.
Note-se que possvel realizar a primeira linha do Programa 12.9 numa s
micro-instruo. A operao de transferncia de registos, sempre executada,
enquanto que a operao de carregamento do CAR s executada quando o
teste ao complemento do sinal
d resultado verdadeiro.
Se se der incio ao tratamento de uma interrupo, o registo de bits de estado e contador de programa devero ser guardados na pilha. O bit do registo
de estado que indica a disponibilidade do processador para receber interrupes dever ser desactivado, o que se consegue carregando
  o registo de estado
com o valor . Finalmente, dever ser activado o bit
, indicando externamente que se vai dar incio ao tratamento da ltima interrupo gerada.
Em resposta activao deste sinal, o controlador de interrupes dever
colocar o vector de interrupo no barramento de dados, identificando assim
o perifrico responsvel pela interrupo. As rotinas de tratamento s interrupes de cada perifrico do sistema, para onde o processador deve passar o
controlo da execuo aps uma interrupo de um perifrico, tm os seus endereos guardados numa tabela de interrupes, com incio no endereo FE00h.

12.3. MICRO-PROGRAMAO

229

O vector de interrupo serve como ndice para esta tabela. Assim, este valor dever ser somado a FE00h para se obter o endereo de memria onde se
encontra o endereo
com que dever ser carregado no contador de programa

(notar que
+FE00h=
-0200h e este estratagema utilizado por,
ao
contrrio
de
FE00h,
o
valor
0200h
ser possvel de representar no

campo
de 12 bits). Finalmente, dever ser transferido controlo para
a primeira micro-instruo da micro-rotina de carregamento de instruo, que,
neste caso, executar a primeira instruo da subrotina de interrupo.
IH0:
IH1:
IH2:
IH3:
IH4:
IH5:
IH6:
IH7:

R8  RE,   : CAR  IF0


M[SP]  R8, SP  SP-1
M[SP]  PC, SP  SP-1, IAK  1
R9  VECTINT
R8  0200h
R9  R9-R8
PC  M[R9]
RE  R0, CAR  IF0

; Guarda RE

Programa 12.9: Micro-rotina de tratamento de interrupes.

12.3.6 Gerao do Micro-cdigo


Definida a estrutura dos micro-programas e conhecidos os detalhes de cada
um dos blocos, basta agora definir o valor dos bits de cada micro-instruo.
Considere-se, por exemplo, a primeira micro-instruo a ser executada durante
a fase de carregamento de instruo:
IF0:

RI  M[PC]

; Carrega RI

Em primeiro lugar, h que identificar o tipo de micro-instruo que poder ser


utilizado para efectuar as transferncias entre registos indicadas. Neste caso,
pretende-se carregar o registo de instruo com o valor da posio de memria
apontada pelo contador de programa. O sinal que controla o carregamento do

registo de instruo,  , s est disponvel no formato
, o que define
imediatamente o tipo de micro-instruo a utilizar.
Analisando agora o circuito de dados na Figura 12.1, pode-se observar que,
para conseguir o funcionamento pretendido, necessrio garantir que:

1. O porto do banco de registos seja endereado com o nmero do registo



  
que guarda o PC, ou seja, 
.
2. O multiplexador MUXA seleccione a entrada , colocando o valor do PC
no barramento de endereos da memria.
3. O sinal  esteja activo.
4. Os sinais de controlo de escrita em memria e no banco de registos estejam inactivos.
5. O sinal que controla a escrita no registo de estado,  , esteja inactivo.
6. O sinal que controla a escrita no registo SBR,  , esteja inactivo.

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

230

Uma vez que o formato da micro-instruo o formato , isso fora automaticamente os valores pretendidos nos sinais que controlam a escrita na memria
e o multiplexador MUXA.
Analisando o circuito de controlo, na Figura 12.13, verifica-se que necessrio garantir que:
1. O registo CAR seja incrementado. Para tal, necessrio:
Controlar o multiplexador MUX5 com o valor
Colocar no controlo do multiplexador MUX4, seleccionando
  a entrada 0 do multiplexador
MUXCOND
e
colocando
o
sinal
a , por
 
seja .
forma a que



2. O multiplexador MUXAD dever seleccionar a sua entrada 


, que
 de  

ver tomar o valor
, uma vez que se pretende este valor em
.
Chega-se assim concluso que, nesta micro-instruo, os seguintes valores
devero estar
 definidos:
=

=


=


=
 =

=
 =
 = 
 
 =   

=
Estes valores definem a micro-instruo ilustrada na Figura 12.15, onde os
valores que no so relevantes foram deixados em branco. Arbitrando agora
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9

M5

00

S
R
1

S
R
2

L
S

MCOND

C
C

L
I

L
F

000

CONST/NA

7
W
R

MD

M
A
D

RAD

1111

Figura 12.15: Codificao da micro-instruo RI  M[PC].


que os valores no relevantes so colocados a , obtm-se finalmente o valor
que os bits devero ter para esta micro-instruo: 8060001Fh.
Um exemplo ligeiramente mais complexo permite-nos ilustrar a utilizao
de uma micro-instruo do tipo = e o uso das memrias de mapeamento.
Considere-se ento a micro-instruo:
IF1:

PC  PC+1, CAR  ROMA[OPCODE]

No circuito de dados, necessrio controlar a unidadearitmtica por forma



 
 igual a
a que esta efectue um incremento, o que significa colocar
e

seleccionar o PC no porto do banco de registos. tambm necessrio seleccionar a entrada do multiplexador MUXA e a entrada 0 do multiplexador MUXD.

12.3. MICRO-PROGRAMAO

231

Finalmente, necessrio activar o sinal de escrita nos registos  e garantir


que todos os outros sinais de escrita em registos esto desactivados.
  
 
Na unidade de controlo
necessrio seleccionar o valor
no sinal
 
assim como forar
a , por forma a que a sada da memria de mapea

mento seja seleccionada. ainda necessrio garantir que o sinal
fica a
.
Estas consideraes conduzem definio dos valores dos bits descritos na
Figura 12.16. Arbitrando, como anteriormente, que os campos no definidos
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9

M5

10

S
R
1

S
R
2

I
A
K

FM

0000

CALU

00101

M
A

M
B

M
2

M
R
B

RB

MD

M
A
D

RAD

00

1111

Figura 12.16: Micro-instruo PC  PC+1, CAR  ROMA[OPCODE].


so preenchidos com o valor , obtm-se o valor final para esta micro-instruo,
400A009Fh.

Sumrio
Este captulo descreveu a estrutura interna do processador P3, um processador
micro-programado de 16 bits, cujo conjunto de instrues tinha sido estudado
no captulo anterior.
As duas componentes mais importantes deste processador so o circuito
de dados e a unidade de controlo. O circuito de dados constitudo por um
banco de registos e uma unidade lgica e aritmtica, j estudadas em captulos
anteriores, alm dos registos de instruo e de estado e dos diversos barramentos de interligao. A unidade de controlo baseada num micro-sequenciador
que gera a sequncia de sinais que controlam o funcionamento do circuito de
dados. O micro-sequenciador usa uma unidade de teste de condies, uma
unidade de mapeamento e uma unidade que controla o banco de registos.
A parte final do captulo foi dedicada a estudar a forma como se definem
os micro-programas que controlam o funcionamento deste micro-processador
e a forma como realizada cada uma das suas instrues.

232

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

Captulo 13

Sistemas de Memria
Nos captulos anteriores, foi examinado o funcionamento de um processador,
sendo a memria encarada como um conjunto uniforme de registos, cada um
dos quais enderevel individualmente. Esta viso simplista no corresponde
realidade excepto em sistemas muito simples mas permitiu descrever o funcionamento do processador sem entrar em linha de conta com as complexidades
do sistema de memria.
Em particular, qualquer computador actual, quer seja um sistema embarcado, um computador pessoal ou um servidor, utiliza numerosos dispositivos
para armazenamento de dados. Estes dispositivos consideram-se usualmente
divididos em duas grandes classes: memria primria e memria secundria.
A memria primria, tambm referida como memria principal, construda
com base em circuitos integrados, tem um tempo de acesso mais curto, mas
mais cara (por bit) e de menor dimenso, no tendo a capacidade de guardar
os dados quando o sistema se encontra desligado.
A memria secundria, tambm conhecida como memria auxiliar, que recorre
a dispositivos baseados em tecnologia magntica (discos e fitas magnticas) ou
pticas (CDROMs e DVDs) mais lenta, mas tem um custo por bit menor,
maior capacidade e a possibilidade de conservar os dados mesmo sem o computador estar ligado. Esta memria, alm de poder ser utilizada pelo processador na execuo de programas, atravs do uso de memria virtual, tambm
usada para guardar dados em sistemas de ficheiros. Esta utilizao da memria secundria no ser estudada neste captulo, uma vez que implica um
conhecimento de sistemas operativos que vai para alm do mbito de um livro
introdutrio.
Neste captulo, ser analisado o sistema de memria de um computador,
comeando pela organizao da memria primria, que, em alguns sistemas
simples, representa a nica forma de armazenamento de dados.
Sistemas mais complexos exibem outras componentes, que sero estudados
nas seces seguintes. Em particular, sero estudados os sistemas de cache, que
tm como objectivo acelerar os acessos a memria primria, e os sistemas de
memria virtual, que permitem utilizar a memria secundria de forma transparente para o processador.
233

234

CAPTULO 13. SISTEMAS DE MEMRIA

13.1 Organizao de Sistemas de Memria


No Captulo 7 foi analisada a forma como um conjunto de registos pode ser
organizado em bancos e em mdulos de memria. Um mdulo de memria
constitudo por um conjunto de registos (de um ou mais bits) e um sistema
de descodificao que permite seleccionar um e apenas um dos registos, para
operaes de leitura ou escrita. Estes registos so, em geral, constitudos por
dispositivos com comportamentos anlogos aos das bsculas actuadas por nvel.
A memria principal de um computador, na sua verso mais simples, consiste num conjunto (ou banco) de mdulos de memria, organizados por forma
a serem visveis pelo processador como um conjunto de posies onde dados
podem ser escritos ou lidos.
Na prtica, a organizao do sistema de memria pode ser relativamente
complexa, dado que, tipicamente, o espao de endereos utilizado por diversos dispositivos de memria, e tambm, em alguns processadores, como o
caso do P3, pelo sistema de entradas/sadas.
A seco seguinte descreve a forma como a memria de um computador
construda atravs da interligao de diversos mdulos e como diversos tipos
de memrias podem ser interligados entre si por forma a partilharem o espao
de endereamento do processador.

13.1.1 Planos de Memria


Em geral, no possvel encontrar um nico circuito integrado de memria
que satisfaa, s por si, as necessidades de um dado sistema computacional
que se pretende projectar. Assim, necessrio utilizar diversos mdulos de
memria ligados entre si, por forma a oferecer a funcionalidade e capacidade
desejada.
Mdulos de memria comerciais tm, para alm das linhas de endereo,
uma ou mais
seleccionar esse mdulo, tipicamente deno linhas que permitem

minadas
(chip select) ou
(chip enable). Quando este sinal no est activo,
as sadas de dados do mdulo de memria esto no estado de alta impedncia, no sendo possvel aceder s memrias. Isto permite ligar, de forma muito
simples, diversos mdulos de memria por forma a conseguir criar memrias
de capacidade e configuraes arbitrrias.
A Figura 13.1 ilustra as interligaes disponibilizadas
por um mdulo de

memria simples, com uma entrada de seleco
. As linhas de endereo
permitem enderear uma das posies de memria do mdulo, e as linhas de
dados so ligadas ao barramento de dados do processador. A entrada de 
selecciona o modo desejado de funcionamento. Quando esta linha est activa,
a memria est em modo de leitura e disponibiliza para o exterior os dados
da posio especificada nas linhas de endereos. Quanto esta linha est a 0,
a memria colocada em modo de escrita e escreve na posio especificada
o valor que se encontra nas linhas de dados. Mdulos de memria deste tipo
podem ser interligados por forma a conseguir uma variedade de configuraes
de memria.
Existem fundamentalmente dois tipos de interligao de mdulos de memria: uma interligao que aumenta o nmero de bits de cada posio de
memria e uma interligao que aumenta o nmero de posies de memria.

13.1. ORGANIZAO DE SISTEMAS DE MEMRIA


Mem Read

235

R/W

Mem Enable

CS

Dados

Endereos

DATA
ADDR

Figura 13.1: Esquema de um mdulo de memria.

2m

Dados

Endereos

O primeiro tipo de ligao, ilustrado na Figura 13.2, permite compor diversos mdulos de memria, por forma a conseguir um nmero de bits em
cada posio superior ao que disponibilizado por cada mdulo de memria
isoladamente. Neste tipo de ligao, as palavras devolvidas por cada um dos
mdulos so concatenadas numa palavra de maior dimenso.

Mem Read
Mem Enable

D 2m1Dm
A n1A0

R/W

R/W

CS

CS

DATA
ADDR

D m1D0
A n1A0

DATA
ADDR

Figura 13.2: Ligao de mdulos de memria por forma a aumentar o nmero


de bits em cada posio de memria.
O segundo tipo de ligao, ilustrado na Figura 13.3, permite ligar dois mdulos de memria, por forma a conseguir um nmero de posies de memria
superior ao que fornecido por cada mdulo individualmente. Neste caso, o
barramento de endereos constitudo pelas linhas que entram directamente
nos mdulos e pela linha que usada para seleccionar o mdulo activo.
Os esquemas anteriores de interligao podem ser combinados entre si, por
forma a obter um sistema de memria com as caractersticas desejadas.
A utilizao de um exemplo concreto ilustra este mecanismo com maior cla
reza. Suponha-se
que existem disponveis mdulos de memria de 16k octetos

(ou seja,  posies de memria com 8 bits cada) e que se pretende
construir
um sistema de memria com 64k octetos, organizado em  posies de me
mria de bits cada uma. Neste caso, a interligao de quatro mdulos, tal
como est exemplificado na Figura 13.4 disponibiliza a funcionalidade pretendida. Note-se que uma interligao do mesmo tipo que a da Figura 13.3,
onde, portanto, as linhas de dados so interligadas entre si e usado um des-

CAPTULO 13. SISTEMAS DE MEMRIA


Endereos

Dados

236

R/W
CS
DATA
ADDR

Mem Read
A n1

R/W
CS

Mem Enable
DATA
A n2A0

ADDR

Figura 13.3: Ligao de mdulos de memria por forma a aumentar o nmero


de posies de memria disponveis.
codificador para seleccionar qual dos mdulos de memria dever responder
a um dado endereo. De referir que esta interligao das linhas de dados
possvel por estar garantido partida, pelo prprio funcionamento do descodificador, que apenas um dos circuitos de memria est activo em cada acesso
memria.
Na Figura 13.5 esto ilustradas as interligaes necessrias para combinar
8 mdulos de memria do mesmo tipo do utilizado no exemplo anterior por
forma a obter uma memria de 128k octetos, organizada em 64k palavras de 16
bits cada. Neste caso, aos 14 bits de endereo que so enviados directamente
para as memrias, juntam-se os dois bits que controlam o descodificador, o que
conduz a um total de 16 linhas de endereo.

13.1.2 Mapas de Memria


Foi analisado na seco anterior como diversos mdulos de memria podem
ser interligados entre si por forma a formarem uma memria da dimenso desejada.
Nesta seco, ser estudada a forma como as memrias so interligadas
com o processador, por forma a disponibilizarem o espao de endereamento
desejado pelo projectista.
Admita-se uma situao muito simples, em que se pretende utilizar o mdulo de memria da Figura 13.4 para disponibilizar um espao de endereamento de 64k octetos num processador que tem 20 bits de endereo e tem um
barramento de dados de 8 bits. Note-se que, embora a memria possa ter uma
estrutura interna complexa, ela apresenta-se para o processador de uma forma
semelhante ao do mdulo simples da Figura 13.1, neste caso com 16 linhas de
endereo e 8 de dados.

Uma vez que o processador tem um espao de endereamento total de 

Mem Enable

S1

S0

EN
Descodificador
0

237

Mem Read

A14

D7D0

A15

A13A0

13.1. ORGANIZAO DE SISTEMAS DE MEMRIA

14
8

R/W
CS
DATA
ADDR

R/W
CS
DATA
ADDR

R/W
CS
DATA
ADDR

R/W
CS
DATA
ADDR

Figura 13.4: Esquema de uma memria de 64k octetos, construda com quatro
mdulos de 16k octetos cada.
octetos, de 00000h a FFFFFh (superior capacidade do mdulo de memria),
o projectista tem, em primeiro lugar, de decidir o espao de endereamento

que dever corresponder
memria. Suponha-se que a opo do projectista
a de que as  posies de memria devero estar localizadas nas posies
F0000h a FFFFFh, isto , no topo do espao de endereamento utilizvel pelo
processador.
correspondncia que necessrio realizar entre endereos de memria e
mdulos habitual chamar-se o mapa de memria. Muitas vezes, este mapa
ilustrado de forma grfica, como o caso da Figura 13.6, que corresponde ao
exemplo em estudo. Para conseguir que a memria fique visvel nesta zona do
espao de endereamento, h que criar um circuito de descodificao, ilustrado
na Figura 13.7. A porta lgica utilizada faz com que apenas os endereos que
tm os 4 bits mais significativos a 1 activem a memria.
Em geral, os mapas de memria de um processador so mais complexos e
no so usadas portas lgicas individuais, mas sim descodificadores ou ROMs
para seleccionar mdulos individuais.
Quando se projecta o circuito que faz a descodificao dos endereos e a

Mem Enable

S0

Descodificador
0

D7D0

S1

EN

Mem Read

A14

A13A0

A15

D15D8

CAPTULO 13. SISTEMAS DE MEMRIA

238

14
8

R/W

R/W

CS

CS

DATA

DATA

ADDR

ADDR

R/W

R/W

CS

CS

DATA

DATA

ADDR

ADDR

R/W

R/W

CS

CS

DATA

DATA

ADDR

ADDR

R/W

R/W

CS

CS

DATA

DATA

ADDR

ADDR

Figura 13.5: Esquema de uma memria de 128k octetos, organizada como 64k
palavras de 2 octetos cada.
gerao dos sinais de controlo dos mdulos de memria, h que garantir que:
1. Cada mdulo de memria seleccionado quando o endereo corresponde
a uma posio de memria guardada nesse mdulo e existe uma operao de acesso memria.
2. Os bits que so usados para enderear as palavras dentro do mdulo
so adequadamente controlados pelas linhas correspondentes do barramento de endereos.
Considere-se, por exemplo, um sistema baseado no mesmo processador do
exemplo anterior, em que se pretende realizar o mapa de memria da Figura 13.8. Neste mapa de memria, existe uma memria ROM de 32k octetos
na parte baixa da memria, e duas reas de RAM no contguas, ambas de
64k octetos. A realizao da descodificao deste sistema de memria poderia
tambm ser feita com portas lgicas discretas, mas isso resultaria num circuito
relativamente complexo.

13.1. ORGANIZAO DE SISTEMAS DE MEMRIA

239

FFFFFh

RAM
F0000h
EFFFFh

00000h

Figura 13.6: Mapa de memria de um processador um espao de endereamento de  octetos, mas com apenas 64k octetos de memria RAM instalada
entre as posies F0000h e FFFFFh.
Mem Read

R/W

Mem Enable
A19

CS

A18

UCP
20
Endereos

A17
A16

16

ADDR

A15A0

Dados

DATA

Figura 13.7: Circuito correspondente ao mapa de memria da Figura 13.6.


Se se utilizar um descodificador, controlado pelos 4 bits mais significativos
do endereo, possvel utilizar as suas sadas para controlar, directamente, os
bits de seleco das memrias RAM. O controlo da ROM ligeiramente mais
complexo, uma vez que preciso assegurar que a ROM seleccionada apenas
quando os 5 bits mais significativos so 0 e a operao uma operao de
leitura. A Figura 13.9 ilustra a realizao do circuito de descodificao que
corresponde ao mapa de memria da Figura 13.8.

13.1.3 Gerao dos Sinais de Controlo


At agora, assumiu-se que uma memria, logo que seleccionada em modo de
leitura, coloca na sua sada o valor das posies de memria desejadas. Na
prtica, o funcionamento de uma memria ligeiramente mais complexo, uma
vez que h que adaptar o funcionamento da memria a diversas velocidades
de funcionamento dos processadores e dos barramentos de controlo.

CAPTULO 13. SISTEMAS DE MEMRIA

240

FFFFFh

RAM
F0000h

...
1FFFFh

RAM
10000h

...
07FFFh

ROM
00000h

Figura 13.8: Mapa de memria de um processador com RAM e ROM.


Mem Read

R/W

Mem Enable

CS

UCP

Dados

Endereos
A15A0

20

16

16

RAM
DATA
ADDR

R/W
A19A16
CS

4
8
A15

Descodificador

EN

15
.

.
.

16

RAM
DATA
ADDR

1
0

CS
8
15

ROM
DATA
ADDR

Figura 13.9: Circuito correspondente ao mapa de memria da Figura 13.8.

13.1. ORGANIZAO DE SISTEMAS DE MEMRIA

241

Com efeito, enquanto que um processador pode funcionar com ciclos de


relgio de cerca de 1ns, os tempos de acesso a memria variam, conforme os
tipos de memria, entre poucos nano-segundos para as RAMs estticas e as dezenas de nano-segundos, para as RAMs dinmicas, de maior capacidade. Isso
significa que um mdulo de memria tipicamente no consegue disponibilizar
os dados num ciclo de relgio do processador, o que obriga existncia de um
protocolo para transferncia dos dados.
A forma mais simples de garantir que os dados so lidos correctamente
consiste em projectar o sistema de forma que o processador espere o tempo
suficiente para que a operao de leitura ou escrita se conclua com sucesso.
Suponha-se, a ttulo de exemplo, que um processador que trabalha a 100
MHz (o que corresponde um ciclo de relgio de 10ns) deve comunicar com
uma memria
que tem um tempo de acesso, medido a partir da activao do

sinal
, de 25ns. Neste caso, h que garantir que, numa operao de leitura,
o processador espera trs ciclos de relgio antes de ler os dados provenientes
da memria. De igual forma, numa operao de escrita, dever manter os
dados vlidos durante trs perodos de relgio, a partir do momento em que
seleccionou a memria.
A Figura 13.10 ilustra as formas de onda de uma operao de escrita num
sistema com esta configurao. Aps activao do sinal que selecciona o mdulo de memria respectivo, os dados devero manter-se vlidos no barramento durante 3 ciclos de relgio do processador.
10ns
T1

T2

T3

T0

T1

Relgio
Mem Enable
Read / Write
Endereos
Dados

Endereos vlidos
Dados
Tempo de acesso = 25ns

Figura 13.10: Formas de onda para uma operao de escrita em memria.


A operao de leitura funciona de forma similar. Neste caso, os dados apenas ficam garantidamente vlidos no barramento depois de passar um tempo
igual ao tempo de acesso memria, pelo que o processador s pode ler os
dados ao fim do terceiro ciclo de relgio.
As formas de ondas das Figuras 13.10 e 13.11 ilustram os acessos efectuados por um processador
 a memrias estticas, que, tipicamente, tm apenas
as linhas de controlo
e
. A realidade de um computador actual , no
entanto, bastante mais sofisticada.

CAPTULO 13. SISTEMAS DE MEMRIA

242
10ns
T1

T2

T3

T0

T1

Relgio
Mem Enable
Read / Write
Endereos vlidos

Endereos
Dados

Vlidos
Tempo de acesso = 25ns

Figura 13.11: Formas de onda para uma operao de leitura de memria.


Por um lado, as memrias utilizadas como memria primria so, na maioria dos casos, memrias dinmicas, cujo controlo significativamente mais
complexo do que o das memrias estticas. Estas memrias so mais baratas
(por bit) e exibem diversos modos de acesso, que permitem, entre outras coisas, a transferncia rpida de blocos de dados. O estudo detalhado das formas
de controlo de memrias est fora do mbito de um texto introdutrio, pelo
que no ser prosseguido aqui.
Por outro lado, o acesso de um processador no feito a uma memria
simples, mas a uma hierarquia de memrias, como se descreve em seguida.

13.2 Hierarquia de Memria


Por razes que se prendem com o desempenho do sistema, a estudar nesta
seco, a memria de um computador tem, na maior parte dos casos, diversos
nveis, ilustrados na Figura 13.12.

UCP

Cache
L1

Cache
L2

Memria
Primria

Memria
Secundria

Figura 13.12: Hierarquia de memria num computador.

13.2. HIERARQUIA DE MEMRIA

243

Do ponto de vista do desempenho do processador, a situao ideal corresponde a ter a maior quantidade de memria disponvel possvel a funcionar
velocidade mais rpida possvel. Porm, como o custo por bit e a velocidade
de funcionamento esto inversamente relacionados, a soluo adoptada passa,
geralmente, pelo uso de diversos tipos de memria, com diferentes velocidades de acesso. O sistema de memria est estruturado por forma a que os
dados e instrues mais comummente utilizados, em cada passo da execuo
de um programa, estejam em memrias mais rpidas, enquanto que os menos
frequentemente acedidos estejam em memrias mais lentas.
Na sequncia, ir ser analisada uma hierarquia de memria simples, onde
existe apenas um nvel de cache, uma memria principal de grande capacidade e uma memria secundria que usada como memria virtual. No caso
geral, podem existir vrios nveis de cache, mas isso no altera o mecanismo
de funcionamento.
Quando feito um acesso a uma posio de memria, quer para leitura
quer para escrita, o sistema comea por verificar se essa posio est disponvel na memria mais rpida, que denominada de cache. Se essa posio
no estiver disponvel na cache, consultada a memria principal, que geralmente do tipo RAM dinmica. Se a posio tambm no estiver disponvel
na memria principal, feito um acesso memria secundria, maior e mais
lenta, e geralmente a funcionar com base em discos magnticos.
Se o sistema de memria estiver bem estruturado, este sistema hierrquico
apenas ligeiramente mais lento, em mdia, que um sistema de memria em
que a totalidade da memria funcionasse velocidade da cache. O custo total,
porm, muito menor, uma vez que as memrias mais lentas tm um custo
por bit muito inferior ao das memrias mais rpidas.
Como possvel conseguir um objectivo prximo do original (memria
muito grande e muito rpida) investindo apenas uma fraco do montante
que seria necessrio se toda a memria fosse rpida? A possibilidade de obter
este resultado prende-se com um facto que se verifica em praticamente todos
os programas, e que conhecido pelo princpio da localidade. Este princpio
baseia-se na verificao emprica de que os acessos a memria feitos por um
processador so altamente correlacionados entre si, e no so distribudos uniformemente pela memria disponvel. Existem dois tipos de localidade:
Localidade temporal: se feito um acesso a um determinado endereo de
memria, muito provvel que haja um novo acesso a este mesmo endereo num futuro prximo.
Localidade espacial: se feito um acesso a um determinado endereo de
memria, muito provvel que haja um novo acesso a um endereo prximo deste.
A localidade temporal pode ser utilizada para acelerar os acessos a dados e
instrues, mantendo nas memrias mais rpidas as posies de memria que
foram utilizadas mais recentemente. Com efeito, uma fraco muito significativa do tempo de execuo de um programa gasta em ciclos de dimenso
relativamente pequena, onde so executadas repetidamente as mesmas instrues e re-utilizadas as mesmas variveis.
A localidade espacial pode ser utilizada com o mesmo fim, copiando para
memrias mais rpidas posies que esto, espacialmente, prximas daqueles

244

CAPTULO 13. SISTEMAS DE MEMRIA

que foram recentemente utilizados. A localidade espacial nos dados resulta do


uso de estruturas de dados, como, por exemplo, arrays, onde os valores so
acedidos em sequncia. A localidade espacial nas instrues deriva do modo
de funcionamento de um microprocessador, que executa as instrues de uma
forma essencialmente sequencial.
O aproveitamento da localidade (espacial e temporal) est na base do uso
de caches, que tm como objectivo reduzir os tempos de acesso do processador
memria primria. A maioria dos computadores actuais utilizam tambm
um sistema de gesto de memria denominado memria virtual, que utiliza
o princpio da localidade para permitir a utilizao pelos programas de uma
quantidade de memria superior quela que existe, fisicamente, no computador.
A conjugao destas duas tcnicas, caches e memria virtual, cuja realizao ser estudada em detalhe na Seco 13.3 e Seco 13.4, respectivamente,
leva a que, do ponto de vista da unidade central de processamento, esteja disponvel virtualmente uma memria muito rpida, de capacidade muito superior memria fsica presente no computador.

13.2.1 Caches
A funo de uma cache num sistema de memria permitir que a maioria dos
acessos a memria sejam feitos mais rapidamente do que possvel utilizando
directamente a memria primria do computador. Este conceito de uma memria pequena e mais rpida pode ser generalizado para incluir vrios nveis
de cache, como descrito na Figura 13.12. Os nveis de cache mais prximos do
processador so feitos com memrias mais rpidas, mas de menor capacidade.
Os nveis mais exteriores so realizados com memrias progressivamente mais
lentas.
A memria primria do computador , tipicamente, realizada com memrias dinmicas, cujos tempos de acesso se encontram tipicamente na gama dos
60ns a 70ns. As memrias de cache encontram-se muitas vezes no mesmo circuito integrado que o processador, e tm assim tempos de acesso compatveis
com a velocidade do processador. Em processadores modernos, comum existirem diversos nveis de cache internos ao processador, que podem ser ou no
complementados com caches exteriores. Estas caches podem ter tempos de
acesso da ordem da durao do ciclo de relgio do processador, que, com a
presente tecnologia, menor que 1ns.
Numa operao de leitura, a funo da cache disponibilizar dados e/ou
instrues num perodo de tempo mais curto do que o que possvel quando
o acesso feito memria principal. Numa operao de escrita, a cache deve
poder ser acedida rapidamente para guardar os dados, devendo os mesmos
ser posteriormente escritos em memria.
Uma vez que a cache tem menor dimenso que a memria principal, s
uma pequena fraco da totalidade do contedo da memria est presente, em
cada momento, na cache. Assim, necessrio substituir frequentemente dados
e instrues presentes na cache por outros, que esto a ser mais recentemente
acedidos.
Para quantificar a acelerao que possvel conseguir atravs do uso de
uma cache, considere-se um exemplo simplificado de um sistema computacional que tem apenas um nvel de cache e uma memria primria.

13.2. HIERARQUIA DE MEMRIA

245

Para usar um exemplo concreto, admita-se que um dado processador funciona a 500 MHz, que faz um acesso memria de dados em cada instruo e que
cada instruo demora 4 ciclos de relgio a ser executada. Nestas condies, o
processador faz um acesso memria de dados em cada 8ns1 .
Admita-se que a memria primria tem um tempo de acesso mdio de 70ns,
enquanto que a cache, realizada com uma tecnologia semelhante do processador, disponibiliza os dados em 2ns, o que corresponde ao perodo de relgio
do processador. Admita-se ainda que, neste sistema, os acessos a memria tm
um padro tal que 95% dos acessos feitos a memria podem ser substitudos
por um acesso cache, ou seja, que a cache exibe um taxa de sucesso (em ingls,
hit-rate) de 95%.
Nestas condies, possvel calcular o nmero de ciclos de relgio que demora, em mdia, a executar cada instruo, neste sistema e num sistema semelhante mas em que no fosse utilizada a cache.
Cada instruo demora 4 ciclos de relgio a ser executada, dos quais um
ciclo de acesso memria. O tempo mdio para um acesso memria dado
por
 
 
  
 


(13.1)

Onmero
    mdio de ciclos
  de relgio por cada instruo executada assim
 , ou seja,
 (esta medida de desempenho denominada de
de
CPI, ciclos por instruo, ou, em ingls, cicles per instruction). Significa isto que

este processador executa uma instruo a cada  ciclos de relgio, ou seja,
  
 
a cada
ns. Este processador executa assim   milhes de instrues por
segundo (ou MIPS, outra medida de desempenho de processadores - em ingls,
millions of instructions per second).
Se no existisse uma cache, cada acesso a memria teria de ser feito memria primria.
  Isto significa que o processador demoraria, para executar cada


instruo,
ciclos de relgio, ou seja, ciclos de relgio. O processa 
 MIPS, o que significa que ficaria aproximador executaria assim apenas
damente 7 vezes mais lento.
Este exemplo ilustra bem a importncia das caches no desempenho de um
sistema computacional, e mostra como a incluso de uma memria pequena e
rpida entre o processador e a memria principal aumenta significativamente
a velocidade com que as instrues so executadas.
Nestas anlises, no foi focado o aspecto crtico da dimenso das caches,
mas apenas a sua velocidade. A dimenso das caches, no entanto, crtica para
um bom funcionamento do sistema de memria. O impacto da dimenso aparece, indirectamente, no valor da taxa de sucesso, que maior para caches de
maior dimenso, e menor para caches mais pequenas. Em geral, no dimensionamento de uma cache para um sistema de memria, necessrio considerar
dois factores fundamentais:
A velocidade da cache, que condiciona a velocidade mxima de funcionamento do sistema.
A dimenso da cache, que condiciona a taxa de sucesso da mesma, e,
consequentemente, o nmero de acessos memria principal.
1 Ignore-se, por agora, que o processador precisa tambm de aceder s instrues, que tambm
esto guardadas em memria.

246

CAPTULO 13. SISTEMAS DE MEMRIA

A melhor soluo provm de um compromisso entre estes dois factores.


No caso do processador estudado no captulo Captulo 12, admitiu-se que
possvel executar um acesso a memria em cada ciclo de relgio. Assim, a
memria representada na Figura 12.1 representa, numa arquitectura tpica, a
cache mais interna do processador, que se assumiu ter um tempo de acesso
no superior ao ciclo de relgio do processador.
Por questes de clareza na exposio, foram omitidos na descrio do processador, as linhas de controlo necessrias para fazer a interface com o contro
lador de cache. Destas, a mais importante um sinal de 
, que dever
ser testado em cada leitura da cache. Este sinal, gerado pelo controlador da
cache, indica que a leitura se encontra concluda e que os dados pretendidos se
encontram disponveis no barramento de dados. No caso em que os dados no
se encontram presentes na cache, o processador dever esperar antes de prosseguir o processamento. No caso particular da arquitectura estudada no Captulo 12, o processador dever
continuar a executar a mesma micro-instruo


at que o sinal de 
fique activo. A utilizao de um linha de 
, geralmente, necessria quando so usadas caches um acesso cache, pois
este muito mais demorado quando os dados no esto disponveis na mesma
e tm de ser recuperados da memria principal.
Numa operao de escrita, a situao um pouco mais simples. Neste caso
o processador pode prosseguir imediatamente, desde que seja possvel guardar os dados em cache ou o controlador disponha de um registo que guarde os
dados temporariamente. Esse geralmente o caso, embora os detalhes de funcionamento do controlador possam ser complexos. Este assunto ser estudado
com algum detalhe na Seco 13.3.4.

13.2.2 Memria Virtual


De forma a que o processador no fique com um espao de endereamento
limitado quantidade de memria instalada no sistema, definido um espao
de endereamento virtual com uma dimenso tipicamente muito superior
memria primria. Assim, todo o processamento da UCP feito utilizando
endereos virtuais, em oposio aos endereos fsicos que permitem o acesso
memria primria e cache.
Sempre que o processador faz um acesso memria, o endereo que coloca
no barramento de endereos ser portanto um endereo virtual. Para efectuar
esta leitura ou escrita da memria, ser necessrio primeiro traduzir este endereo virtual para um endereo fsico. Esta tarefa est a cargo de uma unidade
especial no computador, a Unidade de Gesto de Memria, UGM (em ingls, Memory Management Unit, ou MMU). Logo, a sequncia de operaes no acesso
memria ser2 :
1. a UCP coloca no barramento de endereos o endereo virtual onde pretende aceder;
2. a UGM traduz este endereo para um endereo fsico;
2 Em certos sistemas, a cache funciona directamente com os endereos virtuais, situao em que
os pontos 2 e 3 esto invertidos

13.2. HIERARQUIA DE MEMRIA

247

3. realizado um acesso cache para testar se este endereo fsico l se


encontra; caso se encontre na cache, o acesso de leitura ou escrita termina
aqui;
4. caso contrrio, realizado um acesso memria primria.
Naturalmente, como o espao virtual muito maior que o espao fsico,
nem todas as posies de memria virtuais tero um correspondente endereo
fsico. Neste caso, no possvel realizar a traduo pela UGM, sendo necessrio fazer um acesso ao disco, local onde se encontra armazenado o espao
de endereamento virtual que no cabe em memria primria. Neste acesso
ao disco, transferem-se para memria primria os dados correspondentes aos
endereos virtuais acedidos. De facto, uma forma de olhar para este sistema
pensar na memria primria como uma cache para o espao de endereamento
virtual, sendo vlidas as observaes feitas na seco anterior.
O tempo de acesso ao disco, da ordem das dezenas de milisegundos,
muito superior ao tempo de acesso memria primria, que, como se viu,
da ordem das dezenas de nanosegundos. Portanto, existe um factor de 1 milho de diferena entre os tempos de acesso memria primria e secundria.
Assim, sempre que um dado endereo virtual no se encontra em memria primria h uma grande penalidade em termos de desempenho do processador.
Felizmente, este impacto reduzido pois, devido aos princpios da localidade
temporal e espacial, a taxa de faltas nos acessos a posies de memria virtuais
muito baixa. Um valor tpico para a taxa de faltas da ordem de 0,0001%, ou
seja, apenas um em cada um milho de acessos no se encontra em memria
primria.
Com os valores utilizados na Equao 13.1, tempos de acessos memria
e cache de 70ns e 2ns, respectivamente, e uma taxa de sucesso na cache de

  (ou
95%, e assumindo que o acesso ao disco demora 10ms
ns), com uma

taxa de faltas de endereos virtuais de 0,0001% (ou
), o tempo de acesso
memria passa a ser3 :
 
 
    
 
  
 


(13.2)
Portanto, 95% das vezes o acesso continua a ser resolvido pela cache. Dos restantes 5% dos casos, em que necessrio fazer um acesso memria primria,
99,9999% das vezes o acesso feito apenas memria primria, e em apenas
0,0001% dos casos necessrio fazer um acesso ao disco. Como se pode observar, a grande penalidade dos acessos ao disco diluda pelo baixo nmero de
acessos a este.
De qualquer forma, sempre que acontece uma falta a UCP no fica, em geral, bloqueada espera da leitura do disco, o que poderia significar o desperdcio de milhes de instrues. Nos computadores actuais, existem em geral
vrios processos a executar-se concorrentemente. Isto significa que, embora a
cada instante s se esteja a executar um destes processos, existe um conjunto
de outros processos espera da sua vez. O tempo de processamento assim
dividido, de forma controlada pelo sistema operativo, entre estes diferentes
processos. Se o processo que se est a executar encontrar uma falta de endereo virtual, este processo bloqueado e colocado em execuo um dos processos em espera. Desta forma, o carregamento da informao do disco ocorre
3 Para simplificar, foi aqui propositadamente ignorado o tempo de traduo do endereo virtual
para fsico por parte da UGM.

248

CAPTULO 13. SISTEMAS DE MEMRIA

durante a execuo til de outro processo, diminuindo-se significativamente o


despedcio do tempo de processamento.

13.3 Organizao de Sistemas de Cache


Como foi visto atrs, existem dois tipos de localidade de acessos: localidade
temporal e localidade espacial. Para aproveitar a localidade temporal, a cache
deve guardar dados que foram recentemente acedidos. Para aproveitar a localidade espacial, a cache dever guardar dados que se encontram prximos, em
termos de endereo, de dados recentemente acedidos.
As diversas alternativas que existem para arquitecturas de cache empregam
diferentes solues para conseguir aproveitar, da melhor forma, cada uma destas caractersticas dos acessos. Para tornar mais clara a discusso que se segue,
assuma-se um sistema com uma hierarquia de memria que consiste em apenas dois nveis: um primeiro nvel, a cache, e um segundo nvel, a memria
primria. Na prtica, o nvel seguinte poder no corresponder efectivamente
memria primria mas apenas a um segundo nvel de cache. Isso, no entanto,
no afecta o comportamento do primeiro nvel de cache, que ser analisado em
seguida. Ignore-se tambm para j a memria secundria, assumindo-se portanto que todos os endereos so endereos fsicos.
Existem fundamentalmente quatro graus de liberdade que afectam a escolha de uma arquitectura para o sistema de cache.
O primeiro a forma como o espao de endereamento da memria principal mapeado para o espao mais reduzido de endereamento da cache. Uma
vez que a cache tem necessariamente um menor nmero de posies que a
memria, h que definir um processo atravs do qual se possa mapear cada
posio de memria primria para uma posio da cache.
O segundo aspecto prende-se com o dimensionamento dos blocos de cache,
que tem como objectivo fazer o melhor uso possvel da localidade espacial dos
acessos a dados. Um bloco de cache representa a quantidade mnima de octetos
que so carregados da memria principal para a cache, quando necessrio
efectuar um carregamento.
O terceiro aspecto a forma como so substitudos dados na cache, por
forma a maximizar a explorao que feita das localidades temporais.
O quarto aspecto est relacionado com a forma como as operaes de escrita so tratadas. Uma operao de escrita fundamentalmente diferente de
uma operao de leitura porque o processador pode prosseguir a execuo de
um programa sem que a operao de escrita tenha terminado e porque afecta
dados em memria que podem ser acedidos por outros dispositivos.

13.3.1 Mapeamento de Dados em Caches


De uma forma geral, o mapeamento de um espao de endereamento de maior
dimenso (que corresponde memria principal) para um espao de endereamento mais pequeno (a cache) baseia-se em considerar apenas um subconjunto
dos bits de endereo.
Um endereo de 32 bits dever assim ser visto como partido em duas partes:
o ndice (index) e a etiqueta (tag). A Figura 13.13 ilustra a partio de um endereo de 32 bits em duas partes, para uma cache que disponibilize 1024 posies.

13.3. ORGANIZAO DE SISTEMAS DE CACHE

249

A dimenso da etiqueta depende do tamanho mximo de memria disponvel,


  se assumiu que o espao total de
e s corresponde aos restantes 22 bits porque
endereamento , como foi referido, de  octetos. Quando feita uma leitura
31

10 9
Etiqueta

0
ndice

Figura 13.13: Campos etiqueta e ndice.


a um dado endereo, o subconjunto de bits que corresponde ao ndice usado
para enderear a cache. Nessa posio da cache estar guardado o valor que se
encontra guardado na posio de memria pretendida.
Porm, uma vez que um nmero de endereos diferentes ir corresponder
a uma mesma posio na cache, importante poder distinguir se o dado guardado nessa posio da cache corresponde efectivamente posio de memria
pretendida. Isso consegue-se guardando na cache no s os dados, mas tambm o campo etiqueta do endereo correspondente aos dados que l esto.
Quando feito o acesso cache, usando apenas os bits de ndice, basta
comparar o campo etiqueta da posio de memria a que se quer aceder com a
etiqueta que est guardada na cache. Se as etiquetas forem iguais, o contedo
dessa posio de cache o contedo pretendido. A Figura 13.14 ilustra de
forma esquemtica o mecanismo de funcionamento de uma cache deste tipo.
Etiqueta

ndice
Etiquetas

Dados

=
Sucesso

Dados

Figura 13.14: Esquema de funcionamento de uma cache de mapeamento directo.


Se as etiquetas forem diferentes, os dados que esto na cache no so os
pretendidos e ser necessrio efectuar uma leitura da memria principal para
obter os dados correctos. Uma vez que, por causa da localidade temporal, estes

CAPTULO 13. SISTEMAS DE MEMRIA

250

dados tem grande probabilidade de vir a ser usados dentro de pouco tempo, h
que enviar os dados no s para o processador, mas tambm para esta posio
da cache, e actualizar o valor da etiqueta.
Este tipo de mapeamento, a que se chama mapeamento directo, no representa a nica possibilidade de mapear o espao total de endereamento para
um conjunto mais reduzido de posies de cache.
As caches de mapeamento directo so as mais simples. No entanto, so
as mais restritivas pois, como cada posio de memria s pode estar numa
dada posio da cache, o desempenho ser muito mau se o programa aceder
consecutivamente a duas posies de memria que, por azar, calhem na mesma
posio da cache.
Uma alternativa s caches de mapeamento directo so as caches completamente associativas. As caches associativas so uma consequncia da seguinte
observao: o ideal, de um ponto de vista de flexibilidade da cache, que uma
dada posio de memria possa ser colocada em qualquer posio da cache.
Neste caso, o endereo interpretado na totalidade como uma etiqueta, no
existindo o campo ndice. A identificao da posio correcta da cache faz-se,
unicamente atravs da comparao das etiquetas. Se existir uma posio da
cache que contenha uma etiqueta com valor igual etiqueta do endereo que
est a ser acedido, ento essa posio de cache contm o valor pretendido.
Para realizar estas caches usam-se memrias associativas, cujo funcionamento
diferente das habituais. Numa memria associativa o valor que usado para
enderear a memria no corresponde a uma posio, mas sim ao contedo de
uma posio de memria. Cada posio nas memrias associativas tem no
s os dados, mas tambm uma etiqueta. O endereo que colocado entrada
de uma memria associativa comparado simultaneamente com as etiquetas
de todas as posies de memria, sendo disponibilizados os dados que correspondem posio onde a etiqueta coincide com o valor usado para enderear
a memria. A Figura 13.15 ilustra o esquema interno de uma memria totalmente associativa.
Etiqueta

Etiquetas

Dados

Etiquetas

Dados

...

Etiquetas

Dados

Dados

Dados

Sucesso

Dados

Dados

Figura 13.15: Esquema de uma memria totalmente associativa.


Apesar de mais flexveis, estas caches so mais lentas e mais complexas do
que as de mapeamento directo devido necessidade de ser feita uma comparao simultnea de todas as posies da memria com a etiqueta do endereo.

13.3. ORGANIZAO DE SISTEMAS DE CACHE

251

Por essa razo, caches de dimenso significativa no so, geralmente, completamente associativas. Existe, no entanto, uma forma de obter muitas das
vantagens do mapeamento totalmente associativo mantendo a velocidade de
acesso e o custo de uma cache de mapeamento directo.
Uma cache de mapeamento associativo por conjuntos consiste num conjunto
de caches de mapeamento directo, endereadas em paralelo. Todas elas so
acedidas, em simultneo, com o campo ndice do endereo, mas apenas aquela
que tiver a etiqueta correcta disponibiliza os dados. Se existirem  caches de
mapeamento directo em paralelo, uma dada posio de memria pode ser mapeada para qualquer uma  caches, na posio que corresponde ao valor do
ndice. A este tipo de cache chama-se cache de mapeamento associativo de  vias.
Estes trs tipos de caches podem ser vistos como pertencendo todas ao
mesmo tipo, variando apenas o nmero de vias de associatividade. Numa

cache de mapeamento directo, o nmero de vias de associatividade . Numa

cache
totalmente associativa, o nmero de vias de associatividade , onde

o nmero de posies da cache. O endereo partido em dois campos,
cuja dimenso varia com o tamanho das caches e o nmero de vias de associa  , onde 
tividade. Em particular, o nmero de bits no ndice igual a
a dimenso da cache e  o nmero de vias de associatividade.
Em caches que tenham diversas vias de associatividade, a escrita de novos
dados em cache tem de ser antecedida da escolha da via que ir conter esses
dados. Com efeito, qualquer das vias poder ser escolhida, dependendo a deciso da poltica de substituio, que ir ser estudada na Seco 13.3.3.
Por exemplo, uma cache de 4096 posies usar 12 bits de ndice se for de
mapeamento directo, 10 bits de ndice se for associativa de 4 vias e nenhum bit
de ndice se for totalmente associativa. Neste ltimo caso, o nmero de vias de
associatividade igual ao nmero de posies na cache.

13.3.2 Blocos de Cache


Uma cache em que apenas seja carregada uma posio de memria de cada
vez no faz uso da localidade espacial. Com efeito, se, imediatamente a seguir
for acedida pela primeira vez a posio de memria seguinte, esta no se encontrar em cache. No entanto, pelo princpio
da localidade espacial, muito

provvel que a posio de memria
seja acedida em breve se acabou de
ser feito um acesso posio de memria .
As caches fazem uso desta caracterstica dos padres de acesso mapeando
para a cache blocos de posies consecutivas de memria, e no posies individuais. Estes conjuntos de posies de memria, cuja dimenso varia de
cache para cache, chamam-se blocos de cache ou linhas de cache. O uso de blocos
de cache est tambm relacionado com uma maior eficincia nos acessos a memria primria, que, tipicamente, disponibilizam mecanismos de acesso mais
rpidos para conjuntos de posies consecutivas.
Quando uma cache funciona por blocos, que o caso mais comum, o endereo deve ser visto como dividido em trs partes: a etiqueta, o ndice e o
deslocamento dentro do bloco. O campo deslocamento tem um nmero de bits
suficiente para enderear uma posio individual dentro de um bloco e usado
para seleccionar qual das posies do bloco dever ser transferida para o processador.

CAPTULO 13. SISTEMAS DE MEMRIA

252

Tal como anteriormente, os bits do ndice so usados para seleccionar qual


dos blocos poder conter a posio de memria pretendida. O nmero de blocos na cache passa a ser igual dimenso da cache dividida pela dimenso
de
 

cada bloco. O nmero de bits no ndice passa assim a ser igual a
, onde


a dimenso de cada bloco, e, tal como anteriormente,
a dimenso da
cache e  o nmero de vias de associatividade. Uma cache com a mesma dimenso do exemplo anterior, com 4096 posies, que use blocos de 16 posies,
usar apenas 8 bits de ndice se for de mapeamento directo. Com efeito, as 4096
posies correspondem a 256 blocos de 16 posies cada, sendo cada um dos
blocos endereado pelo campo de 8 bits do ndice. A partio do endereo nos
campos de etiqueta, ndice e deslocamento para este exemplo est ilustrada na
Figura 13.16.
31

12 11
Etiqueta

4 3

ndice
Deslocamento

Figura 13.16: Campos etiqueta, ndice e deslocamento para o exemplo do texto.


A Figura 13.17 ilustra a correspondncia que existe entre as posies de uma
memria primria de 64M e os blocos de uma cache com estas caractersticas.
Note-se que a dimenso das etiquetas no se altera com o uso de blocos na
Etiqueta

ndice Deslocamento

0000000h
0000001h
0000002h
0000003h

Cache
Etiqueta

Dados
0

0000h

F
00h

1FC0FE2h

01h

1FC0FE3h

02h

256 blocos

Memria

1FC0FE1h

3FFFFF9h
FDh

3FFFFFAh
3FFFFFBh

1FC0h

FEh

3FFFFFCh

3FFFh

FFh

3FFFFFDh
3FFFFFEh
3FFFFFFh

Figura 13.17: Exemplo de mapeamento de uma memria de 64M octetos para


uma cache de mapeamento directo de 4k octetos com blocos de 16 octetos.

13.3. ORGANIZAO DE SISTEMAS DE CACHE

253

cache, uma vez que o nmero de bits de ndice menor, mas os bits retirados ao
ndice so utilizados para enderear dentro do bloco de cache. Porm, passa a

ser necessria apenas uma etiqueta para cada conjunto de posies na cache,
o que significa que existe uma penalizao mais pequena pela necessidade de
guardar as etiquetas, alm dos dados propriamente ditos.
agora possvel perceber a estrutura interna de uma cache de mapeamento
directo, que se encontra representada na Figura 13.18. A cache consiste num
conjunto de blocos, cada um dos quais contm diversas posies de memria e
um conjunto de bits que guarda a etiqueta que corresponde ao referido bloco.
Etiqueta

ndice
Deslocamento
Dados

Descodificador

Etiquetas

=
Multiplexador
Sucesso

Dados

Figura 13.18: Estrutura de uma cache de mapeamento directo.


Os bit de endereo so usados de forma diferente, conforme o campo a que
pertencem. Numa primeira fase, os bits de ndice so usados para enderear,
atravs de um descodificador, o bloco de cache que poder conter os dados.
Numa segunda fase, a etiqueta guardada junto ao bloco seleccionado comparada com a etiqueta do endereo pretendido. Se a comparao der um resultado positivo, a posio de memria pretendida reside no bloco escolhido,
sendo seleccionada pelo campo deslocamento do endereo e enviada para o
processador.
Caches com mais vias de associatividade funcionam de forma semelhante.
A Figura 13.19 descreve a estrutura de uma cache com duas vias de associatividade. Neste caso, os bits de ndice seleccionam dois blocos, um de cada um
dos dois conjuntos de blocos. A comparao com as etiquetas feita em paralelo para cada uma das etiquetas nas posies indicadas pelo campo ndice.
Apenas uma destas comparaes poder dar um resultado positivo, uma vez
que a gesto da cache garante que uma posio de memria nunca est presente simultaneamente em mais do que uma posio da cache. O uso de buffers
de trs-estados simplifica a lgica que escolhe qual das vias dever enviar os

CAPTULO 13. SISTEMAS DE MEMRIA

254
Etiqueta

ndice
Deslocamento

Dados

Etiquetas

Dados

Descodificador

Etiquetas

Multiplexador

Multiplexador

Codificador

Hit

Multiplexador

Dados

Figura 13.19: Estrutura de uma cache com duas vias de associatividade.


dados para a cache. Se no for usada lgica trs-estados, ser necessrio usar
um codificador cuja sada controla um multiplexador que selecciona a via que
dever estar activa, como representado na Figura 13.19.

13.3.3 Polticas de Substituio


Nas caches de mapeamento directo no existe necessidade de tomar qualquer
deciso quando uma dada posio de memria no est presente na cache.
Com efeito, uma vez que se pretendem guardar na cache os dados mais recentemente acedidos, necessrio fazer uma substituio dos dados na cache
sempre que existe uma falta na cache. Uma vez que os dados pretendidos s
podem ir para uma posio na cache, o contedo dessa posio ter de ser
substitudo.
Nas caches que tm duas ou mais vias de associatividade, h que decidir em
qual das vias iro ser guardados os novos dados, j que isso implica deitar fora
dados que j esto na cache. Em geral, a melhor soluo consiste em substituir
os dados que foram acedidos h mais tempo, pois de acordo com o princpio
da localidade temporal, estes sero os que tm menos probabilidade de virem a
ser acedidos num futuro prximo. Esta poltica de substituio denominada
de LRU (do ingls, least recently used). No entanto, em caches com muitas vias
de associatividade, esta poltica difcil de implementar em hardware, uma
vez que obrigaria a manter informao sobre a altura em que foi acedido cada
um dos blocos de memria e a determinar, de forma muito rpida, qual a via
usada h mais tempo.
Existem diversas alternativas para resoluo deste problema. Uma possibilidade, que na prtica tem um comportamento bom, simplesmente selec-

13.3. ORGANIZAO DE SISTEMAS DE CACHE

255

cionar de forma aleatria uma das vias como aquela que contm o bloco que
dever ser substitudo. Uma outra soluo bastante eficaz, mas ligeiramente
mais complexa, consiste em manter um contador, para cada conjunto de  blocos de cache, que incrementado sempre que o seu contedo igual ao nmero
do bloco que acedido. Desta forma, blocos frequentemente acedidos tm menos probabilidade de serem substitudos, uma vez que o contador permanece
pouco tempo a apontar para eles.

13.3.4 Polticas de Escrita


At agora analisou-se o comportamento de uma cache quando o processador
executa instrues de leitura. Nas operaes de escrita, os compromissos so
significativamente diferentes. Existem, fundamentalmente, dois graus de liberdade no que respeita s operaes de escrita.
O primeiro grau de liberdade prende-se com a forma como tratada uma
operao de escrita quando a posio de memria que escrita se encontra em
cache. Nas caches write-back, a escrita feita somente para a cache. Nas caches
write-through, a escrita feita simultaneamente na cache e na memria.
Uma vantagem das caches write-back que a escrita executada velocidade da cache, no havendo necessidade de esperar pela escrita em memria.
Esta vantagem, no entanto, no to grande como possa parecer, uma vez que
o processador no precisa de ficar parado espera que termine a operao de
escrita, ao contrrio do que acontece com uma operao de leitura. Uma outra
vantagem das caches write-back a possvel reduo do trfego no barramento
causado por escritas na memria, uma vez que duas escritas para uma posio
na cache no geram escritas separadas na memria. Porm, a esta vantagem
corresponde uma desvantagem na altura em que necessrio substituir o bloco
de cache, uma vez que a memria tem de ser actualizada com os dados alterados que esto na cache. Isto pode atrasar significativamente a operao de
leitura que causa a substituio do bloco, ou, em alternativa, torna a estrutura
da cache consideravelmente mais complicada.
O segundo grau de liberdade est relacionado com a aco a tomar quando
existe uma escrita para um bloco que no est em cache. Pode ter-se como
poltica que o bloco dever ser copiado de memria para cache (caches writeallocate) ou, pelo contrrio, que os dados devero ser escritos directamente em
memria, sem que o bloco seja copiado para cache.
Geralmente, as caches write-back so do tipo write-allocate, enquanto que
muitas das caches write-through so do tipo no-write-allocate. No entanto, outras
opes so possveis, sendo necessrio analisar o impacto no desempenho de
cada uma das opes, face ao perfil tpico de execuo dos programas.

13.3.5 Bits de Controlo


Num bloco de cache, para alm dos dados propriamente ditos e da etiqueta,
existe necessariamente um conjunto de bits de controlo que mantm informao diversa.
No caso de caches write-back, um desses bits necessariamente o dirty bit.
Este bit indica se os dados nesse bloco de cache foram alterados e devero ser
escritos para a memria quando esse bloco de cache for necessrio para outros
dados.

256

CAPTULO 13. SISTEMAS DE MEMRIA

Outro bit de controlo presente em todas as caches o valid bit, que indica
se os dados que esto nessa posio da cache so vlidos ou no. Existem
diversas razes pelas quais os dados podem deixar de estar vlidos. O computador pode estar a comear a executar um programa, situao em que todos
os dados esto invlidos. Podem tambm existir outros dispositivos que alterem posies de memria, situao em que a cpia em cache fica invlida. Em
sistemas operativos que possam executar mais de um programa de cada vez
(multi-tasking), os blocos de cache podero tambm ser marcados como invlidos quando existe uma mudana de contexto.
Podero existir outros bits de controlo, que controlam o funcionamento da
cache em outros aspectos. Por exemplo, podero existir bits de controlo que
permitem realizar a poltica de substituio, ou bits que permitam implementar
mecanismos de proteco de memria. O nmero e a funo desses bits varia
de sistema para sistema.

13.4 Memria Virtual


As caches, que so os elementos da hierarquia de memria mais perto do processador, tm como objectivo primrio acelerar a velocidade de acesso a dados
por parte do processador. No outro extremo da hierarquia existe a memria
secundria, tipicamente constituda por discos magnticos, cuja funo aumentar a dimenso da memria vista pelo processador para alm da dimenso
da memria primria instalada no computador.
A memria principal e o disco so dispositivos bastante diferentes. No entanto, em muitos sistemas, transparente para o processador (e para o programador) qual a localizao fsica dos dados que so utilizados. Um programa
pode aceder a dados guardados num espao de endereamento que muito
maior que a memria primria disponvel. A disponibilizao de um espao
virtual de endereamento maior que o fisicamente disponvel conseguida utilizando endereos virtuais.
Quando um sistema disponibiliza memria virtual, todos os acessos feitos
pelo processador memria so feitos com endereos virtuais. Este sistemas
dispem de uma Unidade de Gesto de Memria, UGM (em ingls, Memory
Management Unit, ou MMU) que traduz o endereo virtual para um endereo
fsico de memria, caso o endereo virtual corresponda a uma posio de memria. Se o endereo virtual corresponder a uma posio que se encontra,
nesse momento, guardada em disco, o sistema vai buscar essa posio de memria ao disco e copia-o para a memria principal.
Para facilitar esta traduo de endereos, e para optimizar a transferncia
de dados de e para memria secundria, os espaos virtual e fsico so divididos em grupos contguos de endereos, a que se chamam, nesta caso, pginas. A
dimenso de uma pgina, naturalmente igual nos espaos virtuais e fsicos, ,
tipicamente, significativamente maior que a dimenso de um bloco de cache,
uma vez que a transferncia de dados entre memria secundria e primria
incorre numa penalizao muito maior do que a transferncia entre memria
principal e cache. A dimenso de uma pgina de memria virtual varia, tipicamente, entre 1k octetos e 16k octetos, dependendo do sistema.
Sempre que feito um acesso a um endereo virtual, a UGM verifica se a
pgina correspondente a esse endereo est em memria ou no. Se no es-

13.4. MEMRIA VIRTUAL

257

tiver, diz-se que houve uma falta de pgina (em ingls, page fault) e a pgina
carregada para memria. O carregamento de uma pgina, desencadeado atravs da execuo de uma rotina especfica para o efeito, pode demorar diversos
milisegundos, tempo suficiente para executar milhes de instrues num processador moderno. Isto significa que o processador fica livre para outras tarefas, tais como executar outros programas (em sistemas multi-tarefa) ou atender
a pedidos pendentes.
O processo de traduo de endereos virtuais para endereos fsicos usa diversas estruturas fsicas e lgicas no seu funcionamento. As mais importantes
so a tabela de pginas e a TLB (do ingls, Translation Look-Aside Buffer).

13.4.1 Tabelas de Pginas


Um dado endereo virtual especifica uma posio no espao de endereamento
virtual. Tal como nas caches, este endereo pode ser decomposto em diversos
campos, que, no caso de memria virtual, so dois: o nmero da pgina e o
deslocamento dentro da pgina.
O endereo fsico pode tambm ser visto como repartido nestes dois campos. Uma vez que as pginas tm a mesma dimenso, o deslocamento dentro
da pgina igual no endereo fsico e no endereo virtual. J o nmero de pgina pode exigir um nmero de bits diferente, uma vez que as dimenses do
espao de endereamento fsico e virtual so, tipicamente, bastante diferentes.
Desta forma, a traduo de endereos virtuais para fsicos consiste, fundamentalmente, em traduzir o nmero da pgina virtual para um nmero de
pgina fsica.
Tabela de Pginas Plana
O esquema mais simples de traduo baseia-se no uso de uma tabela (ver Figura 13.20), com um nmero de entradas igual ao nmero de pginas virtuais.
Em cada entrada dessa tabela encontra-se guardado um descritor de pgina (em
ingls, Page Table Entries ou PTE) que inclui informao sobre o endereo fsico
da pgina, ou informao que permite localizar a referida pgina em disco,
possivelmente atravs do uso de tabelas auxiliares.
Quando feito um acesso a uma pgina de memria virtual, a tabela consultada para verificar se a referida pgina existe em memria fsica. Em caso
afirmativo, o endereo fsico construdo atravs da concatenao da entrada
correspondente na tabela com o deslocamento dentro de pgina. Em caso negativo, existe uma falta de pgina, e chamada uma sub-rotina do sistema
operativo para copiar a pgina para memria principal.
Este esquema simples funciona bem apenas quando o espao de enderea  um sismento virtual no demasiado grande. Considere-se, por exemplo,
tema que disponha de um espao de endereamento virtual de  octetos e
   das
uma memria fsica de 256M octetos. Assuma-se ainda que adimenso

pginas de k octetos. Este sistema dispe de um total de  (   ) pginas virtuais, o que significa que a tabela de pginas tem de ter  entradas,
qualquer que seja a quantidade de memria virtual que esteja a ser utilizada
por um programa.
Cada entrada na tabela de pginas ter de ter a dimenso suficiente para
identificar qual das pginas em memria fsica corresponde pgina virtual

CAPTULO 13. SISTEMAS DE MEMRIA

258
Nmero da pgina virtual

Deslocamento

Memria Primria

Tabela de pginas
00000h

0001h

00001h

0003h

00002h

0000h

00003h

0002h

0000 000h
0001 000h
0002 000h
0003 000h

.
.
.

NULL

...

0003 FFFh
FFFE 000h
FFFF 000h

FFFFEh

FFFFh

FFFFFh

FFFEh

Figura 13.20: Tabela para traduo de endereos virtuais.



 sepretende aceder. A memria fsica tem capacidade para  pginas


que
(   ). Por simplicidade, admita-se que todas as pginas so alinhadas em
memria, o que significa que o primeiro endereo de cada pgina tem os l

timos  bits a . Neste caso, basta guardar os
bits mais significativos do
endereo na tabela de pginas, logo cada descritor de pgina necessita de, pelo
menos, dois octetos.
Isto significa que uma tabela desta dimenso ir ocupar um espao de memria pelo menos igual a  M octetos, qualquer que seja a dimenso do programa que est a ser executado. Isto representa um uso muito ineficiente de
recursos, especialmente no caso em que o programa que est a ser executado
usa pouca memria.
Tabela de Pginas Hierrquica
A utilizao de tabelas hierrquicas elimina a ineficincia que foi apontada nas
tabelas planas, tornando, no entanto, o acesso aos dados um pouco mais lento.
Numa tabela de pginas hierrquica de dois nveis, o primeiro nvel da
tabela de pginas constitudo por uma nica tabela, denominada de directrio. O directrio contm referncias para tabelas do segundo nvel que contm,
essas sim, os endereos fsicos das pginas. Este esquema, ilustrado na Figura 13.21, obriga a que sejam feitos dois acessos memria para recuperar
o endereo fsico das pginas. Em compensao, as tabelas do segundo nvel apenas precisam de estar presentes quando as correspondentes pginas de
memria esto efectivamente a ser utilizadas.
Considere-se o mesmo caso do exemplo anterior. Numa tabela plana, a ta-

13.4. MEMRIA VIRTUAL

259

Nmero da pgina virtual


ndice no directrio
31

ndice na tabela

22 21

Deslocamento
12 11

Tabelas
000h

0001h

001h

0003h

Memria Primria
0000 000h
0001 000h

002h
Directrio
000h

3FEh

001h

3FFh

002h

3FEh
3FFh

0002 000h

0002h

.
.
.

000h

FFFEh

001h

FFFFh

0003 000h

0003 FFFh

...
FFFE 000h

002h
FFFF 000h
3FEh

NULL

3FFh

NULL

Figura 13.21: Tabela hierrquica de dois nveis para traduo de endereos


virtuais.
bela de pginas para qualquer programa ocuparia, como se viu,  M octetos. No
caso de uma tabela hierrquica, os bits de endereo virtual da pgina seriam
divididos em dois grupos de 10 bits cada. Os primeiros 10 bits, mais significativos, endereariam a tabela do primeiro nvel, onde estariam guardados
os endereos (fsicos) das tabelas do segundo nvel. Estas seriam endereadas
 significativos do nmero de pgina virtual. Cada uma
com os 10 bits menos
destas tabelas teria  entradas, cada uma das quais com o descritor de pgina
que, como se observou atrs, ocuparia pelo menos dois octetos para o nmero
de pgina fsica.
Para ilustrar a vantagem das tabelas hierrquicas, considere um hipottico

programa que use apenas 6M octetos, contguos em memria virtual,a partir




do
endereo
00000000h.
Este
programa
iria
utilizar
apenas
 
 pginas de memria. Os endereos de todas estas pginas encontramse nas duas primeiras tabela do segundo nvel. Isto significa que apenas

necessrio guardar a tabela de
  nvel (o directrio) e duas tabelas de nvel  ,
ocupando um total de

 octetos, ou seja, k octetos, em vez dos  M
octetos necessrios quando se usa uma tabela de pginas plana.
O conceito de tabelas de pginas hierrquicas pode ser generalizado para
tabelas hierrquicas com mais nveis, o que permite espaos de endereamento
virtual de grande dimenso. Neste caso, o directrio funciona como anteriormente, enquanto que o ltimo nvel continua a manter os endereos fsicos das
pginas. Os nveis intermdios permitem aceder s tabelas do nvel seguinte.

260

CAPTULO 13. SISTEMAS DE MEMRIA

Em geral, trs nveis de tabelas so suficientes para todos os sistemas, independentemente da dimenso da memria virtual e fsica do sistema, embora
existam arquitecturas que disponibilizam j, para futuras realizaes, a utilizao de quatro nveis de tabelas.
Regra geral, com a excepo do directrio, as tabelas de pginas tm a
mesma dimenso de uma pgina. Esta situao permite que tabelas de traduo que no estejam a ser utilizadas possam ser guardadas em disco, tal como
as pginas de dados e cdigo, reduzindo a fraco de memria ocupada pelas
tabelas de traduo.
Existem tambm sistemas que utilizam outras formas de mapeamento de
tabelas de pginas, denominadas de tabelas invertidas. No entanto, esta tcnica,
pouco utilizada em sistemas recentes, no ser estudada neste texto.

13.4.2 Poltica de Substituio


Tal como no projecto de caches, existem diversas opes a tomar quando se
projecta um sistema de memria virtual. As opes a tomar esto relacionadas
com as questes que j foram estudadas no projecto de sistemas de caches:
polticas de substituio, mecanismos de proteco, e manuteno da coerncia
entre memria e disco em operaes de escrita.
A gesto destes mecanismos , em geral, da responsabilidade do sistema
operativo. Sempre que h um acesso que no encontra a pgina desejada em
memria primria, ou seja, sempre que ocorre uma falta de pgina, chamada
uma rotina do sistema operativo que copia do disco essa pgina para uma dada
zona da memria primria. Esta operao implica muitas vezes copiar para
disco a pgina que l se encontra.
Uma vez que copiar uma pgina entre disco e memria uma operao
demorada, justifica-se utilizar uma poltica de substituio de pginas muito
mais sofisticada do que em caches. O facto desta deciso ser realizada pelo
sistema operativo, portanto, em software, permite manter para cada pgina
de memria informao detalhada sobre os acessos mais recentes, e decidir
qual pgina deve ser substituda usando um algoritmo mais complexo. Em
particular, possvel utilizar o algoritmo LRU, que envia para disco a pgina
menos recentemente acedida, um mtodo que tipicamente no utilizvel para
gerir a substituio de blocos de cache.
O uso continuado e intenso de uma quantidade de memria muito superior
ao disponvel em memria primria leva a uma situao em que necessrio
enviar continuamente pginas de memria para disco e vice-versa, conhecida
como thrashing. Nesta situao, o computador continua a executar o programa
pretendido, mas passa a maior parte do tempo (por vezes, mais de 99% do
tempo) a gerir o sistema de memria virtual, levando a um aparente bloqueio
do sistema. Esta situao , em geral, de evitar.

13.4.3 Poltica de Escrita


Devido tambm ao elevado tempo de acesso ao disco, um sistema de memria
virtual com uma poltica de escrita write-through no tipicamente realizvel.
Assim, todas as escritas so feitas na memria primria, numa abordagem semelhante poltica write-back write-allocate das caches. Esta poltica implica a

13.4. MEMRIA VIRTUAL

261

existncia de um bit nos descritores de pgina das tabelas de traduo que indica se essa pgina foi alterada em memria ou no, chamado aqui tambm de
dirty bit.
Na substituio de uma dada pgina, este bit testado. Se estiver a 0, isso
indica que a pgina no foi alterada desde que foi trazida para memria primria. Neste caso, a cpia em disco continua vlida, significando que se pode
simplesmente escrever por cima da cpia da pgina em memria primria. Se,
pelo contrrio, esse bit estiver a 1, ento antes de escrever por cima da pgina
necessrio escrev-la para disco.

13.4.4 Bits de Controlo


Alm do endereo fsico da pgina, os descritores de pgina incluem um conjunto de bits que indicam diversas propriedades da pgina. Embora a informao extra que guardada varie de sistema para sistema, os seguintes bits esto,
tipicamente, sempre presentes:
Um bit que indica se o endereo fsico vlido. Caso no seja, isso significa que a pgina est em disco e que ter de ser carregada para memria
principal antes de o seu contedo ser utilizado pelo processador.
Um bit que indica se a pgina foi alterada enquanto em memria, o que
implica que dever ser modificada em disco, quando for substituda.
Bits de proteco, que indicam se a pgina acessvel para escrita, leitura
e execuo, em modo utilizador.
Bits de proteco, que indicam se a pgina acessvel para escrita, leitura
e execuo, em modo sistema.
Um bit que indica que a pgina foi acedida recentemente.
Outros campos associados a cada pgina de memria existem e so utilizados
pelo sistema operativo para operaes especficas.
Note-se o paralelismo que existe entre a informao que guardada para
pginas de memria virtual e para blocos de cache. Em ambos os casos, uma
memria mais rpida funciona como armazenamento temporrio de uma memria mais vasta mas mais lenta, e, em ambos os casos, necessrio guardar
informao que permita decidir quais so os dados que devem ser substitudos
ou copiados para a memria mais lenta.

13.4.5 Translation Lookaside Buffers


Se cada acesso a memria passasse por um processo de traduo que envolvesse acessos aos diversos nveis da tabela de pginas, o impacto no desempenho do sistema seria demasiado grande, fazendo com que um acesso a memria num sistema de memria virtual fosse trs ou quatro vezes mais lento que
num sistema sem memria virtual.
Para contornar esta dificuldade, usa-se uma pequena memria cache, chamada Translation Lookaside Buffer, que devolve ao processador o endereo fsico
que corresponde a uma dada pgina virtual. Dado que cada pgina corresponde a um nmero elevado de posies de memria, mesmo uma pequena

262

CAPTULO 13. SISTEMAS DE MEMRIA

cache ir ter uma taxa de sucesso muito elevada, pois o nmero de pginas diferentes que so usadas num dado troo de programa tipicamente pequeno,
dada a propriedade da localidade dos acessos.
A existncia desta cache permite evitar, na maior parte das tradues, os
acessos tabela de pginas que so necessariamente mais lentos.

13.4.6 Interligao da Memria Virtual com as Caches


Em geral, o sistema de memria virtual co-existe com as caches, pelo que o
carregamento dos dados a partir de um dado endereo desencadeia, efectivamente dois processos: a procura desses dados numa das caches, e a traduo
dos endereos virtuais para endereos fsicos.
Existem fundamentalmente duas possibilidades de interligar o sistema de
cache com o sistema de memria virtual. A primeira alternativa enderea as
caches com endereos virtuais enquanto que a segunda utiliza endereos fsicos.
No primeiro caso, os endereos que so enviados para as caches so os endereos emitidos pelo processador, antes de qualquer processo de traduo.
Esta alternativa tem a vantagem de tornar mais rpido o acesso aos dados,
uma vez que no necessrio traduzir os endereos antes de enderear as caches. Uma vez que as caches contm os dados que correspondem a um dado
endereo virtual, o seu contedo tem de ser invalidado sempre que exista uma
alterao do mapeamento de memria virtual, por exemplo, quando muda o
processo que est a ser executado.
No segundo caso, o endereo virtual , em primeiro lugar, traduzido para
um endereo fsico, que usado para enderear as caches. O acesso s caches
mais lento, mas, em compensao, existe um mapeamento mais directo entre
os dados que se encontram em cache e os dados que se encontram em memria.
Se as pginas de memria se encontrarem alinhadas em endereos mltiplos
do tamanho da pgina, os bits que correspondem ao deslocamento dentro da
pgina no so alterados no processo de traduo. As somas que se encontram
indicadas nos esquemas de traduo so, assim, realizadas como concatenaes dos bits devolvidos pela TLB e dos bits de deslocamento. A Figura 13.22
ilustra o esquema de interligao entre a TLB e uma cache, endereada fisicamente, numa situao em que as pginas se encontram alinhadas em memria.
Uma vez que a primeira fase de acesso a uma cache que no seja totalmente
associativa utiliza apenas os bits de ndice para escolher o bloco onde esto os
dados, poder ser possvel iniciar o acesso cache antes de o ndice da tabela
ter sido traduzido pela TLB. Para tal, basta que o nmero de bits de ndice e
de deslocamento usados pela cache no seja superior ao nmero de bits necessrios para especificar o deslocamento dentro de cada pgina de memria
virtual. A Figura 13.23 representa, de forma muito simplificada, o sistema de
memria de um processador de 32 bits, com memria virtual, TLB e um nvel
de cache endereada fisicamente.

Neste exemplo,
o processador tem um espao de endereamento virtual de
4G octetos (  octetos) com pginas de 4k octetos. O endereo de pgina
enviado para uma TLB de mapeamento directo, com 16 entradas, que envia o
endereo fsico da pgina para uma
   cache
  de 4k octetos. Este endereo
   separado em 4 componentes: 20 bits (

) para a etiqueta, 8 bits (
) para

13.4. MEMRIA VIRTUAL


Nmero de pgina

263
Deslocamento

Dados

CACHE

TLB
ndice

Etiqueta

Figura 13.22: Interligao entre a TLB e a cache.

 
o ndice e 2 bits (
para o deslocamento dentro do bloco. Os dois bits

  )
menos significativos ( e ) no so utilizados, sendo apenas usados para seleccionar o octeto dentro da palavra, o que no foi considerado neste esquema.
Como o nmero de bits necessrios para especificar o deslocamento dentro de
cada pgina de 12, e as pginas se encontram alinhadas em memria, ase
leco
a
  do bloco de cache pode ser iniciada (usando as linhas de endereo
) ainda antes da TLB traduzir o endereo da pgina de virtual para fsico. Se
os dados estiverem presentes em cache, estes so enviados directamente para o
processador. Caso contrrio, o controlador da memria primria verifica que a
no foi activada, e desencadeia um acesso memria primria de
linha de
64M octetos. Este acesso feito activando as linhas de controlo das memrias
dinmicas e os respectivos endereos de linhas e colunas.
Neste esquema muito simplificado, no esto ilustrados os circuitos utilizados para as operaes de escrita na cache de dados e na TLB, nem os diversos
sinais de controlo necessrios para controlo das memrias dinmicas (DIMM).
O leitor poder no entanto observar que a complexidade de um sistema de
memria rivaliza com a do prprio processador, especialmente se se considerar que, em sistemas reais, existem diversos nveis de caches, caches separadas
para endereos e dados, arquitecturas complexas de memria primria e interligao dos barramentos de dados com dispositivos de entrada/sada.

Sumrio
Neste captulo, estudaram-se os diversos componentes do sistema de memria
de um processador tpico.
Foi analisada a forma como a memria primria constituda a partir de
mdulos simples, interligados entre si por forma a permitir a construo da
estrutura de memria desejada. Cada um destes mdulos corresponde a uma
dada parte da memria visvel pelo processador, podendo a organizao lgica
dos mdulos ser descrita pelo mapa de memria do processador.

CAPTULO 13. SISTEMAS DE MEMRIA

264

Pgina

UCP

Deslocamento

12

Cache Hit

v w e d Etiq Pgina

Dados

Ready

TLB

TLB Hit

20

16
=

20

32
32
8 Indice v d Etiqueta Dados

CACHE

20
2

Etiqueta

Deslocamento

En
Sel MUX

32
Hit

MEMRIA
Controlo

Controlador
12 Endereos

DIMM

32

DIMM

32

DIMM

32

DIMM

32

Figura 13.23: Sistema de memria de um processador de 32 bits.

Foi tambm estudada a forma como memrias de diversas velocidades e


capacidades so interligadas entre si numa hierarquia de memria, sendo as
memrias mais rpidas e de menor capacidade acedidas em primeiro lugar,
por forma a diminuir o tempo mdio de acesso a memria.
Finalmente, foram estudados os sistemas de memria virtual, que permi-

13.4. MEMRIA VIRTUAL

265

tem usar a memria secundria para alargar o espao de endereamento utilizvel para alm do que seria possvel se apenas se usasse a memria primria.

266

CAPTULO 13. SISTEMAS DE MEMRIA

Captulo 14

Entradas, Sadas e
Comunicaes
Nos captulos anteriores definiram-se dois dos componentes principais de um
computador, a unidade central de processamento e o sistema de memria. Embora todo o processamento se efectue entre estas duas unidades, tal seria de utilidade reduzida caso no existisse alguma forma de interaco com o mundo
exterior, que por um lado permita introduzir os dados a processar e por outro
lado torne acessvel os resultados.
Nos primeiros computadores, esta interface era rudimentar. As entradas
eram especificadas por interruptores que definiam o seu valor bit a bit e o resultado era visualizado em lmpadas que indicavam o seu valor tambm ao
nvel do bit. Desde ento houve grande evoluo no s nas interfaces pessoamquina como nas interfaces entre diferentes mquinas. O desenvolvimento
de novas formas de interaco com os computadores cada vez mais um assunto de intensa investigao.
O termo perifricos normalmente utilizado para designar de forma genrica os dispositivos de entrada e sada de um computador. Hoje em dia existe
uma grande diversidade de perifricos, com caractersticas muito diferentes a
variados nveis. Para simplificar a interface do lado da UCP o acesso aos diferentes perifricos definido como tendo o mesmo protocolo de um acesso a
uma posio de memria (Seco 13.1.3). Devido ao protocolo de acesso ser o
mesmo, indiferente para o processador aceder a uma posio de memria ou
a um perifrico, possibilitando, portanto, o mapear no espao de memria dos
diferentes perifricos (Seco 14.1). Esta simplificao do lado do processador
implica a existncia do lado de cada perifrico de um circuito de interface que
converta a informao proveniente do perifrico para o protocolo utilizado no
acesso memria.
Neste captulo comea-se por descrever o funcionamento de alguns dos perifricos mais conhecidos. Em seguida, apresentam-se diferentes modos de
comunicao entre o computador e os perifricos. Finalmente, discutem-se as
formas como se transfere a informao para perifricos com diferentes ritmos
de transmisso de informao.
267

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

268

14.1 Arquitectura de Entradas/Sadas


A organizao do sistema de entradas e sadas num computador um aspecto
de central importncia na definio da sua arquitectura. Como j foi anteriormente referido, um computador est organizado em torno de um sistema
de barramentos que permite ao processador trocar informao com a memria e com todos os perifricos do sistema. Globalmente essa arquitectura est
representada na Figura 14.1.
Barramento de Endereos
Barramento de Dados
Processador

Barramento de Controlo

Interface

Interface

Perifrico

Perifrico

...

Interface

Memria

Perifrico

Figura 14.1: Representao geral da arquitectura de um computador.


O barramento de endereos permite ao processador indicar a posio de memria ou o perifrico com que pretende interagir. Trata-se, numa abordagem
inicial, de um barramento unidireccional em que a origem sempre o processador.
O barramento de dados permite a circulao dos dados a transferir entre o
processador e a memria ou os perifricos. Trata-se de um barramento bidireccional em que o processador pode ser a origem dos dados, quando se
pretende escrever dados na memria ou transferi-los para perifricos de sada,
ou o destino dos dados com origem na memria ou nos perifricos de entrada.
O barramento de controlo inclui todas as linhas que permitem gerir e coordenar a transferncia. Nesse barramento esto presentes linhas que permitem
indicar a direco da transferncia, sincronizar a transferncia, definir a dimenso dos dados a transferir, determinar se se trata de transferncias de dados
envolvendo a memria ou os perifricos, sinalizar pedidos de ateno dos perifricos e outras funes de controlo. As linhas efectivamente presentes so,
contudo, muito dependentes das solues arquitecturais utilizadas.

14.1.1 Interfaces
A ligao dos perifricos , na maior parte dos casos, assegurada por um mdulo que pode assumir diversos graus de complexidade, denominado interface.
A interface existe para isolar o processador das particularidades dos perifricos. De entre as funcionalidades pedidas interface, podem ser referidas, nesta
fase, as seguintes:
Promover as adaptaes necessrias do ponto de vista fsico, nomeadamente ao nvel das tenses e correntes envolvidas na comunicao entre
o processador e os perifricos.

14.1. ARQUITECTURA DE ENTRADAS/SADAS

269

Permitir esconder ao processador a velocidade dos perifricos, tipicamente mais baixa que a do processador.
Descodificar os endereos presentes no respectivo barramento por forma
a identificar uma transferncia de dados que envolve o perifrico a que
est ligada.
Controlar o perifrico nos casos em que podem existir vrios modos de
funcionamento.
Controlar a comunicao fsica com o perifrico atravs de lgica adequada, diminuindo, assim as tarefas a desempenhar pelo processador.
Sinalizar ao processador, atravs do barramento de controlo, a presena
de dados provenientes do perifrico ou a disponibilidade deste para receber dados atravs do sistema de interrupes do computador. Este tema
ser tratado adiante na Seco 14.5.2
Permitir ao perifrico participar em modos de transferncia mais avanados com envolvimento reduzido do processador como o caso do acesso
directo memria que ser analisado na Seco 14.5.3.

Descodificao
de endereos

Barramento de
Controlo

Barramento de
Dados

Barramento de
Endereos

A estrutura de uma interface est ilustrada na Figura 14.2.

...

Controlo

Registos

Comunicao
com o Perifrico

Figura 14.2: Representao geral da arquitectura de uma interface.


No caso de perifricos uni-direccionais, isto , s de sada ou entrada, como
uma impressora, ou um rato, a interface possui um registo onde o processador
escreve os dados a enviar para o perifrico ou onde l os dados provenientes
do perifrico. Como bvio em perifricos bi-direccionais, como por exemplo,
um modem, de esperar a existncia de dois registos, um em que o processador escreve os dados a enviar e outro em que o processador l os dados recebidos. Estes registos, a unidade mais simples de entrada/sada enderevel pelo
processador, tm o nome de portos.

270

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

O facto dos dados serem escritos nestes portos e deles lidos, em vez de
tal ser feito no perifrico propriamente dito permite que a operao seja feita
velocidade possvel por parte do processador. Se, de facto, a escrita ou a leitura
fossem feitas envolvendo directamente o perifrico, o processador teria que
realizar o seu ciclo de leitura ou escrita velocidade permitida pelo perifrico,
tipicamente algumas ordens de grandeza abaixo da velocidade possvel nos
barramentos internos.
Muitas interfaces, possuem, para alm dos portos de dados, isto , os portos
destinados a transferir dados, alguns outros portos onde o processador pode
escrever informaes de controlo que permitem configurar determinados aspectos do funcionamento do perifrico ou da comunicao com ele, bem como
ler informao sobre o estado do perifrico, da ligao ou da prpria interface.
Trata-se, respectivamente, de portos de controlo e portos de estado.
Cada um destes portos naturalmente acedido atravs de endereos diferentes. Conceptualmente o mdulo de descodificao de endereos responsvel por identificar a presena no barramento de dados do endereo correspondente a cada um dos registos presentes na interface por forma a que o porto
seleccionado seja escrito ou lido conforme a aco especificada no barramento
de controlo. Na prtica, as interfaces s descodificam os bits menos significativos do barramento de endereos em nmero necessrio para enderear os
diversos portos internos da interface, sejam portos de dados, controlo ou estado. Estes portos tm, em geral, endereos seguidos. Tal como no caso da
descodificao de endereos de memria parte da descodificao realizada
exteriormente s interfaces e em comum para todas elas.
O mdulo de controlo da interface coordena as diversas aces desta com
relevo para a gesto da comunicao com o perifrico e, nos casos em que
isso relevante, nas transferncias implicando o sistema de interrupes (Seco 14.5.2) ou o acesso directo memria (Seco 14.5.3).

14.1.2 Tipos de Endereamento dos Portos


Como se referiu, o endereamento , de forma geral, uma funo dividida entre
um bloco de descodificao de endereos externo s interfaces, muitas vezes
partilhado com a descodificao de memria, e alguma descodificao interna
interface. Na Figura 14.3 exemplifica-se este tipo de estrutura.
Repare-se que a descodificao feita primariamente por um circuito de
descodificao externo interface que actuar uma linha de enable do descodificador dentro da interface. Desse modo possvel conseguir que a interface s
possa estar activa num determinado leque de endereos. Internamente, para

circuito de descodificao
enderear cada um dos  portos, existe um segundo
que descodifica bits de endereo, sendo   . Em geral, esses bits correspondem aos bits menos significativos do barramento de endereos. Na Figura 14.3
representa-se uma interface com  portos dos quais so representados o porto

e o porto  , sendo o primeiro um porto de sada e o segundo um porto de
entrada.
H trs formas fundamentais de organizar o endereamento dos perifricos. Nas consideraes anteriores tem sido assumido que as interfaces dos
perifricos partilham com a memria os barramentos de endereos, dados e
controlo. Tal no estritamente necessrio. De facto, seria at conceptualmente
interessante considerar a existncia de um segundo conjunto de barramentos

14.1. ARQUITECTURA DE ENTRADAS/SADAS

271

Barramento de Endereos
Barramento de Dados
Barramento de Controlo
Ai a An-1
Descodificao
Externa

A0 a Ai-1

...
Interface A

Interface X

...

En
Descodificao
Interna
0
n-1

Controlo
Escrita

...

Leitura

Perifrico X
Porto 0

...

OEn
Porto n-1

Perifrico A

Figura 14.3: Descodificao de endereos para acesso aos portos de uma interface.
para as interfaces de entrada/sada fisicamente separado dos barramentos de
memria. Essa opo permitiria um aumento do desempenho do computador,
uma vez que, simultaneamente com uma comunicao com um perifrico
possvel manter os acessos memria, quer para transferir dados, quer para
ler instrues.
Esta opo, obriga, porm, para ser til, a uma nova concepo do processador que passaria a ter uma capacidade de processamento paralelo que
muito complicaria a sua arquitectura. Essa no uma soluo frequente. No
entanto, o uso de um processador dedicado apenas s entradas/sadas, partilhando a memria com o processador principal, permite levar prtica esta
soluo com menor complicao e de uma forma perfeitamente satisfatria do
ponto de vista do desempenho global. Este tipo de arquitectura ser referida
com um pouco mais de detalhe no Seco 14.5.4.
Assumindo, portanto, uma arquitectura com um nico conjunto de barramentos partilhados entre a memria e as interfaces de entrada/sada, podem
ainda ser conceptualizadas duas formas de organizao.
Em muitas arquitecturas, como tambm o caso do P3, assume-se a existncia de um nico espao de endereamento que, tal como os barramentos,
partilhado por memria e perifricos. Nesse tipo de arquitectura haver endereos atribudos a posies de memria e outros atribudos a portos. Trata-se,
como j se referiu no Seco 11.3.3 de uma arquitectura com os portos mapeados em memria (em ingls, memory mapped). Em arquitecturas deste tipo o
endereamento de um porto faz-se colocando no barramento de endereos o
respectivo endereo e actuando no barramento de controlo uma linha que indique a direco da transferncia pretendida. Isso conseguido habitualmente

pela utilizao de uma linha de escrita/leitura 
 que estar a , ou me-

272

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

lhor, em H, quando se pretende uma leitura de um porto e em , ou melhor,


em L, quando se pretende uma escrita.
Do ponto de vista do conjunto de instrues de um processador deste tipo,
no h, como bvio, necessidade de instrues de entrada/sada especficas,
uma vez que todas as transferncias se fazem como se de posies de memria
se tratasse. , portanto, utilizado para entradas/sadas todo o conjunto de
instrues que permitem o acesso memria.
Esta arquitectura tem a desvantagem de ter de ser necessrio reservar, no
espao de endereamento de memria, um conjunto de endereos para portos
de entrada ou sada. Para alm da diminuio consequente da dimenso da
memria utilizvel, isso obriga, por vezes, a solues menos elegantes para
obstar a que certos endereos atribudos a portos provoquem simultaneamente
o acesso a posies de memria.
A soluo est em utilizar espaos de endereamento separados para a memria e para os portos de entrada/sada, embora partilhando os mesmos barramentos. Para conseguir isso, ter o barramento de controlo de fornecer informao indicando se um determinado endereo um endereo de memria ou
de um porto. Isso consegue-se, por exemplo, atravs de uma linha que distinga

os dois tipos de acesso. Uma linha desse tipo pode assumir o valor quando
se trata de um acesso memria e um valor quando se trata de um acesso
 
a um porto. Uma designao adequada seria, por exemplo,
. Uma
soluo alternativa a utilizao de linhas separadas de escrita e leitura para
memria e portos de entrada/sada. Ter-se-ia, ento, linhas com designaes
 

  


do tipo
,

,
e

, por exemplo.
Este tipo de arquitectura referido como de entradas/sadas isoladas ou entradas/sadas separadas (em ingls, independent IO). Neste tipo de arquitectura o
conjunto de instrues tem de incluir instrues explcitas de entrada/sada.
Essas instrues, quando executadas, provocam a activao das linhas ade 
quadas ou do nvel adequado da linha
para que a transferncia se
d envolvendo os portos e no a memria. Tipicamente essas instrues so
mais limitadas na sua operatividade que as instrues de acesso memria,
limitando-se, por vezes, a uma instruo de entrada de dados e outra de sada.

14.2 Perifricos
Nas seces seguintes descreve-se o funcionamento bsico de alguns dos perifricos mais importantes nos computadores de uso genrico. De sublinhar que,
apesar da importncia que estes tm nos computadores com que a maioria das
pessoas trabalha diariamente, existem muitos outros sistemas computacionais
em que estes perifricos nem sequer existem. o caso dos sistemas computacionais existentes em muitos dos electrodomsticos. Para estes, a entrada e sada
de dados processa-se atravs de perifricos especficos ao sistema em que esto
integrados.

14.2.1 Teclados
O teclado o perifrico de entrada de dados mais importante nos computadores
de uso genrico, ao ponto de ser normal os computadores no arrancarem caso

14.2. PERIFRICOS

273

Interface
x

interrupo

Mux

scan code

8
3

D
e
s
c
o
d

Figura 14.4: Esquema interno de um teclado.


no detectem um teclado ligado. A Figura 14.4 apresenta o esquema interno
de um teclado.
Uma matriz de linhas e colunas de interligaes elctricas constitui o elemento bsico de um teclado. Em cada cruzamento linha/coluna est colocado
um interruptor correspondente a uma tecla. Ao premir-se a tecla, fecha-se um
circuito entre uma linha e uma coluna.
Para fazer a leitura desta matriz, o circuito de interface do teclado inclui
um controlador que contm dois contadores. Como mostra a figura, um dos

cada vez uma, e s
contadores, , faz o varrimento das linhas, colocando de

uma, ao valor lgico 1. Por cada contagem do contador , o segundo contador,
, faz o varrimento das colunas, lendo o valor  lgico destas. A deteco de
 
uma coluna a 1 indica que a tecla na posio
da matriz est premida. A
partir desta coordenada, o controlador identifica univocamente a tecla.
O controlador no teclado tem um conjunto de outras funes. Uma delas
resolver um problema associado aos interruptores mecnicos. Ao fechar-se
um interruptor, antes da linha estabilizar no novo nvel elctrico, esta apresenta
uma oscilao de sinal, o que pode erroneamente indicar uma sequncia repetida de premir e libertar da tecla. O controlador filtra estes picos, esperando
um tempo razovel entre uma alterao do estado de uma tecla e a leitura do
seu estado definitivo. Esta operao tem o nome de debounce.
Para reduzir a quantidade de informao a transmitir UCP, em vez deste
controlador enviar constantemente o estado das diferentes teclas, so apenas
enviadas alteraes do estado das teclas. Por exemplo, se se premir a tecla
M, enviado ao processador o cdigo M_premida. Ao se libertar a tecla,
enviado o cdigo M_liberta. A estes cdigos d-se o nome de make code
e break code, respectivamente. Este funcionamento aplica-se tambm s silent
keys, como as teclas shift e control. Para poder detectar a mudana de estado de
uma tecla, o controlador ter que manter numa memria local o estado actual
de todas as teclas.
Estes cdigos so chamados de scan codes. Associado ao teclado (como a
qualquer outro perifrico) existe um programa chamado device driver, responsvel por fornecer a nvel de software uma interface para o perifrico.
    No caso
do teclado, ser o device driver que converter as coordenadas
para um

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

274

Placa Grfica
Memria
Modo Texto

UCP

Monitor

ROM
Caracteres
ASCII

Memria
Modo Grfico

Gerador
Varrimento
Monitor

RGB

.
.
.

Figura 14.5: Esquema interno de uma placa grfica e ligao a monitor.


dado scan code. esta operao que permite que um teclado com a mesma disposio de teclas possa ter disposies diferentes de smbolos e assim adaptarse facilmente a diferentes lnguas. Por exemplo, o smbolo - no teclado portugus est na mesma tecla do smbolo /no teclado ingls. A configurao
do device driver permitir associar essa tecla ao scan code correspondente para a
lngua para a qual o sistema est configurado.
Outro aspecto dos scan codes que no indicam se a letra pretendida pelo
utilizador maiscula ou minscula. Ser o device driver que ter que verificar se o make code de uma letra ocorre entre um shift_premida e um
shift_liberta. Se sim, ento a letra ser maiscula, caso contrrio ser
minscula.
A converso de scan codes para cdigo ASCII normalmente da responsabilidade da aplicao.
Sempre que existe uma alterao do estado de uma tecla, o controlador do
teclado envia uma interrupo para a UCP indicando que tem dados para enviar. Por vezes, a UCP est ocupada com outras actividades e no consegue
dar ateno imediata. Para evitar a perda de dados, o controlador do teclado
possui um buffer capaz de armazenar uma sequncia de eventos do teclado.
Esta soluo no resolve completamente o problema, pois este buffer tem tipicamente uma capacidade reduzida. Nos casos em que a UCP demora um pouco
mais a ler os dados do teclado, pode acontecer que o buffer encha, fazendo com
que todos os eventos posteriores sejam descartados. comum o controlador
do teclado fazer soar um aviso sonoro para indicar que essas teclas esto a ser
ignoradas.

14.2.2 Monitores
semelhana do teclado, o monitor ocupa o lugar principal na classe dos perifricos de sada de dados. A interface entre o monitor e a UCP realizada pela
placa grfica. Um diagrama da organizao interna de uma placa grfica e sua
ligao a um monitor est apresentada na Figura 14.5.
As placas grficas tm, em geral, dois modos de funcionamento, programveis pela UCP: modo texto e modo grfico. Em qualquer dos modos de funcionamento, do ponto de vista da UCP o monitor uma matriz (linha,coluna). No
caso do modo texto, os elementos desta matriz so caracteres ASCII. No modo

14.2. PERIFRICOS

275

grfico, os elementos da matriz so pontos no monitor, o elemento de menor


tamanho manipulvel pela placa grfica e a que se d o nome de pixel.
Os primeiros monitores s funcionavam em modo texto. Chama-se a este
tipo de monitores de monitores alfanumricos. Hoje em dia o modo texto existe
no s para manter compatibilidade com monitores antigos, como tambm
para servir como o denominador comum mais simples que qualquer sistema
consegue reconhecer, evitando-se assim potenciais problemas de incompatibilidade entre diferentes interfaces grficas. Neste modo, para se ecoar um caracter no monitor basta enviar para a placa grfica o seu cdigo ASCII. O local
onde esse caracter ir aparecer no monitor determinada pela posio do cursor, uma referncia (linha,coluna) mantida pela placa grfica. O funcionamento
tpico o valor da coluna do cursor ser incrementado por cada caracter escrito,
sendo portanto os caracteres escritos em sequncia. Se se exceder o nmero
mximo de colunas, ento o valor da linha do cursor incrementado e o valor
da coluna colocado a zero, fazendo com que a prxima escrita seja no incio da
linha seguinte. Se se exceder o nmero mximo de linhas, o texto no monitor
todo movido uma linha para cima (em ingls, scroll up), perdendo-se a linha
de cima do monitor e ganhando-se uma linha em branco em baixo. O prprio
cdigo ASCII inclui alguns comandos para controlar o cursor dos monitores
alfanumricos, pois eram estes os monitores disponveis na altura da definio
deste cdigo. Por exemplo, o cdigo:
BS (backspace) permite recuar o cursor uma posio, ou seja, decrementa
o valor da coluna.
LF (linefeed) passa o cursor para a linha seguinte, ou seja, incrementa o
valor da linha.
CR (carridge return) coloca o cursor no incio da linha, ou seja, coloca o
valor da coluna a zero.
Existem tambm cdigos para colocar o cursor numa dada posio do monitor.
No entanto, estes so especficos para cada sistema.
Para que seja possvel a utilizao dos monitores grficos actuais, as placas
grficas, quando em modo texto, utilizam uma ROM para obter a descrio
dos caracteres em termos de pixels.
Em modo grfico, a UCP define ponto a ponto, isto , pixel a pixel, o que
deve aparecer no monitor. A definio grfica o nmero total de pixels no monitor, distribudos por um nmero total de linhas e um nmero total de colunas. Em monitores a preto e branco (ou monocolores), basta um bit por posio
(linha,coluna) para indicar se o pixel nessa posio est aceso (branco) ou apagado (preto). Para monitores a cores, necessrio definir para cada pixel qual
a cor que este deve assumir. Assim, para cada posio (linha,coluna) definese um valor que indica uma entrada dentro de uma palete de cores (em ingls,
colormap). O nmero de bits necessrios por pixel depende portanto do tamanho desta palete de cores. Por exemplo, se a palete de cores tiver 256 entradas
cada pixel fica definido por 8 bits. O tamanho da palete de cores determina o
nmero mximo de cores diferentes que se podem utilizar em simultneo. No
entanto, cada aplicao pode definir as entradas na palete de cores de forma a
que diferentes aplicaes possam utilizar um conjunto de cores diferente.
A placa grfica mantm o estado de cada pixel numa memria interna. A
capacidade desta memria determina a definio mxima da placa grfica. Por

276

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES




exemplo, para uma definio de 


 (1280 colunas por 1024 linhas)
com uma palete de 256 cores (8 bits) necessrio que a placa grfica tenha uma
 
  
memria de pelo menos 
bits, ou seja, 1,25M octetos. Se com esta

memria se pretender uma maior quantidade de cores, ser necessrio reduzir
a definio. Supondo que se pretende aumentar o tamanho da palete para
64k
cores (16 bits), no possvel
 
  usara definio padro abaixo da anterior,


 , pois exigiria


bits, ou seja, 1,5M octetos. Assim, ter

se-ia que optar pela definio padro seguinte,
, a que corresponde a



memria
bits, portanto, 0,9M octetos.
A UCP define a cor de cada pixel escrevendo na correspondente posio
de memria grfica. Para facilitar a tarefa aos programadores, existem normalmente bibliotecas grficas que fornecem rotinas de alto nvel para definir
objectos complexos no monitor. Estas rotinas so especficas para cada sistema.
A ligao entre a placa grfica e o monitor depende do tipo de monitor.
Ainda hoje, a maioria dos monitores so baseados num tubo de raios catdicos
( semelhana das televises). Nestes monitores, um feixe de electres emitido contra uma tela de fsforo, elemento que tem a propriedade de se tornar
luminoso ao ser atingido pelo feixe. Por controlo do varrimento do feixe, e
da intensidade deste durante o varrimento, possvel definir padres na tela.
Tipicamente, este feixe de electres varre o monitor por linhas da esquerda
para a direita, desligando-se quando faz o retorno da direita para a esquerda,
avanando para a linha seguinte, como apresentado na Figura 14.5. Durante
o varrimento de uma linha, o feixe modulado de forma a acender ou apagar
cada pixel dessa linha.
Esta descrio aplica-se a monitores monocolores. Nos monitores a cores,
para cada pixel existem trs telas de fsforo, correspondentes s trs cores elementares: vermelho, verde e azul. Trs feixes de electres permitem controlar
independentemente cada uma destas telas, atravs da intensidade do feixe correspondente. Assim, possvel definir para cada pixel um valor diferente de
luminosidade para cada uma das trs cores elementares, permitindo assim definir, em princpio, qualquer cor.
Para controlar o monitor, a placa grfica l em sequncia as posies de memria interna e gera um sinal analgico para o monitor com os valores para as
componentes vermelho, verde e azul de cada pixel. Este sinal tem o nome RGB,
pois estas trs cores elementares em ingls tm os nomes Red, Green e Blue, respectivamente. Em geral, a intensidade de cada uma destas cores elementares
  com um octeto. Por esta razo, a utilizao de uma palete de cores
definida
com  entradas chamada de cor verdadeira (em ingls, true color), pois define
univocamente cada cor possvel no monitor.
De forma a que uma pessoa no se aperceba do varrimento, o monitor deve
ser completamente escrito pelo menos 24 vezes por segundo. Caso contrrio o
utilizador ter uma sensao de piscar do monitor. Esta exigncia implica uma
grande largura de banda entre a placa grfica e o monitor, pois necessrio
enviar 24 vezes por segundo
trs octetos para todos os pixels. Por exemplo,
 

 , transferem-se 90M octetos/s.
para uma definio 
Hoje em dia, comeam a ficar populares os monitores baseados em LCD
(do ingls, Light Coupled Device). Nestes monitores, cada pixel um elemento
activo cuja cor pode ser controlada independentemente. A interface com estes
monitores diferente em dois aspectos. Por um lado, em princpio no necessrio a placa grfica ter memria, pois os valores definidos para os pixels do

14.2. PERIFRICOS

Disco Rgido

277

Cilindro

Pista

Sector

Figura 14.6: Diagrama da organizao interna de um disco rgido.


monitor LCD so mantidos indefinidamente, ou seja, a memria grfica poder
estar do lado do monitor. Por outro lado, cada pixel endereado individualmente, permitindo que a interface seja completamente digital. As tarefas da
placa grfica ficariam assim reduzidas a fazer a converso para possveis definies diferentes e converso entre modo texto e modo grfico. No entanto,
para manter a compatibilidade com placas grficas anteriores, os monitores
LCD em geral aceitam como entrada o sinal RGB tradicional. Alm disso, hoje
em dia as prprias placas grficas possuem algum processamento de imagens
grficas.

14.2.3 Discos Magnticos


Por ltimo, analisa-se nesta seco o funcionamento de um perifrico de entrada e sada de dados, o disco rgido. Este perifrico tambm ubquo nos
computadores de uso geral. A sua utilizao primria no armazenamento de
dados de forma permanente, pois os valores nos registos do processador, na
cache ou na memria principal so perdidos quando a fonte de alimentao
desligada. Para alm desta funo, os discos foram j estudados no Captulo 13 como o elemento de mais alto nvel na hierarquia de memria. Qualquer
destas duas funes controlada pelo sistema operativo. A primeira gerida
pelo sistema de ficheiros e a segunda pelo sistema de memria. Assim, o espao
de armazenamento dos discos est normalmente dividido em pelo menos duas
parties, uma para o sistema de ficheiros, e outra para o sistema de memria,
ou espao de swap. Poder haver mais parties, pois os sistemas operativos
em geral suportam mais do que uma partio para cada uma destas funes.
A Figura 14.6 apresenta um diagrama da organizao interna de um disco
rgido. Um disco rgido de facto constitudo por uma pilha concntrica de
discos magnticos. Estes discos encontram-se permanentemente em rotao, a
uma velocidade elevada e constante. Cada um destes discos est organizado
em pistas, como mostra a figura. s pistas d-se tambm o nome de cilindros,
significando de facto o conjunto de pistas com o mesmo raio de todos os discos. Cada um destes discos tem uma cabea magntica que se pode deslocar
radialmente e assim posicionar-se sobre qualquer das pistas desse disco. Cada
pista, por seu lado, est dividida em sectores, que so o elemento mnimo de
informao num disco.
Quando o sistema operativo acede ao disco, para escrita ou leitura, f-lo
sempre em termos de um, ou mais, sectores. Cada sector tem uma referncia
nica que utilizada pelo sistema operativo. Para fazer a interface entre a UCP

278

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

e a parte mecnica do disco, estes incluem internamente um controlador. A


partir da referncia indicada pela UCP, o controlador do disco determina qual
dos cilindros contm o sector pretendido, e em qual das pistas deste cilindro
esse sector se encontra. O controlador faz deslocar a cabea desse cilindro de
forma a coloc-la sobre essa pista e espera at que o sector em causa passe por
baixo da cabea magntica, altura em que este lido ou escrito.
Assim, existem trs componentes no tempo de acesso a um sector do disco:
o tempo de procura (em ingls, seek time), que o tempo que a cabea magntica demora at chegar pista onde o sector se encontra.
Apesar das distncias serem curtas e das cabeas magnticas serem muito
leves, e portanto demorarem pouco tempo a deslocarem-se para a pista
correcta, o tempo de procura mesmo assim uma componente importante no tempo total de acesso ao disco. Um valor mximo tpico para
esta componente para os discos de hoje 8ms, correspondendo ao trajecto maior da cabea. Naturalmente, em mdia este valor ser menor e
perto de metade deste.
o tempo rotacional (em ingls, rotational latency), que o tempo que demora
desde que a cabea magntica se encontra em posio at que o sector
desejado passe por baixo desta.
Actualmente, um valor tpico para a velocidade de rotao de um disco
rgido de 10.000 rotaes por minuto. Isto significa que uma rotao
completa de um cilindro demora 6ms. Como em mdia se tem que esperar meia volta do cilindro para que o sector certo passe por baixo da
cabea, o tempo rotacional mdio ser de 3ms.
o tempo de leitura/escrita (em ingls, access time), que o tempo que demora
a leitura ou a escrita de um sector.
Para estimar o tempo de leitura/escrita necessrio saber o nmero de
sectores por pista. Para um valor tpico de 64 sectores por pista, e assumindo as mesmas 10.000 rotaes por minuto, o tempo de leitura/escrita
ser 6ms/64=0,09ms.
Pelos valores apresentados, conclui-se que o tempo mdio de acesso a um
sector do disco perto de 7,1ms. Duas observaes em relao a este valor.
Primeiro, quando comparado com o tempo de acesso memria principal, que
hoje em dia inferior a 100ns, o acesso ao disco cerca de 100.000 vezes mais
lento! Portanto, os acessos ao disco fazem degradar muito o desempenho do
sistema e devem ser minimizados.
A segunda observao que o tempo de leitura/escrita desprezvel face
aos tempos de procura e rotacional. Por esta razo, seria desejvel aumentar
o tamanho do sector. H aqui um compromisso, pois embora se ganhe em eficincia, poder haver um grande desperdcio de espao se os sectores forem
muito grandes pois, nos casos em que se pretendam guardar pequenas quantidades de informao, o resto do sector ficar desaproveitado. Actualmente,
valores tpicos para os sectores so entre 512 octetos e 4k octetos.
Uma forma de aumentar a eficincia no acesso ao disco manter o mximo
possvel a estrutura lgica dos dados em sectores contnuos. Para isso, muitos
sistemas operativos permitem a desfragmentao do disco, o que no mais do

14.3. COMUNICAO PARALELA

279

que colocar os ficheiros em sectores consecutivos. Desta maneira, apenas se


perde uma vez o tempo de procura e rotacional para a leitura/escrita de vrios
sectores.
De referir que a leitura/escrita dos dados no se faz directamente para a
UCP, pois isso exigiria uma largura de banda muito grande. Por exemplo,
se o tamanho do sector for de 1k octetos, ento a leitura de um sector gera
1k/0,09ms=11M octetos/s. Assim, o controlador de disco possui um buffer
para onde so copiados os sectores e s depois sero lidos pela UCP, ao ritmo
de transmisso permitido por esta. Para as escritas o processo semelhante. O
sector a escrever primeiro escrito para este buffer e s quando est completo
o mesmo copiado para o disco.

14.3 Comunicao Paralela


Do ponto de vista da comunicao entre o processador e a interface de um perifrico, a comunicao faz-se, como se viu, atravs dos barramentos do computador. Este um caso de comunicao paralela, isto , uma comunicao
envolvendo vrios bits simultaneamente, tipicamente uma palavra do computador ou, em algumas arquitecturas, opcionalmente um octeto.
A comunicao entre a interface e o perifrico, por sua vez, pode decorrer
em paralelo, da mesma forma, ou em srie. Na Seco 14.4 ser estudada a
comunicao srie. Nesta seco ir-se- analisar a comunicao paralela.
Um aspecto a ter em conta o de que, por vezes, a largura da palavra do
processador desadaptada comunicao com o perifrico. Em muitos casos,
por exemplo, o barramento de interface com o perifrico assume a transferncia de um octeto e o barramento interno pode ter 16 bits, como no caso do P3,
ou mais, o que acontece em muitos dos microprocessadores comerciais disponveis. Essa circunstncia no cria qualquer problema. No caso de perifricos
de sada, a interface ignora simplesmente os bits que no vo ser transmitidos
e o programa ter que ter em conta que a informao deve ser formatada de
acordo com esse facto. No caso dos perifricos de entrada, a interface no actua as linhas no utilizadas, uma vez que o barramento construdo de forma a
que as linhas no actuadas assumam um valor por omisso. Do mesmo modo,
o programa ter que ter em conta que a informao til de entrada ocupa um
subconjunto dos bits da palavra.
A complexidade da comunicao entre a interface e o perifrico depende
da complexidade do prprio perifrico e do grau de funcionalidade pedido
interface. Um aspecto particular a ter em conta o grau de sincronizao necessrio entre a interface e o perifrico. A sincronizao, a este nvel, permite
coordenar a transferncia de informao, garantindo que a entidade que recebe
informao sinalizada de que a entidade que a envia tem informao disponvel no barramento de interligao. Pode ainda ser necessrio garantir que a
entidade que envia receba uma confirmao explcita de que essa informao
foi recebida.
Em perifricos muito simples no necessria qualquer sincronizao entre
a interface e o perifrico. Noutros tipos de perifricos, estes tm de ser sinalizados sempre que a interface possui dados para enviar ou, em alternativa,
em perifricos de entrada, a interface tem de aceitar sinalizao do perifrico
indicando que um dado est a ser enviado. Em perifricos mais complexos,

280

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

necessrio sincronizar completamente a comunicao entre a interface e o perifrico de modo a, para alm de sinalizar o envio, garantir que os dados so
recebidos.
Por outro lado, a comunicao entre o processador e a interface pode, igualmente, necessitar de algum grau de sincronizao.
Os exemplos apresentados em seguida permitem ter uma viso de interfaces com diferentes complexidades. No se pretende ser exaustivo nesta questo, mas antes ilustrar alguns tipos de problemas encontrados neste contexto e
solues comuns para esses problemas.

14.3.1 Interfaces sem Sincronizao


O primeiro exemplo refere-se a um tipo muito simples de perifricos sem qualquer necessidade de sincronizao. Ir-se- considerar um perifrico de entrada
constitudo por um conjunto de interruptores e um perifrico de sada constitudo por um conjunto de dodos emissores de luz (LEDs). Quer os interruptores, quer os leds, permitem uma comunicao muito bsica entre o utilizador
de um sistema e o processador.
A entrada de dados faz-se atravs de uma instruo de entrada de dados
dirigida ao porto ligado aos interruptores. O programa poder, por exemplo,
estar a executar um ciclo que inclui essa instruo, de forma que, em cada ciclo,
tem em conta o estado de cada um dos interruptores.
Neste caso, no necessria qualquer sincronizao, no sendo sequer necessrio um registo de entrada. Este pode ser substitudo simplesmente por
um conjunto de buffers de trs estados que realizam a interface elctrica. esta
entidade que, neste caso, assume o papel de porto. A Figura 14.7 ilustra a
estrutura de uma interface com um porto de entrada deste tipo.
Repare-se que, neste caso, dada a simplicidade da interface, no necessrio existir descodificao interna, uma vez que h apenas um porto. Quando a
instruo de leitura do porto executada, os valores assumidos pelos interruptores so directamente introduzidos no barramento de dados.
Embora seja conceptualmente possvel conceber interfaces com portos de
sada desprovidos de registos, tal no , em geral, uma opo til. Estar-seia na presena de um porto de sada que assumiria os valores a ele enviados
apenas durante um ciclo de escrita do processador o que, em geral, no suficiente.
Na Figura 14.8 est representada uma interface de sada que permite ao
processador escrever um octeto num conjunto de leds. Mais uma vez a simplicidade da interface dispensa descodificao interna. A instruo de escrita
provoca a escrita no porto de um octeto que se manter visvel nos leds at
prxima escrita.

14.3.2 Protocolos de Sincronizao


Sincronizao por Impulso
Considere-se agora uma interface que est ligada a um conversor digital/analgico (D/A) e a um conversor analgico/digital (A/D). Um dispositivo do
primeiro tipo permite converter uma sequncia de palavras de valores binrios num sinal analgico. Uma aplicao bvia a gerao de audio num com-

14.3. COMUNICAO PARALELA

281

Barramento de Endereos
Barramento de Dados
Barramento de Controlo

Descodificao
Externa

...

Controlo

Enable da
Interface

Leitura
OEn

Figura 14.7: Interface de entrada de um conjunto de interruptores.


putador. Trata-se de um perifrico de sada. Um conversor analgico/digital
permite, por seu turno, converter um sinal analgico varivel no tempo, num
conjunto de valores numricos que o representam. Uma aplicao bvia um
sistema de digitalizao de audio. Trata-se de um perifrico de entrada.
Em ambos os casos necessrio garantir a transferncia peridica de valores binrios que permita gerar o sinal pretendido ou amostrar um sinal a
digitalizar e guardar os valores sucessivamente obtidos em memria. A responsabilidade dessa gerao pode ser atribuda, por exemplo, ao processador
com auxlio do sistema de interrupes e de um temporizador, como se ver
adiante. No caso da entrada de dados, pode tambm ser dada a funo de gerir
essa periodicidade ao circuito do prprio perifrico. Na Figura 14.9 ilustra-se
uma hiptese de interface e a sua ligao aos dois conversores. Neste exemplo, a gerao dos sinais peridicos para o conversor analgico/digital feita
localmente pelo perifrico.
Nesta interface existe um flip-flop D que gera um impulso de cada vez que
o processador escreve uma palavra no registo da interface. Esse impulso

282

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES


Barramento de Endereos
Barramento de Dados
Barramento de Controlo

Descodificao
Externa

...

Controlo

Enable da
Interface

Escrita

Figura 14.8: Interface de sada para um conjunto de leds.

temporizado a partir do relgio do barramento de controlo e controlado pela


linha de escrita no registo. Desse modo, sempre que h uma escrita (no endereo interno , correspondente ao registo de sada), o conversor D/A avisado
atravs da linha DOUTVAL que sinaliza a existncia de um novo dado no barramento de ligao ao conversor.
Inversamente, sempre que o conversor A/D gera um novo dado, coloca-o
no barramento de ligao com a interface e actua a linha DINVAL com um impulso. Esse impulso, por um lado, procede ao carregamento do dado no registo
de entrada da interface e, por outro, permite actuar uma bscula. Essa bscula

pode ser lida (com o endereo interno ) pelo processador. Desse modo, o processador pode inquirir se h dados novos no registo de entrada. No caso de
haver, o processador l-os (actuando o endereo interno  ) o que simultaneamente desactiva a linha que indica a existncia de dados disponveis. A opo
usada de sincronizao entre a interface e o processador, atravs de um registo

de estado de um bit com o endereo interno , no a nica. Como ser posteriormente abordado, poderia ter sido usada a sada da bscula para actuar
directamente a linha de interrupo do processador.
Em interfaces reais existem, como natural, mquinas de estado mais complexas (e seguras) para garantir os processos de sincronizao com os perifri-

14.3. COMUNICAO PARALELA

283

Barramento de Endereos
Barramento de Dados
Barramento de Controlo
A0 a An-1
Descodificao
Externa

A0 A1

...

Interface A
En
Descodificao
Interna
0 1 2 3

Controlo
D0
Escrita
Leitura

OEn
Porto 2

Porto 0
S
R

1D
C1

Clock
DOUTVAL

DINVAL

Conversor
D/A

Conversor
A/D

Figura 14.9: Interface bidireccional com um conversor A/D e um conversor


D/A.
cos e com o processador.
A nvel da troca de sinais entre a interface e o conversor D/A, o diagrama
temporal da Figura 14.10 ilustra o funcionamento do protocolo. No instante
1 novos dados so escritos no registo. No instante 2, o facto assinalado ao
perifrico. Em 3 no h qualquer sinalizao especfica, mas o perifrico fica a
aguardar nova escrita. O perifrico deve ter j, nesta fase, guardado a palavra
presente no barramento. Em 4, o ciclo recomea. Esta forma de sincronizao
habitualmente designada por sincronizao por impulso. Este impulso muitas
vezes designado em ingls, por strobe.
Dados
DOUTVAL

Figura 14.10: Sincronizao por impulso.


A forma de sincronizao da comunicao entre o conversor A/D e a interface semelhante. No caso, porm, de, como se referiu atrs, a sincronizao
poder estar a cargo do processador, o protocolo seria ligeiramente diferente,

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

284

uma vez que, agora, o impulso funcionaria, no como confirmao da presena


de dados, mas como pedido do seu envio. Na Figura 14.11 ilustra-se essa variante. Agora em 1, o destinatrio dos dados pede que eles sejam enviados. Em
2, a fonte dos dados coloca-os no barramento. Em 3, o destinatrio assumiu
que os dados estavam presentes e armazenou-os. Em 4 o ciclo recomea.
Dados
SendData

Figura 14.11: Variante da sincronizao por impulso.

Protocolos de Handshaking
H, como se pode ver, vrias formas de sincronizao entre a interface e o
perifrico. Nas formas apresentadas tem de haver, implcito nas interfaces um
conhecimento das temporizaes dos interlocutores, uma vez que no h, por
parte destes, nenhuma confirmao explcita de que a comunicao se realizou
com xito. Isto quer dizer que da responsabilidade da entidade que gera
os dados saber que o receptor j est pronto para receber novos dados. Em
algumas aplicaes impossvel, porm, ter esse conhecimento porque no se
conhece as caractersticas temporais do perifrico a que uma interface pode ser
ligada.
Para resolver este problema tem de existir, na comunicao entre a interface e o perifrico, no s a indicao da entidade geradora de dados que estes
se encontram disponveis, mas tambm, por parte da entidade destinatria,
a indicao de que os dados foram aceites. Isso conduz a um tipo de protocolo de comunicao entre a interface e perifrico que tem por designao
handshake. Nesse protocolo, a entidade geradora de dados (por exemplo, a interface, numa comunicao com um perifrico de sada) sinaliza que os dados
  
esto disponveis por uma linha
 , por exemplo, e a entidade receptora (no exemplo referido, o perifrico)
sinaliza
que os dados foram aceites por
 
uma linha reconhecimento,
(do ingls, acknowledge). A forma concreta
como a sinalizao feita pode variar. Podemos considerar impulsos ou mudanas de nvel de uma linha. Na Figura 14.12 ilustra-se o protocolo utilizando
mudanas de nvel das linhas.
Dados

Dados a enviar

Dados a enviar

DADVAL
ACK

12

45

Figura 14.12: Exemplo de um protocolo de aperto de mo.

14.3. COMUNICAO PARALELA

285


Na figura os dados a enviar so colocados no barramento no instante e


  
isso assinalado pela mudana de nvel da linha
 no instante mar
cado com  . A entidade
receptora
reconhece
a
recepo
no
instante
alterando
 
o nvel da linha
. Assumiu-se que os dados deixavam de estar estveis a


partir do instante assinalado com . Nos instantes a  , repete-se o processo
de envio com novos dados. O nvel das linhas associadas ao protocolo, neste
caso, no tem significado e so apenas as suas transies que suportam a informao. Como j referido podiam ter sido usados impulsos para garantir a
sinalizao.
Um caso mais interessante um protocolo que garante uma dupla sincronizao: para alm da capacidade de dar entidade geradora de dados a confirmao de que a entidade receptora, de facto, recebeu os dados, como acontece
no caso anterior, garante-se ainda, que a entidade receptora sinalizada de
que a entidade emissora recebeu aquela confirmao. Este protocolo habitualmente designado por duplo handshaking e uma das suas possveis variantes
est representada na Figura 14.13.
Dados

Dados a enviar

DADVAL
ACK

12

56

Figura 14.13: Exemplo de um protocolo de duplo aperto de mo.




Na figura os dados so disponibilizados em e o facto assinalado no ins 


tante marcado com  pelo activar da linha
 . A entidade receptora
 
pode agora ler e registar osdados, respondendo com a activao da linha
no instante marcado com . A entidade emissora pode, a partir de agora, de  

 (instante ) indicando, assim ao receptor que tomou
sactivar a linha

conhecimento
da sua confirmao. Este responde em desactivando a linha

, terminando o ciclo e repondo a situao inicial. Na figura os dados

foram retirados pela entidade emissora no instante , mas podiam ter sido reti
rados em qualquer
a partir de , por coerncia com o significado do
  momento

nome da linha
 , ou mantidos at ocorrncia de novo ciclo.
Repare-se que, neste tipo de protocolo, no h nenhuma necessidade por
parte de qualquer das entidades intervenientes de conhecer as caractersticas
temporais da outra. De facto, se, por exemplo, uma interface estiver ligada
a um perifrico lento, isso significa apenas que o ciclo mais longo do que
seria com um perifrico rpido. Se se tratasse de uma sada de dados, o que
  
aconteceria seria que a linha
 ficaria um tempo longo activada com

a interface espera da activao do sinal
e, provavelmente mais tarde,
seria necessrio esperar de novo pela sua desactivao. No caso inverso de
  
 a exibir aquele
se tratar de uma interface de entrada, seria a linha
tipo de lentido. Em qualquer caso, o ciclo seria longo, mas os dados seriam
trocados com toda a segurana.
Nos protocolos de handshake ilustrados a iniciativa de realizar a transferncia de dados est do lado da entidade emissora. Nada impede que a iniciativa

286

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

seja da entidade receptora. No caso do duplo handshake, por exemplo, ilustra-se


na Figura 14.14 uma situao desse tipo.
Dados

Dados a enviar

DADVAL
PEDDAD

23

Figura 14.14: Exemplo de um protocolo de duplo aperto de mo com a iniciativa na unidade receptora.


Na figura, a entidade receptora inicia o ciclo


no instante , pedindo dados
  
entidade emissora activando a linha
. A entidade emissora co  
 no
loca dados vlidos no barramento no instante  e activa a linha

instante marcado com , avisando o receptor
que
os
dados
presentes
no
bar
ramento so dados vlidos. O instante corresponde ao momento em que a
entidade receptora terminou a leitura dos dados e informa o emissor que j

no precisa deles. A entidade emissora confirma isso em , desactivando a linha que indicava que os dados estavam vlidos. A partir daqui o emissor pode
retirar os dados do barramento a qualquer momento. No exemplo, os dados

foram alterados no instante .
A estrutura interna de interfaces capazes de comunicar segundo estes protocolos , evidentemente, mais complexa que as anteriormente apresentadas.
Com os conhecimentos obtidos nos captulos anteriores, porm, o leitor dever
ser capaz de projectar qualquer delas.
habitual, neste tipo de interfaces, dispor, para leitura pelo processador, de
um registo de estado que permite ao processador saber em que fase se encontra
a transferncia e se pode, no caso de sadas, colocar mais dados na interface ou,
no de entradas, se j existem dados disponveis na interface. Tal como no caso
anteriormente estudado, possvel recorrer ao sistema de interrupes para
sinalizar o processador que deve interactuar com a interface.

14.3.3 Interfaces Sncronas


Na arquitectura de interfaces apresentada at aqui, assumiu-se que no existia
transferncia de relgio entre a interface e o perifrico, o que leva necessidade
de estabelecer um processo de sincronizao. esse o caso geral quando um
computador interage com um perifrico atravs de uma interface assncrona,
mas no a nica possibilidade. Pode-se conceber, em alternativa, um protocolo de comunicao em que haja um relgio comum interface e ao perifrico.
Esse tipo de comunicao tem, naturalmente, a designao de comunicao paralela sncrona.
A comunicao paralela sncrona coloca, ao nvel dos perifricos, o mesmo
tipo de problemas que os barramentos internos dos processadores, ainda que,
em geral, o relgio seja mais lento. Em qualquer caso, algumas interfaces deste
tipo permitem a vrios perifricos partilhar a mesma interface, reforando os
aspectos comuns aos dois tipos de barramento.

14.4. COMUNICAO SRIE

287

Um aspecto importante a ter em conta neste tipo de interfaces o que resulta do facto da interface ser interligada a dois barramentos, o barramento
interno do computador e o barramento de ligao aos perifricos que tm, em
geral, relgios de diferentes frequncias. Isso conduz a uma maior complexidade interna deste tipo de interfaces, em relao s interfaces simples anteriormente descritas. No cabe dentro dos objectivos deste livro explorar este tema
em mais detalhe.

14.4 Comunicao Srie


Na seco anterior analisou-se a estrutura das interfaces e dos protocolos de
entrada e sada, assumindo que a comunicao entre a interface e o perifrico
se realiza em paralelo, isto , sendo os vrios bits de um octeto ou de uma
palavra transferidos simultaneamente. Nesta seco analisar-se- outro tipo
de comunicao que assenta na transferncia da informao bit a bit, sendo,
por isso denominada comunicao srie.
As vantagens deste tipo de comunicao sobre a comunicao paralela so
as seguintes:
So necessrios menos fios para estabelecer a ligao, conseguindo-se,
no s alguma economia, como tambm, cabos fisicamente mais flexveis
ocupando menos espao.
No h problemas de sincronizao entre os sinais das vrias linhas existentes na comunicao paralela, o que pode ser um problema em alta
velocidade com distncias significativas.
economicamente vivel, porque reduzida a menos linhas, a utilizao
de drivers elctricos de maior potncia ou sensibilidade que permitam
a comunicao a maiores distncias que as conseguidas com electrnica
digital simples.
A utilizao de comunicao srie permite a utilizao de ligaes atravs
de redes de comunicao (inicialmente atravs de linhas telefnicas) que
seriam de mais complexa utilizao com comunicao paralela.
A comunicao srie facilita a utilizao de redes locais de comunicao
permitindo a relativamente fcil partilha de um canal fsico de comunicao por um conjunto de equipamentos.
Este tipo de comunicao potencia, tambm, a utilizao de canais de
comunicao sem fios, por razes semelhantes s j anteriormente referidas.
As interfaces destinadas a comunicao srie so estruturadas em torno de
um registo de deslocamento. No caso de interfaces de sada, o registo um
registo de carregamento paralelo e sada srie. No caso de interfaces de entrada, pelo contrrio, trata-se de um registo de entrada srie e sada paralela.
Obviamente que a estrutura da interface mais complexa, mas estes registos
permitem conciliar a necessidade de comunicao com um perifrico com a
comunicao em paralelo com o processador atravs do barramento de dados.

288

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

A comunicao srie apresenta a vantagem, como foi atrs sugerido, de facilitar a ligao entre dois processadores atravs de linhas srie que interligam
interfaces de entrada/sada dos dois computadores. Se bem que uma ligao
deste tipo seja concebvel com interfaces de comunicao paralela, a utilizao
de comunicao srie facilita muito a tarefa.
Quanto aos sentidos de comunicao entre duas entidades que comunicam
em srie, sejam uma interface e um perifrico, sejam dois computadores, h
trs tipos de ligao. Quando a comunicao se faz apenas numa direco, por
exemplo, de uma interface para um perifrico de sada, chama-se comunicao
simplex. No , actualmente, comum excepto em aplicaes muito especficas. A comunicao half-duplex, por sua vez, realiza-se nos dois sentidos, mas
separadamente, isto , com a entidade A a enviar dados para a entidade B e,
posteriormente, com a entidade B a enviar dados para a entidade A. Neste caso
nunca h comunicao simultaneamente nos dois sentidos. Embora em comunicaes envolvendo computadores de uso geral seja j pouco usado, este tipo
de comunicao frequente em aplicaes de controlo e automao. Por fim,
quando entre duas entidades se permite a troca simultnea de comunicao
nos dois sentidos, trata-se de comunicao full-duplex. a mais frequente hoje
em dia. Repare-se que uma comunicao full-duplex do ponto de vista lgico,
pode ser fisicamente suportada em comunicaes simplex, como acontece, por
exemplo, na comunicao entre um processador e um terminal (incluindo monitor e teclado) ou com um modem.
Na comunicao srie surge, tal como sucede com a comunicao paralela,
a necessidade de sincronizar as duas entidades que trocam informao entre
si. H dois modos fundamentais de o fazer: na comunicao sncrona, para alm
de se transmitirem os sucessivos bits de informao igualmente transmitido
uma sequncia de impulsos de relgio que permitem ao receptor extrair os
bits de informao do sinal recebido; na comunicao assncrona, pelo contrrio,
no transmitido qualquer sinal de relgio e tm de ser assumidos pelas duas
entidades envolvidas certos pressupostos no que diz respeito s caractersticas
temporais do sinal transmitido.

14.4.1 Comunicao Assncrona


A comunicao assncrona a forma de comunicao srie que assume mais
baixa complexidade e , historicamente, a primeira a ser utilizada. Na comunicao assncrona entre duas entidades, como foi j referido, no transmitido
o relgio. A necessria sincronizao garantida pela existncia de relgios do
lado emissor e do lado receptor com frequncias to prximas quanto possvel.
Se ambas as entidades estiverem de acordo quanto frequncia de transmisso,
o receptor, usando o relgio local, vai amostrar o nvel da linha em intervalos
sucessivos, separados pela durao do bit. No entanto, como os dois relgios
no so exactamente iguais, ao fim de alguns bits corre-se o risco de que um
dos bits recebidos no seja lido ou seja lido duas vezes. Para evitar isso, na
comunicao assncrona o nmero de bits a enviar de cada vez reduzido.
habitual enviar um caracter de cada vez ou, quando a informao a enviar no
textual, um octeto.
Como vo ser enviadas sucessivas sequncias de bits, passa a ser necessrio
um segundo nvel de sincronizao que consiste em identificar perante a entidade receptora quando se inicia uma nova sequncia. Enquanto que a anterior

14.4. COMUNICAO SRIE

289

se pode designar por sincronizao de bit, esta nova forma pode ser designada
por sincronizao de caracter ou sincronizao de octeto.
Uma forma clssica de resolver os problemas apontados est ilustrada na
Figura 14.15.
Pontos de amostragem

Bit de arranque

Durao de um bit

Bits de informao

Figura 14.15: Exemplo de envio de um octeto em comunicao assncrona.


A linha de transmisso permanece num nvel determinado quando no esto a ser transmitidos dados. Normalmente opta-se pelo nvel H, o nvel elevado de tenso. Quando surgem dados para transmisso (no caso do exemplo,
um octeto), a transmisso inicia-se obrigatoriamente com a passagem da linha
ao nvel oposto do nvel de repouso durante a durao de um bit. A este intervalo chamado bit de arranque (em ingls, start bit). Ao receber este bit de
arranque, isto , ao verificar a existncia de uma transio do nvel de repouso
para o inverso, a entidade receptora calcula os instantes correspondentes ao
meio do tempo de durao dos bits transmitidos e, nesses instantes, l o nvel
da linha. Desse modo so recebidos os sucessivos valores dos bits transmiti
 
dos. No exemplo da figura, recebido o octeto
assumindo que, como
usual, se envia o octeto com os bits menos significativos em primeiro lugar.
Para este esquema funcionar, a linha ter de ficar no estado de repouso por
um tempo mnimo entre cada par de octetos ou de caracteres. Esse intervalo ,
normalmente, o correspondente durao de um a dois bits. H, deste modo,
a garantia que, mesmo que o ltimo bit transmitido seja um , haver um intervalo com uma durao garantida em que a linha permanece em repouso. A
esse intervalo habitual chamar bits de guarda (em ingls, stop bits).
Por outro lado, a provvel ocorrncia de erros de transmisso levou a juntar
a todo este esquema, um mecanismo que permita detectar a eventual existncia
de um erro deste tipo. Para isso usa-se um bit suplementar que indica a paridade
do conjunto dos bits. usual designar esse bit por bit de paridade (em ingls,
parity bit). Na emisso, verifica-se se o nmero de bits de informao a par
ou mpar e determina-se o valor do bit suplementar, de modo a que a paridade
do conjunto total, incluindo-o, seja do tipo desejado.
Por exemplo, se se estiver

 
a transmitir octetos e o octeto a transmitir for
, a paridade dos oito bits

par, uma vez que o nmero de bits a quatro. Se se pretender paridade
par,

o bit suplementar ser . Se se pretender paridade mpar, o bit ser .
Na recepo verifica-se de novo a paridade. Se no ocorreu qualquer erro
na transmisso, a paridade testada na entidade receptora estar correcta. Se
ocorrer um erro num bit, haver um bit que tem o valor trocado e, portanto,
a deteco da paridade vai indicar que houve um erro. Nessas circunstncias a entidade receptora tem a informao que houve um erro de transmisso
e, consequentemente, pode desencadear as aces adequadas, nomeadamente
possibilitando entidade receptora pedir a retransmisso do caracter ou octeto

290

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

com erro. Repare-se, contudo, que este mtodo tem uma limitao: se ocorrerem dois erros, ou mais geralmente, um nmero par de erros, a determinao
da paridade no indica qualquer erro. A utilizao do bit de paridade , em
geral, deixada como opcional numa transmisso assncrona.
Na Figura 14.16 est ilustrada a estrutura da informao transmitida incluindo j o bit de paridade (com paridade par) e dois bits de guarda.
Pontos de amostragem

Bit de arranque

Durao de um bit

Bits de informao

Aqui pode iniciar-se


outra transmisso

Bits de guarda
Bit de paridade

Figura 14.16: Exemplo de envio de um octeto em comunicao assncrona com


bit de paridade e bits de guarda.
Se o relgio de recepo fosse igual ao de emisso, a amostragem dos bits
far-se-ia sempre no meio do intervalo de tempo correspondente a cada bit. Na
realidade no isso que se passa porque os relgios no tm exactamente a
mesma frequncia. Considere-se, por exemplo, o que acontece se o relgio
de recepo for ligeiramente mais lento que o de emisso. Observe-se a Figura 14.17. Inicialmente, o aparecimento do bit de arranque permite iniciar
a leitura por amostragem dos bits seguintes. Como o relgio , porm, mais
lento que o de emisso, cada bit vai sendo amostrado um pouco mais tarde
que o anterior em relao ao meio do perodo de durao do bit. Resulta bvio
da figura que, por causa deste efeito, o nmero de bits transmitidos de cada
vez tem de ser limitado.
Pontos de amostragem

Bit de arranque

Figura 14.17: Recepo de um octeto com relgio de recepo de frequncia


ligeiramente inferior ao de recepo.
Como evidente, nem todos os bits transmitidos numa comunicao assncrona so bits teis de informao. De facto, o bit de arranque, o bit de
paridade e o intervalo denominado de bits de guarda, so necessrios comunicao, mas no transportam informao til.
 
A velocidade de transmisso usualmente referida em bits por segundo ( )
e refere-se quantidade de bits transmitidos por segundo. Note-se que se consideram todos os bits transmitidos, incluindo os de informao til e os bits
de arranque, de paridade e de guarda. Esta velocidade de transmisso , por

14.4. COMUNICAO SRIE

291

vezes, designada por baud rate, embora esta designao seja incorrecta. O baud
corresponde mais simples quantidade de informao transmitida. Sempre


que baud equivale a bit, a designao est correcta. No entanto, certas formas de transmitir informao transmitem vrios bits simultaneamente levando

a que baud corresponde a vrios bits.

14.4.2 Comunicao Sncrona


Na comunicao sncrona o relgio que existe na entidade receptora tem exactamente a mesma frequncia do usado na emissora. Desse modo, o fenmeno
de escorregamento do momento de amostragem dos bits no existe. H duas
formas de garantir que o relgio o mesmo nas duas entidades: ou ele transmitido, do mesmo modo que os bits, ou, em alternativa, transmitida suficiente informao para garantir que reconstitudo na recepo um relgio
sincronizado com o relgio de emisso. Adiante se far uma breve referncia
forma de o conseguir.
De qualquer modo, a existncia de um relgio sincronizado leva a dispensar a segmentao de informao em entidades de pequena durao, como
acontece na comunicao assncrona. Em princpio, pode agora transmitirse informao de forma contnua. Claro que isso coloca novas exigncias do
ponto de vista das interfaces e do nvel de prioridade que o processador d a
essa comunicao. Haver que garantir que a emisso no travada por falta
de dados para transmitir e que, na recepo, no se perde informao por falta
de recolha de informao da interface pelo processador.
Persistem, contudo, razes para segmentar a informao ainda que em blocos de maior dimenso do que era usual na comunicao assncrona. Por um
lado, isso resulta da necessidade de permitir que o processador controle a comunicao, gerindo a quantidade de informao que est disponvel para enviar ou receber de cada vez. Por outro lado, h que ter em conta que os erros de
transmisso existem. Enviar um longo bloco de informao sem o segmentar
implica que um simples erro de transmisso comprometa todo o bloco, levando
necessidade de o retransmitir. Por outro lado, blocos demasiado pequenos
tm o inconveniente de levar, como se ver adiante, a baixos rendimentos de
transmisso. H, portanto, que encontrar uma dimenso ptima. Actualmente
as dimenses envolvidas nas normas mais correntes vo de algumas centenas
a muitos milhares de bits.
Nas implementaes correntes de comunicao sncrona, normal o contnuo envio de relgio, mesmo quando no h informao til a transmitir. Isso
coloca o problema de diferenciar a ausncia de dados da transmisso de dados
teis, uma vez que o receptor est permanentemente a amostrar a linha.
O desenvolvimento deste tipo de comunicao foi relevante para a implementao de redes de computadores de todos os tipos. Isso implica a necessidade, quando enviada uma sequncia de dados, de explicitar qual o seu
destino, isto , a que receptor, de entre um conjunto de receptores possveis, se
destina a informao.
Por todas as razes apontadas foi necessrio desenvolver protocolos de comunicao que dessem suporte a todas as funcionalidades requeridas. Faz-se
seguidamente uma breve introduo a essa problemtica, mas recomenda-se
a consulta de textos sobre comunicao de dados ou redes de computadores

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

292

a quem pretenda aprofundar o assunto. Inicialmente desenvolveram-se protocolos orientados ao caracter, protocolos em que se assume que a informao a
transmitir constituda por caracteres de texto. Com o desenvolvimento da
necessidade de transmitir outro tipo de informao, foram desenvolvidos protocolos orientados ao bit.
Protocolos Orientados ao Caracter
Protocolos deste tipo so j pouco usados, mas so aqui referidos por serem
um passo importante que faz a ponte da comunicao assncrona para os modernos protocolos orientados ao bit. Neste tipo de protocolos assume-se que a
informao til constituda por texto sob a forma de um cdigo e, eventualmente, por alguns caracteres de controlo como os que constam da Tabela 2.13
do cdigo ASCII apresentada na Seco 2.3.3.
Na ausncia de dados transmitido sucessivamente o caracter SYN (synchronization), que mantm a sincronizao entre a entidade emissora e a receptora. Quando h dados para transmitir, que no caso destes protocolos ,
normalmente, texto, a transmisso inicia-se por um cabealho com informao liagada ao controlo de transmisso. O cabealho precedido pelo caracter
SOH (Start Of Header), incio de cabealho. O texto , por sua vez, precedido
do caracter STX (Start of TExt), incio de texto e seguido do caracter ETX (End
of TExt), fim de texto. O fim do pacote de informao um caracter BCC (Block
Check Character), caracer de verificao do bloco. Este no um caracter especfico mas sim um caracter calculado de forma a servir de deteco de erros
de transmisso. A informao a transmitir segmentada em blocos com um
comprimento mximo definido. Na Figura 14.18 ilustra-se a estrutura de um
pacote de informao neste tipo de protocolo.
1 caracter

...

SYN SOH

Cabealho
h caracteres

STX

Texto

ETX

BCC SYN

...

t caracteres

Figura 14.18: Estrutura de um pacote num protocolo de comunicaao sncrona


orientado ao caracter.

Protocolos Orientados ao Bit


Na transmisso de informao no textual h o problema de no se poder
transmitir configuraes aleatrias de bits porque podem ser interpretados
como caracteres de controlo (STX, SOH, etc.). De facto s caracteres (de texto ou
controlo) podem ser transmitidos. Acontece que muitas vezes h necessidade
de transmitir informao que no caracterizvel", por exemplo, programas.
Os protocolos orientados ao bit permitem resolver este problema.
Nos protocolos orientados ao bit perde-se a noo de caracter. Passa a haver
uma sequncia de bits. Quando no h informao til a transmitir a entidade
emissora transmite continuamente uma sequncia
de bits chamada flag e que
 
, em muitos dos protocolos correntes,
. Quando surgem dados para

14.5. MODOS DE TRANSFERNCIA DE DADOS

293

transmitir, transmite-se um cabealho e, aps este (que tem um comprimento


fixo) transmitem-se os dados. Aps os dados transmitido um bloco de verificao de erro, aps o que se seguem flags. O aparecimento da flag marca,
portanto, o fim da transmisso. A Figura 14.19 ilustra a estrutura de um pacote
de informao neste tipo de protocolo.
1 octeto

... Flag

Cabealho
h bits

Informao
n bits

CRC Flag

...

2 octetos

Figura 14.19: Estrutura de um pacote num protocolo de comunicaao sncrona


orientado ao bit.
H um problema com
este procedimento. Trata-se do eventual apareci  
mento da sequncia
, correspondente flag no meio da informao
a transmitir. Se essa sequncia de bits for transmitida, o protocolo assume que
o pacote acabou. Desenvolveu-se, por isso, um procedimento adicional chamado bit stuffing. Com excepo das flags, sempre que o emissor constata a

existncia de cinco
s seguidos, acrescenta um . Na recepo, sempre que se

encontram cinco s seguidos, verifica-se o bit seguinte. Se um retira-se. Se

for um , est-se perante uma flag.
Se, por exemplo, a sequncia a transmitir for
 

        

a sequncia efectivamente transmitida, por efeito do bit stuffing


 

         

em que os s sublinhados correspondem aos bits inseridos.

14.5 Modos de Transferncia de Dados


Em geral, o processamento dos dados vindos de (ou destinados a) perifricos
no realizado imediatamente na altura da transferncia. O normal o processamento desses dados ser realizado em memria. Assim, existe uma fase de
transferncia de dados de ou para um bloco de memria, e uma outra fase de
processamento destes dados em memria.
A fase de transferncia de informao entre o computador e os perifricos
destina-se a colocar no perifrico informao que est na memria do computador ou, no sentido inverso, a transferir para a memria informao que
chega do perifrico. Nestas circunstncias, a participao do processador puramente instrumental, lendo de um lado para um registo interno e em seguida
escrevendo esse registo no outro lado.
Analisam-se em seguida as diferentes alternativas para a fase de transferncia de dados entre o computador e os perifricos.

294

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

14.5.1 Transferncia Controlada por Programa


Neste modo de transferncia de informao, o programa a ser executado pela
UCP controla toda a fase de transferncia. Para alm de realizar a transferncia
propriamente dita, quer entre a UCP e o perifrico quer entre a UCP e a memria, tem tambm a seu cargo a monitorizao da interface do perifrico para
saber quando pode enviar dados ou quando novos dados esto prontos para
serem lidos.
Para transferir um bloco de informao, por exemplo, da memria para um
perifrico, necessrio que o programa tenha um ciclo que lhe permita estar
constantemente a testar o porto de estado da interface desse perifrico para
analisar se ela est pronta a receber dados e, quando isso acontecer, tem de fazer uma leitura de uma posio da memria para um registo seguida de uma
escrita desse registo para o porto de dados da interface do perifrico, recomeando o ciclo at toda a informao do bloco ter sido transferida. Este mtodo
chamado de polling, no sentido em que a iniciativa de verificar se um dado
perifrico est pronto da UCP. Um fluxograma de um programa deste tipo
est ilustrado na Figura 14.20. Uma transferncia no sentido inverso ter um
programa semelhante, em que no ciclo de espera se testa se o perifrico tem
dados prontos para enviar para a memria.
Esta a abordagem mais simples em termos de hardware, uma vez que
tudo resolvido pelo software. A grande desvantagem naturalmente que a
UCP fica completamente monopolizada por esta tarefa que , em geral, uma
tarefa lenta. Para muitos casos, a maior parte do tempo a UCP estar no ciclo
de espera em que se testa se o perifrico est novamente disponvel.

14.5.2 Transferncia Controlada por Interrupes


Uma forma mais optimizada de realizar a transferncia de dados usar o sistema de interrupes do processador. Assim, mantm-se a transferncia de
informao a cargo da UCP, mas esta deixa de ter que ficar em ciclo lendo o bit
de estado da interface espera que esta indique a possibilidade de fazer uma
nova transferncia. Em vez disso, quando o perifrico estiver de novo disponvel, a sua interface coloca um sinal activo que provocar uma interrupo do
processador. A interface dever manter o sinal de interrupo activo at que a
UCP a informe que vai tratar a sua interrupo, normalmente atravs de um
sinal de confirmao de interrupo (em ingls, interrupt acknowledge no caso do

processador P3 do Captulo 12, o sinal
).
Este modo de transferncia permite, no contexto do exemplo anterior, que
o processador esteja a executar qualquer actividade e, quando interrompido,
corra a rotina que procede transferncia de dados. A rotina ter a estrutura
da Figura 14.21. Pode-se observar que esta rotina corresponde simplesmente
fase de transferncia de dados entre a memria e o perifrico do programa
anterior.
Com esta implementao, a UCP deixa de ter ciclos desperdiados espera
que o perifrico fique disponvel. A UCP continua, no entanto, a ter algum
tempo de processamento dedicado transferncia, mas este um tempo til
no sentido em que se est de facto a realizar a cpia dos dados.
Para alm disso, esta implementao permite que existam vrias transferncias a decorrer em simultneo com diferentes perifricos. Na situao anterior,

14.5. MODOS DE TRANSFERNCIA DE DADOS

295

L o porto
de estado
da interface

Isola bit de
estado de
perifrico pronto

pronto?

no

sim
L posio
de memria
para um registo

Escreve registo
no porto de escrita
da interface

Incrementa posio
de memria e total
de transferncias

fim?

no

sim

Figura 14.20: Fluxograma de um programa de controlo da transferncia de


dados por software.

tal no era possvel pois a UCP estava dedicada transferncia de um bloco


com um perifrico, no dando ateno a mais nada, nomeadamente outros perifricos. Com transferncias controladas atravs de interrupes, depois de se
lanar a transferncia de um bloco para um dado perifrico, a UCP fica liberta
para iniciar em paralelo uma nova transferncia com outro perifrico. Esta
possibilidade levanta trs problemas.
O primeiro problema que, tal como referido na Seco 11.5.3, durante a
execuo de uma rotina de tratamento a uma interrupo, as interrupes so
automaticamente inibidas de forma a que esta rotina no possa ser interrompida. Em muitos processadores, este problema minimizado permitindo que

296

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

L posio
de memria
para um registo

Escreve registo
no porto de escrita
da interface

Incrementa posio
de memria e total
de transferncias

Figura 14.21: Fluxograma de rotina de tratamento de interrupo numa transferncia de dados por interrupo.
perifricos mais prioritrios possam interromper rotinas de interrupo com
menor prioridade. De qualquer forma, pode acontecer a UCP no responder
de imediato interrupo de um perifrico caso tenha sido interrompida por
outro h pouco tempo e assim ainda esteja a tratar dessa transferncia. Em geral, cada dispositivo tem um tempo de resposta mximo (em ingls, timeout). O
comportamento caso esse tempo seja excedido especfico a cada dispositivo,
desde o abortar a comunicao com um cdigo de erro, passando pelos que fazem uma nova tentativa de comunicao (at se atingir um nmero mximo de
tentativas), at ao ignorar puro e simples deste erro de transmisso e passagem
imediata aos dados seguintes.
Como as rotinas de tratamento interrupo utilizadas nas transferncia
de dados so extremamente simples (conforme Figura 14.21), logo com um
tempo de execuo muito baixo, este no normalmente um problema srio.
Portanto, mesmo em caso de conflito, os tempos de resposta a uma interrupo
no excedem, em geral, os tempos de resposta mximos dos dispositivos.
O segundo problema que surge quando existe mais do que uma transferncia a decorrer em simultneo que quando a UCP recebe uma interrupo
tem que ter mecanismos para poder identificar qual foi o dispositivo que gerou
essa interrupo. Esta identificao tem como finalidade a seleco da rotina
de tratamento interrupo que deve ser executada, especfica para cada perifrico.
Uma soluo simples para este problema a UCP disponibilizar para o exterior um conjunto de linhas de interrupes independentes, atribuindo-se a
cada perifrico do sistema uma dessas linhas. Esta soluo pode no ser prtica quando o nmero de perifricos elevado. A alternativa usar uma linha
de interrupo nica (como no caso do P3 estudado no Captulo 12), mas nesse
caso a UCP ter que passar por um processo para a identificao do perif-

14.5. MODOS DE TRANSFERNCIA DE DADOS


Enderecos
Dados

297

n
m

UCP
IntN
Int2
Int1
Int0
Disco

Rato

Teclado

...

Memria

Figura 14.22: Diagrama de processador e perifricos ligados com linhas de interrupo individuais.
rico aps a recepo de uma interrupo. Estas alternativas so analisadas em
detalhe em seguida. Notar que possvel um processador conjugar as duas
alternativas, com um conjunto de linhas de interrupo em que uma ou mais
destas partilhem perifricos.
Finalmente, um terceiro problema est relacionado com a possibilidade de
vrios perifricos gerarem simultaneamente uma interrupo, colocando-se a
questo de qual destas interrupes deve ser tratada em primeiro lugar.
necessrio, portanto, definir uma ordem de prioridades no atendimento das
interrupes. Ao contrrio do que se poderia pensar partida, os dispositivos
com maior prioridade no so, em geral, os que interagem com o utilizador.
Normalmente, os dipositivos mais rpidos (por exemplo, o disco) tm maior
prioridade do que os mais lentos (por exemplo, o teclado), que, como foi observado atrs (ver Seco 14.2), so tipicamente os que fazem a interface com
o utilizador. A razo desta ordem de prioridades deve-se a que os dipositivos
mais rpidos exigem tempos de resposta mximos menores, pois necessitam
que a sua informao seja lida ou escrita rapidamente para que possam ficar
prontos para os prximos dados que chegam a ritmo elevado. A maneira como
o tratamento destas prioridades realizado depende da forma de identificao
das interrupes e ser discutido dentro de cada uma das seces que segue.
Linhas de Interrupo Independentes
A soluo conceptualmente mais simples em termos de identificar o dispositivo que gera uma interrupo o processador disponibilizar linhas individuais de interrupo. Nestas condies, basta ligar a linha de interrupo de cada
perifrico a uma das linhas de interrupo do processador, como exemplificado
na Figura 14.22.
Cada linha de interrupo ter associado um endereo de incio da rotina
de tratamento interrupo. Este endereo
pode ser fixo e definido partida.

Por exemplo, a interrupo dalinha  da Figura 14.22 saltar sempre para o


endereo
h, a da linha  no endereo
h, etc. Portanto no endereo
h dever estar o incio da rotina de tratamento interrupo do perifrico
ligado a essa linha. No caso da Figura 14.22 seria a rotina de tratamento das

298

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

interrupes do disco.
Uma alternativa mais flexvel, e tambm mais comum, atravs da utilizao de uma tabela de rotinas de interrupo. Esta tabela reside numa posio fixa
em memria e ter tantas entradas quantas as linhas de interrupo do processador. Cada entrada est associada a uma das linhas de interrupo e contm
o endereo do incio da rotina de tratamento ao perifrico ligado nessa linha.
possvel por software definir as entradas nessa tabela, dando portanto maior
flexibilidade no posicionamento das rotinas de tratamento s interrupes.
Para exemplificar, e voltando Figura 14.22, considere-se que o processador

tem 16 linhas de interrupo, de a
. Neste caso, a tabela de rotinas
de interrupo ocupar 16 posies de memria, estando cada posio desta
tabela associada ao ndice da linha de interrupo. Considere-se
 ainda que foi
definido para esta UCP que esta tabela comea no endereo
h. Caso surja
uma interrupo na linha de interrupo , a execuo da rotina de interrupo


ter lugar a partir do valor guardado na posio
h , ou seja,
  de memria

  
.
ser realizada a transferncia
Com esta organizao, est definida partida uma prioridade fixa para as
linhas de interrupo. Por exemplo, tm maior prioridade as linhas de interrupo com ndice menor. Assim, caso surja mais do que uma interrupo
em simultneo, ser atendida aquela com ndice menor. As restantes ficaro
pendentes e sero tratadas aps a execuo da rotina de interrupo desta.
Este funcionamento possvel graas inibio automtica das interrupes
quando se entra numa rotina de tratamento a uma interrupo. Portanto, como
referido atrs, os dispositivos mais rpidos devero ser ligados s linhas de
interrupo com ndice menor. No caso da Figura 14.22, pela forma como os
perifricos foram ligados s linhas de interrupo, o disco ser o perifrico com
maior prioridade, seguido pelo rato.
Linha de Interrupo Partilhada
A abordagem apresentada atrs limita o nmero de perifricos capazes de gerar interrupes ao nmero de linhas de interrupo disponveis. Uma alternativa ter uma nica linha de interrupo partilhada por todos os perifricos.
Quando esta linha activada, a primeira tarefa da UCP identificar qual o perifrico que a gerou e em seguida executar a rotina de tratamento interrupo
correspondente.
Este processo pode, por sua vez, ser resolvido por duas formas. As interrupes podem ser vectorizadas ou no. Com interrupes vectorizadas, o
perifrico responsvel pela interrupo informa a UCP que foi ele quem a gerou. No caso das interrupes no vectorizadas, ter que ser a UCP a varrer
os perifricos at identificar aquele que gerou a interrupo. Analisam-se em
seguida estas duas alternativas.
Interrupes No Vectorizadas
Como referido, com uma linha de interrupo nica e com interrupes no
vectorizadas ser necessrio a UCP por software ter um processo de identificar
o perifrico que requisitou a sua ateno. A forma de o fazer ler em sequncia
o registo de estado na interface de cada um dos perifricos at encontrar um

14.5. MODOS DE TRANSFERNCIA DE DADOS

299

Inicializa
endereo E/S
para o primeiro
perifrico

L o porto
de estado
da interface

Isola bit de
estado de
perifrico pronto

sim

Salta para rotina


de interrupo
desse perifrico

pronto?

no

Passa para
endereo E/S do
perifrico seguinte

Figura 14.23: Fluxograma da fase inicial da rotina de interrupo para interrupes no vectorizadas que identifica qual o perifrico que deve ser servido.
que esteja pronto a transferir informao. Este procedimento est ilustrado na
Figura 14.23.
Este processo tambm chamado de polling, apesar de ser uma forma diferente polling da apresentada na Seco 14.5.1. Aqui sabe-se partida que
haver um perifrico pronto a transferir informao e o objectivo do polling
identidicar qual. Anteriormente, o polling foi usado no contexto de uma espera
activa, em que se fica em ciclo at o perifrico com quem se est a realizar a
transferncia esteja pronto.
Portanto, no caso de interrupes no vectorizadas, a rotina de interrupo
nica, sendo o fluxograma da sua fase inicial o apresentado na Figura 14.23.
No entanto, uma vez identificado o perifrico a servir, esta salta para uma zona
de cdigo de tratamento da interrupo especfico a esse perifrico.
Neste mtodo de interrupes, a maneira de definir prioridades conseguida atravs da ordem com que os perifricos so testados. fcil observar
que, caso tenha havido mais do que um perifrico a gerar uma interrupo,
ser atendido primeiro o que for testado em primeiro lugar. De facto, nessa altura, o processador nem se chega a aperceber que h mais perifricos a requerer a sua ateno. Depois de ter tratado do primeiro perifrico, como a linha
de interrupo continuar activa, haver uma nova chamada rotina de tra-

300

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

tamento da interrupo e desta vez, se entretanto no tiverem chegado novas


interrupes de maior prioridade, j se chegar ao perifrico de menor prioridade. Logo, a ordem de teste igual ordem de prioridade do perifricos.
Esta uma abordagem simples e flexvel, pois o controlo est do lado do
software. Porm, tem o problema de, para a maioria das aplicaes, ser demasiado lenta. O ciclo de teste dos perifricos pode demorar bastante tempo, o
que altamente indesejvel numa rotina de tratamento a interrupes.
Interrupes Vectorizadas
O caso mais comum para gerir as interrupes num computador atravs de
interrupes vectorizadas. Com esta abordagem, aps a UCP ter activado o sinal de confirmao de interrupo, o dispositivo que gerou a interrupo ter
que se identificar, colocando o seu vector de interrupo no barramento de dados. Este vector de interrupo no mais do que um valor numrico nico,
atribudo a cada perifrico do sistema. Da mesma forma que com linhas de
interrupo independentes, a UCP utiliza este identificador para obter o endereo da rotina a executar a partir de uma tabela de rotinas de interrupo.
Para gerir as interrupes e o dilogo com a UCP, utilizam-se normalmente
circuitos controladores de interrupes, PIC (em ingls, Programmable Interrupt Controller). As funcionalidades tpicas de um PIC so:
aceitar um conjunto de linhas de pedido de interrupo.
gerir a interface com o processador.
fornecer um vector correspondente interrupo mais prioritria, quando
pedido pelo processador.
permitir o mascaramento de interrupes.
Uma estrutura interna possvel para um PIC com oito linhas de interrupo
est representada na Figura 14.24.
 so as linhas provenientes das interfaces dos perifricos,
As linhas
em que  define o vector do perifrico a ligado. A cada valor de  est associada a prioridade da linha. Assuma-se, por exemplo, que a um valor menor de
 est associada uma maior prioridade da linha. Nesta situao, os perifricos
de maior prioridade devero estar ligados s linhas de ndice menor.
Todas as linhas de interrupo ficam memorizadas no registo que mantm
as interrupes pendentes. Na forma mais simples, bastaria uma porta OR
para a UCP. No enentre todas as sadas deste registo para gerar o sinal
tanto, em geral, o PIC permite fazer o mascaramento de interrupes. Para
isso, est disponvel um registo de mscara de interrupes que permite filtrar as
interrupes e assim impedir que parte das linhas
 gerem de facto uma
interrupo. Para isso, basta colocar a 0 o bit deste registo com peso igual ao
vector de interrupo que se pretende inibir. Este registo est mapeado no espao de entradas/sadas da UCP, e portanto, por software, possvel definir a
cada passo de um dado programa quais so os perifricos de que se aceitam
interrupes.
As sadas do registo de interrupes pendentes entram tambm num codificador com prioridades, como o descrito na Seco 5.2.2. Este codificador
gera na sua sada o valor binrio correspondente entrada com menor ndice

14.5. MODOS DE TRANSFERNCIA DE DADOS

301

Interrupes
Pendentes
Int0
Int1

Codificador
com
prioridades

Int2

Vector de
interrupo

Int3
Int4
Int5
Int6
Int7

Linha de
interrupo
(INT)

Mscara de
Interrupes

Figura 14.24: Diagrama da organizao interna de um controlador de interrupes.


que est a 1 (caso a ordem das prioridades fosse o contrrio da definida atrs,
bastaria trocar a ordem de prioridades deste codificador). A sada deste codi
ficador colocada no barramento de dados quando a UCP envia o sinal
indicando que est a responder a um pedido de interrupo e que pretende
saber o vector dessa interrupo.
At esta altura do texto, assumiu-se sempre que uma rotina de servio a
uma interrupo no pode ser interrompida, pois o bit de estado que habilita
as interrupes automaticamente colocado a 0 quando se serve uma interrupo. Por vezes, este no o comportamento ideal. Nomeadamente, num
sistema com perifricos com diferentes prioridades fcil perceber que pode
ser desejvel permitir que um dispositivo de maior prioridade interrompa a
rotina de servio interrupo de outro perifrico menos prioritrio.
Para este fim, o PIC tem, regra geral, um registo extra que mantm informao de qual (ou quais, pois abriu-se agora a porta para uma rotina de interrupo poder ser por sua vez interrompida) o vector de interrupo que est a
ser servido, como mostra esquematicamente a Figura 14.25. Este actualizado
com o valor do vector de interrupo activo com maior prioridade na altura em

302
Int0
Int1
Int2
Int3
Int4
Int5
Int6
Int7

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

Interrupes
Pendentes

Mscara de
Interrupes

Interrupo
Servida

Resolvedor
de
Interrupes

Vector de
interrupo
Linha de
interrupo
(INT)

Figura 14.25: Diagrama da organizao interna de um controlador de interrupes com registo de informao do vector a ser servido.



que vez o sinal


da UCP. Se entretanto chegar uma nova interrupo com
prioridade inferior que est a ser tratada, esta ignorada at que termine o
tratamento da interrupo actual. Caso a prioridade seja mais elevada, ento a
linha de interrupo
para a UCP imediatamente reactivada.
Para que este processo funcione correctamente, a UCP tem que ter um comportamento diferente do que foi apresentado para o caso do processador P3 do
Captulo 12 em dois pontos:
1. o bit de estado E que permite ou no o atendimento de novas interrupes no deve ser colocado a zero automaticamente quando da entrada
numa rotina de servio a uma interrupo. Em alternativa, possvel
manter o mesmo comportamento do Captulo 12 desde que a primeira
instruo de cada rotina de servio a interrupes seja um ENI.
2. a UCP tem que avisar o PIC do fim da rotina de interrupo, para que
este possa limpar a entrada correspondente no registo que mantm informao das interrupes activas.
Naturalmente, existem alternativas ao modelo de PIC aqui apresentado.
Nomeadamente, possvel realizar este modo de funcionamento em termos
distribudos. Um exemplo simples o sistema de daisy-chain, em que o perifrico mais prioritrio recebe sempre o sinal de confirmao de interrupo,


. Se no tiver sido ele a gerar a interrupo, ele prprio envia o
para
o segundo mais prioritrio, e assim sucessivamente at se chegar ao dispositivo
que gerou a interrupo.

14.5. MODOS DE TRANSFERNCIA DE DADOS

303

14.5.3 Acesso Directo Memria


Como se viu no caso da transferncia por interrupo, a UCP foi aliviada da tarefa de teste da disponibilidade dos perifricos para nova transferncia e pode
concentrar-se em outras tarefas, sendo a sua ateno desviada apenas de vez
em quando para realizar efectivamente a transferncia de uma palavra de dados. Mas mesmo esta transferncia utiliza a UCP apenas porque no pode ser
feita directamente da memria para o perifrico ou vice-versa, uma vez que a
UCP se limita a ir buscar a palavra a um dos stios e colocar no outro.
O objectivo dos dispositivos DMA (direct memory access, ou acesso directo
memria) exactamente o de permitir esta transferncia sem interferncia da
UCP. Para alm de libertar de vez a UCP do processo de transferncia de dados,
uma segunda vantagem em realizar este tipo de transferncia directamente
permitir que, em transferncias com perifricos muito rpidos, a UCP no
constitua o ponto de estrangulamento da transferncia.
Um controlador de DMA , portanto, um circuito que, sempre que necessrio realizar uma transferncia, toma controlo dos barramentos do sistema e
coordena a transferncia de dados entre a memria primria e um perifrico
ou vice-versa.
Durante a transferncia de dados, a UCP no pode aceder aos barramentos
que ligam memria primria e aos perifricos, logo no pode ir memria,
quer para buscar uma nova instruo, quer para ler dados. Isso no impede,
porm, a UCP de continuar a executar uma instruo desde que esta no implique um acesso aos barramentos.
Nos sistemas com memrias cache, o impacto da transferncia DMA pode
ser substancialmente menor. Durante uma transferncia DMA, a UCP pode
continuar a aceder normalmente hierarquia de caches. Assim, enquanto a
UCP conseguir obter a partir das caches as instrues e dados de que necessita,
pode continuar a sua execuo normal. Se ocorrer uma falta na cache, ento
sim, bloqueia-se espera de poder novamente aceder aos barramentos.
Antes de assumir o controlo dos barramentos do sistema, o controlador de
DMA tem, porm, de pedir UCP esse controlo e tem que esperar que este
lhe seja concedido. Isso realiza-se atravs de duas linhas, que podem ter a



denominao
_
e
_ 
.
Assim, o controlador
de
DMA
quando
pretende
realizar uma transfern
cia activa o sinal
_
. O processador, se estiver a realizar um
ciclo de leitura ou escrita, termina o ciclo e, logo aps,
 liberta
 os barramentos,
colocando-os em alta impedncia e activa a linha
_ 
. O controlador de DMA realiza a transferncia e, aps isso, desactiva a linha

_
devolvendo o controlo dos barramentos ao processador.
Arquitectura de DMA
O funcionamento pode ser melhor compreendido com recurso Figura 14.26,
em que, para no complicar desnecessariamente a figura, no est representada
a hierarquia de caches. A sequncia de operaes para uma transferncia por
DMA a seguinte:
1. A UCP funciona normalmente, processando instrues e realizando escritas e leituras da memria.

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

304

Endereos

Dados

MRD/MWR
IORD/IOWR

UCP

Perifrico A
Memria
Primria

DMAR_A

Controlador
DMA

BUS_REQUEST

Perifrico B

DMAG_A
DMAR_B

...

DMAG_B

BUS_GRANT

Figura 14.26: Arquitectura do sistema com um controlador DMA.


2. O perifrico A, por exemplo, tem uma palavra de dados que deve ser
transferida para a memria. A interface deste perifrico activa a linha
  
 _ (em ingls, DMA Request), pela qual pede ao controlador de
DMA autorizao para a operao.
3. O controlador de DMA activa, por seu lado, a linha
espera por autorizao da UCP.

_

4. Quando possvel, a UCP liberta os barramentos, deixando-os em alta



impedncia e activa a linha
_ 
.
5. O controlador de DMA coloca o endereo da posio de memria onde
 
escrever no barramento de endereos, coloca a linha 
a 0 e activa
  
a linha
_ , dando assim indicao ao perifrico da autorizao
para a transferncia.
6. O perifrico, recebendo a autorizao, coloca os dados no barramento de
  
dados e retira o
_ .
7. O controlador desactiva (respeitando as temporizaes de escrita ou lei 
tura
barramento
de endereos, as linhas 
,
 da memria) o 
 
_
e
_ .
8. A UCP retira a linha




e retorna sua actividade normal.

Repare-se
os 
sinais
_
/
_ 
como os
   que
 tanto

_ /
sinais
_ seguem um protocolo de double hand-shaking.
O Controlador de DMA
O controlador de DMA funciona, durante um ciclo de DMA, como mestre dos
barramentos, mas durante o resto do tempo funciona como escravo. Nomeadamente, antes de realizar ciclos de DMA tem que ser programado pela UCP
para conhecer os endereos para/de onde transferir dados na memria, qual a
quantidade de informao a transferir e qual o tipo de DMA.
Para que esta programao seja possvel, o controlador de DMA dispe
internamente de um conjunto de registos que podem ser escritos ou lidos pela

14.5. MODOS DE TRANSFERNCIA DE DADOS

Endereos

305

n
LD
OE

Endereo

Read
Lgica
de
Controlo

Write

BUS_REQUEST

LD
OE

Contador
de Acessos

BUS_GRANT
LD
OE Registo de

Controlo

Dados

DMAR

DMAG

Figura 14.27: Estrutura interna de um controlador de DMA.


UCP. A estrutura interna tpica de um controlador de DMA descrita na Figura 14.27.
No incio de uma transferncia DMA o processador enderea os registos
internos do controlador para programar o tipo e direco das transferncias no
Registo de Controlo, o endereo do incio da zona de memria envolvida na
transferncia e o nmero de acessos a realizar. O processador ter ainda que
programar o perifrico envolvido, ou melhor, a sua interface. A partir daqui o
processador deixa de interferir no processo.
Sempre
  que um perifrico pretende realizar uma transferncia, activa a sua
linha
 (DMA Request).
 O controlo, como se viu, pede controlo dos barramentos atravs da linha
_
. Quando este dado pelo proces

sador atravs da linha
_ 
, o controlador:
1. activa o buffer de endereo de modo a enderear a posio de memria
envolvida;



2. activa a linha 
ou 
, conforme se trate de leitura da memria para o perifrico ou o inverso;

 

3. activa a linha
(DMA Grant) do perifrico, o que o leva a receber a palavra proveniente da memria pelo barramento de dados ou a
transferir a sua palavra interna para o barramento de dados.
Acabado este ciclo, o controlador:
1. retira o pedido

_

2. incrementa o Registo de Endereo para ficar a apontar para a posio


seguinte de memria;

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

306

Pede controlo
dos
barramentos

Transfere
uma palavra

Cede
controlo dos
barramentos

sim

Fim
Transfer.?
no

Perif.
pronto?

no

sim

Figura 14.28: Fluxograma de transferncia DMA por palavra.


3. decrementa o Contador de Acessos;
4. se o Contador de Acessos ficar a zero, activa a linha de Interrupo para
avisar o processador que a transferncia programada terminou.
Na figura est ilustrado um controlador com um canal de DMA, mas muitos controladores comerciais possuem mais que um canal. Nesse caso, apenas
so replicados os mdulos especificamente referentes a cada canal e o controlo
tem que gerir prioridades no acesso dos vrios perifricos para gerir pedidos
concorrentes.
Tipos de DMA
H vrios aspectos que permitem definir as caractersticas de DMA. Uma transferncia por DMA pode ser:
De memria para perifrico.

14.5. MODOS DE TRANSFERNCIA DE DADOS

307

Pede controlo
dos
barramentos

Transfere
uma palavra

sim

Fim
Transfer.?
no

Perif.
pronto?

sim

no
Cede
controlo dos
barramentos

Cede
controlo dos
barramentos

Perif.
pronto?

no

sim

Figura 14.29: Fluxograma de transferncia DMA por burst.


De perifrico para memria.
ou com alguma complexidade adicional e procedimentos diferentes:
De memria para memria.
De perifrico para perifrico.
As transferncias como as descritas atrs so do tipo simultneo. Neste tipo
de transferncia, numa transferncia de perifrico para memria, por exemplo, a leitura do perifrico e a escrita de memria so feitas em simultneo,
utilizando o barramento de dados.
As transferncia do tipo sequencial obrigam o controlador de DMA a realizar
sequencialmente a leitura da palavra a transferir da sua origem para um registo
interno ao controlador e a escrev-lo imediatamente a seguir no seu destino.

308

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

Pede controlo
dos
barramentos

Transfere
uma palavra

sim

Fim
Transfer.?
no

Cede
controlo dos
barramentos

Perif.
pronto?

no

sim

Figura 14.30: Fluxograma de transferncia DMA por bloco.


O primeiro tipo mais rpido e o controlador menos complexo. No segundo tipo, porm, permite-se transferir informao entre dois perifricos, ou
entre duas zonas de memria.
Por outro lado, as transferncia por DMA podem ser realizadas em 3 modos
diferentes: modo Palavra, modo Rajada e modo Bloco.
No modo de transferncia por palavra (em ingls, word), cada ciclo de DMA
usado para transferir uma palavra aps o que o controlo do barramento
devolvido UCP, como descrito pelo fluxograma de Figura 14.28.
Na transferncia por rajada (em ingls, burst), um ciclo de DMA usado
para transferir uma palavra aps o que, a haver mais palavras prontas para ser
transmitidas, se d incio a uma nova transferncia. O controlo do barramento
s devolvido UCP quando no houver mais dados para transmitir. Este
comportamento est representado no fluxograma da Figura 14.29.
Na transferncia por bloco (em ingls, block), quando arranca uma transferncia o controlador DMA permanece com controlo sobre os barramentos at
ser transferido o total das palavras para que foi programado, independentemente de entre cada par de palavras o perifrico estar ou no pronto. Usa-se
este modo para transferir dados de e para perifricos muito rpidos. A Figura 14.30 descreve este modo de transfererncia.

14.5. MODOS DE TRANSFERNCIA DE DADOS

309
Endereos

Dados

MRD/MWR

UCP

Memria
Primria
BUS_REQUEST

Processador
Entradas/Saidas

BUS_GRANT

Endereos
Dados
Interrupao
IORD/IOWR

Perifrico A

Perifrico B

...

Figura 14.31: Interligao de um processador de entradas/sadas.

14.5.4 Transferncia usando um Processador de Entrada/Sada


As transferncias DMA permitem libertar a UCP do processo de copiar dados de perifricos para memria ou vice-versa. Um processador de entradas/sadas tem o mesmo objectivo, com a flexibilidade adicional de ser facilmente programvel.
A interligao de um processador de entradas/sadas apresentada na Figura 14.31. Como se pode observar pela figura, os perifricos do sistema comunicam todos com o processador de entradas/sadas. Este est ligado aos
barramentos da memria do sistema, mas, em funcionamento normal, estes
so controlados pela UCP. Tal como o controlador DMA, o processador de entradas/sadas s pode utilizar estes barramentos depois de ter pedido autorizao, e esta ter sido concedida, UCP.
A vantagem adicional do processador de entradas/sadas a de, tal como
um processador genrico, executar programas. O conjunto de instrues assembly que estes processadores executam pode ser mais reduzido que o de um
processador genrico, mas, em geral, possuem instrues especficas para leitura e escrita de dados de diferentes fontes. Assim, este processador pode no
s transferir informao de um perifrico para memria, ou vice-versa, mas
pode realizar por si algum tipo de processamento desta informao, reduzindo
ainda mais o peso do sistema de entradas/sadas na UCP.
Tal como o controlador DMA, o processador de entradas/sadas funciona
normalmente como escravo da UCP. Para alm do processador de entradas/sadas ter que pedir autorizao para aceder aos barramentos com a memria,
a UCP que define partida qual o programa que o processador de entradas/sadas deve executar para controlar a transferncia de um dado perifrico.

14.5. MODOS DE TRANSFERNCIA DE DADOS

Glossrio

313

Você também pode gostar