Exercicios AOCO FEUP

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 106

Arquitetura e Organização de Computadores

Exercícios

António José Araújo


João Canas Ferreira
Bruno Lima

Mestrado Integrado em Engenharia Informática e Computação

Outubro de 2020
Conteúdo

1 Aritmética binária 1 6 Linguagem assembly 56


1.1 Exercícios resolvidos . . . . . . . 1 6.1 Exercícios resolvidos . . . . . . . 56
1.2 Exercícios propostos . . . . . . . 7 6.2 Exercícios propostos . . . . . . . 62

7 Organização de um CPU 66
2 Vírgula flutuante 11
7.1 Exercícios resolvidos . . . . . . . 66
2.1 Exercícios resolvidos . . . . . . . 11 7.2 Exercícios propostos . . . . . . . 72
2.2 Exercícios propostos . . . . . . . 17
8 Memória Cache 75
3 Circuitos combinatórios 20 8.1 Exercícios resolvidos . . . . . . . 75
3.1 Exercícios resolvidos . . . . . . . 20 8.2 Exercícios propostos . . . . . . . 77
3.2 Exercícios propostos . . . . . . . 29
Soluções dos exercícios propostos 81
1 Aritmética binária . . . . . . . . 81
4 Circuitos sequenciais 35
2 Vírgula flutuante . . . . . . . . . 83
4.1 Exercícios resolvidos . . . . . . . 35
3 Circuitos combinatórios . . . . . 85
4.2 Exercícios propostos . . . . . . . 42 4 Circuitos sequenciais . . . . . . . 92
5 Linguagem assembly . . . . . . . 94
5 Desempenho 47 6 Organização de um CPU . . . . . 100
5.1 Exercícios resolvidos . . . . . . . 47 7 Memória Cache . . . . . . . . . . 101
5.2 Exercícios propostos . . . . . . . 52 8 Desempenho . . . . . . . . . . . . 103

Esta coletânea reúne exercícios resolvidos e propostos sobre a matéria lecionada em 2020/21 na
unidade curricular de Arquitetura e Organização de Computadores do 1º ano do Mestrado Inte-
grado em Engenharia Informática e Computação da Faculdade de Engenharia da Universidade
do Porto.
1 Aritmética binária

1.1 Exercícios resolvidos

Exercício 1
Realizar as conversões de base indicadas.

a) 7210 =?2 =?16 b) 25910 =?2 =?16 c) 11102 =?10 =?16

d) 100000,112 =?10 =?16 e) 1BEEF16 =?2

a) A conversão de decimal para qualquer base de representação pode ser feita por divisões
sucessivas pela base pretendida ou realizando a decomposição do número em potências dessa
base. Optando por este segundo processo, resulta

7210 = 64 + 8 = 26 + 23 = 1 × 26 + 0 × 25 + 0 × 24 + 1 × 23 + 0 × 22 + 0 × 21 + 0 × 20
= 10010002

Relativamente à conversão para hexadecimal, a forma mais simples de a realizar consiste em


considerar a representação binária e formar grupos de 4 bits, da direita para a esquerda, e
depois fazer a correspondência entre cada um desses grupos e o respetivo símbolo hexadeci-
mal.
100 1000 = 48H
4 8
Nota: O índice ’H’, tal como ’16’, indica uma representação em hexadecimal.

b)
25910 = 256 + 2 + 1 = 28 + 21 + 20 = 1000000112
1000000112 = 1 0000 0011 = 103H
1 0 3

c)
11102 = 23 + 22 + 21 = 1410
1110 = EH
E

Arquitetura e Organização de Computadores Pág. 1 de 104


Aritmética binária — Exercícios resolvidos

d)
100000,112 = 25 + 2−1 + 2−2 = 32,7510
Como se trata de um número fracionário, na conversão de binário para hexadecimal, os
grupos de 4 bits formam-se a partir da vírgula.

100000,112 = 10 0000, 1100 = 20,CH


2 0 C

e)
1BEEFH = 1 B E E F = 110111110111011112
0001 1011 1110 1110 1111

Exercício 2
Efetue as seguintes operações aritméticas binárias, considerando os operandos representa-
dos como números sem sinal, isto é, números positivos.

a) 101110 + 100101 b) 1110010 − 1101101

c) 1001011 × 11001 d) 1101000 ÷ 100

As regras de cálculo são idênticas às regras usadas em base 10.

a)
101110
+100101
1010011

b)
01 0
1110010
−1101101
101

c)
1001011
×11001
1001011
1001011
+1001011
11101010011

d) Nesta divisão ocorre uma situação particular: o divisor é uma potência de 2 (1002 = 22 = 4).
Nestas circunstâncias, o quociente pode ser obtido deslocando os bits do dividendo n posições
para a direita, o que corresponde a subtrair n ao expoente de cada potência de base 2 da
decomposição do dividendo. Neste exercício n = 2, pelo que, 1101000 ÷ 100 = 110102 .

Arquitetura e Organização de Computadores Pág. 2 de 104


Aritmética binária — Exercícios resolvidos

Exercício 3
Represente os seguintes números decimais em sinal e grandeza e em complemento para 2
com 6 bits.

a) +12 b) −12 c) −1 d) +32

a) 12 = 8 + 4 = 11002

• Sinal e grandeza: sendo o número positivo, o bit de sinal é 0; a grandeza, escrita em 5


bits, é 01100. Assim, 12 = 0011002 .
• Complemento para 2: a representação de um número positivo em complemento para
2 é a mesma do número sem sinal (binário puro), respeitando porém a largura de
representação. Portanto, 12 = 0011002 .

b) A grandeza de −12 é 12 = 11002 .

• Sinal e grandeza: sendo o número negativo, o bit de sinal é 1; a grandeza é codificada


com 5 bits, 01100. Assim, −12 = 1011002 .
• Complemento para 2:
A representação de um número negativo em complemento para 2 pode ser obtida a
partir da representação binária do simétrico do número. Para tal, copiam-se todos os
bits da direita para a esquerda até encontrar o primeiro 1, que ainda é copiado, e a
partir daí complementam-se os restantes bits. Embora existam outros processos, este é
um processo expedito.
Assim, partindo de 12 = 0011002 obtém-se −12 = 1101002 .

c) • Sinal e grandeza: −1 = 1000012 .


• Complemento para 2: tendo em consideração o que foi descrito na alínea anterior,
1 = 0000012 , pelo que −1 = 1111112 .

d) O número em causa é 32 = 25 = 1000002 .

• Sinal e grandeza: a grandeza de 32 não se consegue codificar com apenas 5 bits, pelo
que o valor 32 não é representável no formato pretendido.
• Complemento para 2: o valor 32 também não é representável com 6 bits; é um número
positivo e no entanto 1000002 representa um número negativo (MSB=1).

Com 6 bits, o maior número representável é 26−1 − 1 = 31.

Arquitetura e Organização de Computadores Pág. 3 de 104


Aritmética binária — Exercícios resolvidos

Exercício 4
Considere a representação binária dos valores C116 e A716 com 8 bits.

a) Indique o valor decimal correspondente, admitindo que são interpretadas como núme-
ros:

tsk[r])
positivos; tsk[r])
em sinal e grandeza;
tsk[r])
em complemento para dois.

b) Indique a gama de valores representáveis considerando a forma complemento para 2.

c) Admitindo que a referida representação se encontra em complemento para dois, efetue


a sua adição em binário e comente o resultado.

a) C116 = 110000012 e A716 = 101001112

i)
110000012 = 27 + 26 + 20 = 128 + 64 + 1 = 193

101001112 = 27 + 25 + 22 + 21 + 20 = 128 + 32 + 4 + 2 + 1 = 167


ii)
1 1000001 = −65
− 26 + 20

1 0100111 = −39
− 25 + 7
iii) Os valores são ambos negativos.
compl. 2
110000012 −→ 001111112 = 63

Este é o valor simétrico do número a identificar. Logo, 110000012 interpretado em


complemento para 2, resulta no decimal −63.
compl. 2
101001112 −→ 010110012 = 89

Da mesma forma, 101001112 interpretado em complemento para 2, resulta no decimal


−89.

b) Com 8 bits conseguem escrever-se 28 = 256 números. Considerando que metade são números
negativos e a outra metade corresponde a números positivos, incluindo o 0, resulta o seguinte
intervalo de representação: [−128; +127]. Ao contrário do que sucede em sinal e grandeza, o
0 só tem uma representação.
De forma mais genérica, em complemento para 2, a gama de representação correspondente
a n bits é:
[−2n−1 ; +2n−1 − 1]

Arquitetura e Organização de Computadores Pág. 4 de 104


Aritmética binária — Exercícios resolvidos

c) A soma faz como para números sem sinal, ignorando o transporte a partir do bit mais
significativo.
11000001
+10100111
101101000
O resultado encontrado (011010002 ) está incorreto, porque a adição de dois números negati-
vos não pode resultar num número positivo. Ocorre portanto, overflow.
Pode confirmar-se esta conclusão em decimal: (−63) + (−89) < −128, isto é, a soma não é
representável com 8 bits.

Exercício 5
Admitindo que A = 110012 e B = 111012 se encontram representados em complemento
para 2 com 5 bits, calcule A + B e indique, justificando, se ocorre overflow.

Efetuando os cálculos:
11001
+11101
110110
Como se trata de uma adição em complemento para 2, o carry que ocorreu ao somar os bits
mais significativos deve ignorar-se. A ocorrência deste carry não deve ser interpretada como
ocorrência de overflow. Logo, A + B = 10110.
O resultado encontrado é válido no formato especificado, pois não ocorre overflow, porque da
adição de dois números negativosresultou um número negativo.

Exercício 6
Considere dois números binários com 6 bits, M = 1011002 e N = 1100102 . M está
representado em sinal e grandeza e N está representado em complemento para 2.

a) Escreva M em formato hexadecimal e N em formato decimal.

b) Indique, justificando, qual dos números tem maior grandeza.

c) Mostre que em complemento para 2 a operação M + N não produz overflow.

a) A conversão para hexadecimal é direta:

M = 10 1100 = 2CH
2 C

Como N está em complemento para 2 e é negativo, −N = 001110 = 14, pelo que N = −14.

b) Como M está definido em sinal e grandeza e são usados 6 bits, a grandeza é dada pelos 5
bits menos significativos.
|M | = 01100 (= 1210 )

Arquitetura e Organização de Computadores Pág. 5 de 104


Aritmética binária — Exercícios resolvidos

Quanto a N , conclui-se da alínea anterior que


|N | = −N = 01110 (= 1410 )
Conclusão: N é o número que possui maior grandeza.
c) O número M está definido em sinal e grandeza e é negativo, pelo que deve ser representado
em complemento para 2 antes de ser operado.
compl. 2
−M = 001100 −→ M = 110100
N já se encontra em complemento para 2, pelo que se pode então calcular M + N :
110100
+110010
1100110
Não há overflow, pois os operandos são negativos e o resultado encontrado também é negativo.

Exercício 7
Os valores X = 101111002 e Y = 101001102 estão representados com 8 bits. Determine
o menor número de bits necessário para representar corretamente X + Y , supondo que os
operandos estão representados em:

a) sinal e grandeza; b) complemento para 2.

a) Representação em sinal e grandeza:


X = 1 0111100 e Y = 1 0100110
S G S G

Para calcular X + Y é necessário somar as grandezas de X e Y , operação esta realizada em


7 bits.
0111100
+0100110
1100010
A grandeza resultante é representável em 7 bits. Como tal, e tendo em consideração o bit de
sinal, o menor número de bits necessário para a representação de X + Y em sinal e grandeza
é 8.
b) Representação em complemento para 2:
X+Y: 10111100
+10100110
101100010

Estão a somar-se dois números com o mesmo sinal (negativos), mas o resultado alcançado
com 8 bits apresenta sinal diferente (positivo). Quer isto dizer que ocorre overflow ao rea-
lizar a operação com 8 bits. Portanto, para que X + Y seja corretamente representado em
complemento para 2, o número mínimo de bits a considerar deverá ser 9.

Arquitetura e Organização de Computadores Pág. 6 de 104


Aritmética binária — Exercícios propostos

Exercício 8
Considere a representação em complemento para 2 dos valores X e Y indicada:
X = 1100102 e Y = 1010112

a) Determine o valor decimal de X e Y .

b) Calcule X − Y e X + Y . Comente os resultados.

a) X e Y são negativos, pelo que podem obter-se os números simétricos calculando o comple-
mento para 2:
−X = 0011102 = 23 + 22 + 21 = 14
−Y = 0101012 = 24 + 22 + 20 = 21

Logo, X = −14 e Y = −21.

b) A diferença pode ser calculada pela adição do simétrico:

X − Y = X + (−Y ) : 110010
+010101
1000111

Não ocorre overflow, porque os operandos têm sinais opostos. O resultado é por isso correto.

X +Y : 110010
+101011
1011101

Ocorre overflow, porque os operandos têm o mesmo sinal e o resultado tem sinal oposto. Por
este motivo, o resultado é errado, pois não é representável com os 6 bits considerados.

1.2 Exercícios propostos


Exercício 9
Em cada alínea, considere o número dado e represente-o nos sistemas de numeração indicados.

a) 25610 =?2 =?16 b) 204710 =?2 =?16 c) 24,2510 =?2 =?16

d) 4,210 =?2 =?16 e) 100002 =?10 =?16 f) 100,0012 =?10 =?16

g) 1E16 =?2 =?10 h) ABCD16 =?10 =?2 i) AB,C16 =?10 =?2

j) 111010 =?16

Arquitetura e Organização de Computadores Pág. 7 de 104


Aritmética binária — Exercícios propostos

Exercício 10
Efetue as seguintes operações aritméticas binárias, considerando os operandos representados
como números sem sinal, isto é, números positivos.

a) 110101 + 11001 b) 101,01 + 100,111 c) 101110 − 100101


d) 1000010 − 101101 e) 11011101 − 1100011 f) 11011101 − 11000,11
g) 1011 × 100

Exercício 11
Considere os números decimais +3, +2 e −3. Nas alíneas seguintes admita a representação em
sinal e grandeza com 4 bits.

a) Escreva os números em binário.


b) Calcule 3 + 2 e 2 + (−3).
c) Calcule 3 + 14 e comente o resultado.

Exercício 12
Enumere os valores decimais que se podem representar com 4 bits usando as representações em
sinal e grandeza e em complemento para 2. Em ambos os casos, indique a gama de representação
na forma de um intervalo, relacionando os valores extremos (maior positivo e menor negativo)
com o número de bits.

Exercício 13
Recorrendo a 8 bits, represente em sinal e grandeza e em complemento para 2, os seguintes
números decimais:
a) 18 b) 49 c) −49
d) −3 e) −100 f) 115
g) −127 h) −128

Exercício 14
Considere os números M = 3316 e N = 3310 representados por 8 bits.
a) Calcule M + N em binário, supondo que M e N são números sem sinal.
b) Admitindo que os valores estão representados em complemento para 2, diga se ocorre overflow
ao calcular N − M .

Exercício 15
Admitindo que P e Q representam dois números binários em complemento para dois, com 8 bits,
efetue a sua adição binária e interprete o resultado.

a) P = DEH e Q = A3H b) P = 8CH e Q = D3H c) P = 8CH e Q = 74H

Arquitetura e Organização de Computadores Pág. 8 de 104


Aritmética binária — Exercícios propostos

Exercício 16
Considere os seguintes números binários: X = 11100011 e Y = 01001000.

a) Indique o valor decimal de X e Y , para os casos de representação sem sinal e representação


em complemento para 2.

b) Calcule X + Y para ambas as representações de 8 bits e comente os resultados obtidos.

Exercício 17
Considere os números P = 11110102 e Q = 01000102 com 7 bits.

a) Escreva P em hexadecimal e Q em decimal.

b) Calcule P + Q e comente o resultado considerando que P e Q representam números:

tsk[r])
sem sinal; tsk[r])
em complemento para 2.

Exercício 18
Considere os números A = 110102 (com 5 bits) e B = 01010102 (com 7 bits).

a) Considere que A e B representam números sem sinal. Calcular A + B em 7 bits. Converter


o resultado para decimal.

b) Repita a alínea anterior, considerando agora que A e B representam números representados


em sinal e grandeza.

c) Repita a alínea anterior, considerando agora que A e B representam números representados


em complemento para dois.

Exercício 19
Considere os números M = 4AH e N = A4H representados em complemento para 2 com 8 bits.

a) Escreva M em binário.

b) Determine o valor decimal de N .

c) Calcule M − N e N − M , justificando se ocorre overflow.

Exercício 20
Considere os números S = 110010002 e T = 000100012 representados em complemento para 2
com 8 bits.

a) Determine o valor decimal de S e T .

b) Represente S e T em sinal e grandeza.

c) Calcule S + T em sinal e grandeza e comente o resultado encontrado.

Arquitetura e Organização de Computadores Pág. 9 de 104


Aritmética binária — Exercícios propostos

Exercício 21
Considere os números de 8 bits expressos, nas bases indicadas, por: X2 = 10111100, Y10 = 73 e
Z16 = 9E.

a) Escreva Y em hexadecimal e Z em binário.

b) Calcule X + Z, considerando que os operandos X e Z estão em complemento para 2, e


justifique se ocorre overflow.

c) Calcule o maior número N , em complemento para 2 com 8 bits, que adicionado a X conduz
a uma soma negativa.

Exercício 22
Suponha que se pretende calcular a seguinte expressão (em que x é um número inteiro):

y = x2 − 30x + 161

Considere x representado em binário com 5 bits (sem sinal).

a) Qual é a gama de valores de x?

b) Determinar o maior valor positivo de y.

c) Determinar o valor mais negativo de y?

d) Qual é o número mínimo de bits necessário para representar o valor com sinal y.

e) Representar os valores determinados nas alíneas b) e c) em complemento para dois.

Arquitetura e Organização de Computadores Pág. 10 de 104


2 Vírgula flutuante

2.1 Exercícios resolvidos

Exercício 1
A representação dos números reais X e Y no formato de precisão simples da norma IEEE
754 é a seguinte:
X: C3800000H Y : 001111111000000000000000000000002

a) Calcule o expoente real do número codificado em X.

b) Determine o sinal de X + Y .

c) Justifique a afirmação: Sendo X um número qualquer, X × Y = X.

a)
X = C3800000H = 1 10000111 000000000000000000000002
EX = 135
O expoente real de X é:
real
EX = 135 − 127 = 8
b) Como EY = 127, EX > EY . Então |X| > |Y | e portanto,
SX+Y = SX = 1
ou seja, X + Y é um número negativo.
c) Como EY = 127, EYreal = 0.
Porque os 23 bits da mantissa de Y são nulos, MY = 1,0.
Então, conclui-se que Y = 1 e por isso, para qualquer X, tem-se X × Y = X.

Exercício 2
Considere Y = 25,2510 e o número real X cuja representação em formato IEEE 754
(precisão simples) é BF40000016 .

a) Mostre a representação de Y no formato IEEE 754 (em binário).

b) Calcule X × Y , indicando claramente todos os passos efetuados.

Arquitetura e Organização de Computadores Pág. 11 de 104


Vírgula flutuante — Exercícios resolvidos

a) Pretende-se mostrar Y em binário no contexto da representação em vírgula flutuante com


precisão simples (32 bits).
Y = 25,2510 = 24 + 23 + 20 + 2−2 = 11001,012 = 1,1001012 × 24
• SY = 0
• EY = EYreal + 127 = 4 + 127 = 131 = 100000112
• MY = 1,1001012
Resulta então:
Y = 010000011100101 00 · · · 0}
| {z
17 0’s
b)
X = BF40000016 = 1 01111110 100 · · · 02
SX EX fX
Então:
• SX×Y = 1
• EX×Y = EX + EY − 127 = (131 + 126) − 127 = 130 = 100000102
• MX×Y : (em binário)

1,1001010 · · · 0
×1,1000000 · · · 0
0 0000000 · · · 0
···
11001010 · · · 0
11001010 · · · 0
10,01011110 ··· 0

A necessidade de normalizar a mantissa resultante leva ao incremento do expoente calculado:


MX×Y = 10,01011110 · · · 02 = 1,001011112 × 21

Assim, EX×Y = 13110 = 100000112 , pelo que


X × Y = 11000001100101111 00 · · · 0}
| {z
15 0’s

Exercício 3
Considere o número cuja representação em hexadecimal é C1200000H . Indique o valor
decimal correspondente, se assumir que o número está representado:

a) como inteiro sem sinal;

b) em complemento para 2;

c) em vírgula flutuante com precisão simples.

Arquitetura e Organização de Computadores Pág. 12 de 104


Vírgula flutuante — Exercícios resolvidos

a) A representação binária do número é:

C1200000H = 1100 0001 0010 0000 0000 0000 0000 00002

Interpretando este número como um inteiro sem sinal, o valor decimal correspondente é
determinado com base na posição que cada bit ocupa. Assim:

110000010010000000000000000000002 = 231 + 230 + 224 + 221


= 221 × (210 + 29 + 23 + 20 )
= 2 × 210 × 210 × (1024 + 512 + 9)
= 2097152 × 1545
= 324009984010

Nota: É admissível apresentar a solução na forma de uma soma de potências de 2.

b) C1200000H = 1100 0001 0010 0000 0000 0000 0000 00002


Interpretando este número dado em complemento para 2 e atendendo a que é um número
negativo (MSB=1), o decimal correspondente pode ser determinado depois de obter o si-
métrico correspondente. Este pode ser obtido por aplicação da regra prática que consiste
em copiar todos os bits da direita para a esquerda até ser encontrado o primeiro 1 e depois
complementar os restantes. Assim:

110000010010000000000000000000002
↓ ↓
−01111101110000000000000000000002

= 229 + 228 + 227 + 226 + 225 + 223 + 222 + 221


= 105486745610

Portanto, C1200000H representa -105486745610 em complemento para 2.

c) Assumindo o formato de vírgula flutuante, a interpretação do padrão de bits é:


31 30 23 22 0

1 10000010 01000000000000000000000
↓ ↓ ↓
S=− E = 130 M = 1,01

Como o expoente está representado em excesso 127, o expoente real é 3. Então, o número
decimal correspondente será:

−1,012 × 23 = −10102 = −1010

Arquitetura e Organização de Computadores Pág. 13 de 104


Vírgula flutuante — Exercícios resolvidos

Exercício 4
Sejam X e Y dois números reais, representados em vírgula flutuante com o formato de
precisão simples da norma IEEE 754 da seguinte forma:
X: 110000110000001100000000000000002
Y : 110000110111110000000000000000002

a) Mostre que X é um número inteiro.

b) Calcule o número Z que verifica a condição X + Z = 0.

c) Mostre que o expoente real de X + Y é 8.

a)
X = 1 10000110 000001100000000000000002
− EX = 134 MX = 1,0000011
O expoente real de X é:
real
EX = 134 − 127 = 7
Logo,
X10 = −1,00000112 × 27 = −100000112 = −13110

b)
X+Z=0 ⇔ Z = −X
Em termos de representação em vírgula flutuante

SZ = −SX
EZ = EX
MZ = MX

Logo,
Z = 0100001100000011 00 · · · 02
| {z }
16 0’s
c)
real
EX+Y = EYreal ≡ EX
real
=7
Contudo, ao somar as mantissas, o resultado pode não estar normalizado:

MX : 1,0000011
MY : +1,1111100
MX+Y 10,1111111 = 1,011111112 × 21

Logo, o expoente indicado inicialmente tem de ser incrementado, resultando


real
EX+Y =8

Arquitetura e Organização de Computadores Pág. 14 de 104


Vírgula flutuante — Exercícios resolvidos

Exercício 5
Os números reais X, Y e Z estão representados no formato de precisão simples da norma
IEEE 754.

a) Sendo X representado por 234567654328 , indique o seu sinal.

b) Complete, com os bits em falta, os campos da seguinte igualdade:

Y =+ ×23 = 001010 ... 0


1 bit 8 bits 23 bits

c) Qual é o número Z tal que o valor de Y ×Z é representado por 110000011001010 · · · 02 ?

a)
X = 234567654328 = |{z}
1 00111001
| {z } 01110111110101100011010
| {z }
↓ EX fX

X é negativo.
Note-se que a conversão de cada dígito octal origina 3 bits e por essa razão X2 devia possuir
33 bits. Porém, a representação de X2 em vírgula flutuante é constituída por 32 bits, que no
seu conjunto correspondem a X8 , pois o dígito mais significativo (2) pode escrever-se como
0102 ou 102 .

b)
Y >0 ⇒ SY = 0
real
EY = 3 ⇒ EY = EYreal + 127 = 130 = 100000102
fY = 0,00101 ⇒ MY = 1,001012

Daqui resulta

Y = +1,001012 × 23 = 0 10000010 001010...0


1 bit 8 bits 23 bits

c)
SY ×Z = − ⇒ SZ = −SY = −
EY ×Z = EY + EZ − 127 ⇔ 131 = 130 + EZ − 127 ⇔ EZ = 128
MY ×Z ≡ MY ⇒ MZ = 1,0

Logo,
Z = 1 10000000 00...0
SZ EZ fZ

Arquitetura e Organização de Computadores Pág. 15 de 104


Vírgula flutuante — Exercícios resolvidos

Exercício 6
Nesta questão, todos os números reais estão representados em vírgula flutuante (formato
de precisão simples da norma IEEE 754).

a) Determine o número X cuja representação é dada por


010000100001110100000000000000002 .

b) Considerando um segundo número Y em que os 23 bits da sua mantissa são nulos,


calcule:

i) a mantissa de X × Y ;
ii) o expoente de Y , sabendo que o expoente resultante de X × Y , representado nos
seus 8 bits, é 100000002 .

a)
X = 0 10000100 00111010000000000000000
+ EX = 132 MX = 1,0011101
O expoente real de X é:
real
EX = 132 − 127 = 5
Logo,
X10 = +1,00111012 × 25 = 100111,012 = 39,2510

b) i) Como os 23 bits da parte representável (parte fracionária) da mantissa são nulos,


conclui-se que MY = 1,fY = 1,0. Assim,

MX×Y = MX × MY = MX = 1,00111012

ii) O expoente do produto de dois números em vírgula flutuante é dado pela soma dos
expoentes dos operandos menos o excesso 127. O expoente assim calculado nem sempre
constitui o expoente definitivo do resultado, pois se o produto das mantissas não resultar
normalizado então o expoente deve ser ajustado de acordo com a normalização. Porém,
neste exercício não acontece tal situação porque é dito que MY = 1,0.
Assim,

EX×Y = EX + EY − 127
128 = 132 + EY − 127
EY = 123 (EYreal = −4)

Arquitetura e Organização de Computadores Pág. 16 de 104


Vírgula flutuante — Exercícios propostos

2.2 Exercícios propostos


Exercício 7
Considere que 110000011011000000000000000000002 é a representação de um número em vírgula
flutuante segundo a norma IEEE 754. Determine:
a) a mantissa do número; b) o expoente do número;
c) o valor decimal representado.

Exercício 8
Represente em vírgula flutuante, no formato de precisão simples (32 bits) da norma IEEE 754,
os seguintes números:
a) 31,25 b) −0,625 c) 0 d) 1026,5

Exercício 9
Considere a representação IEEE-754 de precisão simples. (Nota: use um conversor — por exem-
plo, http://www.h-schmidt.net/FloatConverter/IEEE754.html — para obter os números em
decimal).
a) Qual é o mais pequeno número positivo (normalizado) representável?
b) Qual é o maior número normalizado representável?
c) Qual é o maior número negativo (normalizado) representável?
d) Qual é o menor número normalizado representável?

Exercício 10
Considere uma representação em vírgula flutuante normalizada do tipo IEEE-754, com 8 bits
no total. O bit mais significativo representa o sinal e é seguido por um expoente de 3 bits
(representado por notação em excesso) e um significando de 4 bits.
a) Qual é o valor representado por 1 001 1101?
b) Qual é o valor representado por 0 101 1001?
c) Qual é a representação de 3/8 neste formato?

Exercício 11
Considere os números decimais A = 33 e B = −2,875.
a) Represente A e B em vírgula flutuante, no formato de IEEE 754 de 32 bits.
b) Efetue as operações seguintes em vírgula flutuante no formato de 32 bits:
tsk[r])
A+B tsk[r])
B−A tsk[r])
3×B
c) Represente os resultados das operações em decimal e verifique se correspondem ao valores
esperados.

Arquitetura e Organização de Computadores Pág. 17 de 104


Vírgula flutuante — Exercícios propostos

Exercício 12
Dois números V1 e V2 estão representados em vírgula flutuante no formato de 32 bits. Os seus
valores, expressos em hexadecimal, são:
V1 : 421D0000H V2 : C0000000H
Calcule:

a) −V2 b) V1 + V2 c) V2 − V1 d) V1 × V2

Exercício 13
Seja um número real X, cuja representação em vírgula flutuante (norma IEEE 754, com 32 bits)
é 3F400000H . Considere também Y = 11,62510 .

a) Apresente em binário a representação de Y no mesmo formato.

b) Calcule X + Y em vírgula flutuante, indicando claramente todos os passos efetuados.

Exercício 14
Considere a representação em vírgula flutuante, norma IEEE 754, com 32 bits. Sendo A um
número real, cuja representação nesse formato é 40400000H , e sendo B = −10,2510 :

a) apresente a representação binária de B no mesmo formato.

b) calcule A−B em vírgula flutuante, indicando claramente todos os passos efetuados. No final,
converta o resultado para decimal.

Exercício 15
Considere que S e T representam dois números em vírgula flutuante no formato de precisão
simples definido pela norma IEEE 754:
S: 110000010100000000000000000000002 T : 110000011011000000000000000000002

a) Indique a representação de S em hexadecimal.

b) Mostre como se realiza a adição de S e T , indicando claramente todos os passos efetuados.

Exercício 16
No formato de precisão simples da norma IEEE 754, os números X e Y são representados por
X: C3800000H e Y : 001111111000000000000000000000002 .
Das afirmações seguintes indique a correta, fundamentando a sua escolha.
A. O expoente real de X é 8.
B. X − Y é um número positivo.
C. O expoente real de X é 8 e Y é um número negativo.
D. X >Y.

Arquitetura e Organização de Computadores Pág. 18 de 104


Vírgula flutuante — Exercícios propostos

Exercício 17
Em aplicações de aprendizagem por computador tem vindo a tornar-se frequente o uso do formato
Bfloat16, que usa 8 bits para representar o expoente e 7 bits para a mantissa. São usadas as
regras gerais da IEEE 754 com arredondamento (no caso de empate, arredondar para o número
par representável mais próximo). Todos os números não-normalizados são tratados como zero.

a) Determinar o valor decimal do maior número representável.

b) Determinar o valor decimal do menor número positivo representável.

c) Determinar o resultado do cálculo (2,6 × 106 ) × (3,1 × 104 ) quando todos os números são
representados em Bfloat16. Comente o resultado.

Arquitetura e Organização de Computadores Pág. 19 de 104


3 Circuitos combinatórios

3.1 Exercícios resolvidos

Exercício 1
Simplifique algebricamente as seguintes funções booleanas usando teoremas da álgebra de
Boole.

a) F (A, B, C) = A·B + A + B + A·C.

b) F (A, B, C) = (A + B + C)·(A + B + C)·(A + B + C)·(A + B + C).

c) F (X, Y, Z) = X + X ·Z + X ·Y .

d) G(X, Y, Z) = X ·Y ·Z + X ·Y ·Z + X ·Y ·Z.

e) F (A, B, C) = A·(B + C) + B ·C.

a) F (A, B, C) = A·B + A + B + A·C


= A·B + A·B + A·C
= A·(B + B) + A·C
= A + A·C
= A·(1 + C)
= A

b) F (A, B, C) = (A + B + C)·(A +B + C)·(A + B + C)·(A + B + C)


=

(A + B) + (C ·C) · (A + B) + (C ·C)
= (A + B)·(A + B)
= B + A·A
= B

c) F (X, Y, Z) = X + X ·Z + X ·Y
= X ·(1 + Y ) + X ·Z
= X + X ·Z
= X +Z

Arquitetura e Organização de Computadores Pág. 20 de 104


Circuitos combinatórios — Exercícios resolvidos

d) G(X, Y, Z) = X ·Y ·Z + X ·Y ·Z + X ·Y ·Z
= X ·Y (Z + Z) + X ·Y ·Z
= Y ·(X + X ·Z)
= Y ·(X + Z)
= X ·Y + Y ·Z

e) F (A, B, C) = A·(B + C) + B ·C
= A·(B + C) + B ·C
= A·(B ·C) + B ·C ·(A + A)
= A·B ·C + A·B ·C + B ·C ·A + A·B ·C
= A·(B ·C + B ·C) + B ·C ·(A + A)
= A + B ·C

Exercício 2
Obtenha a tabela de verdade para cada uma das seguintes funções booleanas.

a) F (A, B, C) = (A + B)·(A + B + C)

b) F (X, Y, Z) = X ·Y + X ·Y ·Z

a) Se um termo soma é 0 então a função também é 0. Assim:

• se A=0 e B=1, então F =0;


• se A=0 e B=0 e C=1, então F =0.

Desta forma identificam-se as combinações das variáveis, isto é, as linhas da tabela de verdade
onde F =0, tal como apresentado. Nas restantes situações F =1.

A B C F
0 0 0 1
0 0 1 0 ←− A+B+C
0 1 0 0 ←− A+B
0 1 1 0 ←− A+B
1 0 0 1
1 0 1 1
1 1 0 1
1 1 1 1

b) Se um termo produto é 1 então a função também é 1. Assim:

• se X=1 e Y =0, então F =1;


• se X=0 e Y =1 e Z=0, então F =1.

Desta forma identificam-se as combinações das variáveis, isto é, as linhas da tabela de verdade
onde F =1, tal como apresentado. Nas restantes situações F =0.

Arquitetura e Organização de Computadores Pág. 21 de 104


Circuitos combinatórios — Exercícios resolvidos

X Y Z F
0 0 0 0
0 0 1 0
0 1 0 1 ←− X ·Y ·Z
0 1 1 0
1 0 0 1 ←− X ·Y
1 0 1 1 ←− X ·Y
1 1 0 0
1 1 1 0

Exercício 3
Escreva uma expressão booleana para as funções lógicas representadas pelas tabelas de
verdade indicadas.

a) x y f b) x y z f
0 0 1 0 0 0 1
0 1 0 0 0 1 1
1 0 0 0 1 0 1
1 1 1 0 1 1 0
1 0 0 1
1 0 1 1
1 1 0 0
1 1 1 0

A partir da tabela de verdade de uma função booleana podem retirar-se expressões algébricas
na forma de uma soma de produtos ou na forma de um produto de somas.
Para a expressão na forma de uma soma de produtos identificam-se as linhas da tabela de
verdade onde a função é 1 e forma-se um termo produto tal que nessa combinação das variáveis
da função o valor do produto seja 1 (igual ao valor da função). A expressão da função obtém-se
pela soma de todos os termos produto nestas condições.
Para a expressão na forma de um produto de somas identificam-se as linhas da tabela de
verdade onde a função é 0 e forma-se um termo soma tal que nessa combinação das variáveis da
função o valor da soma seja 0 (igual ao valor da função). A expressão da função obtém-se pelo
produto de todos os termos soma nestas condições.
A partir destas expressões podem obter-se outras equivalentes por simplificação baseada em
teoremas da álgebra de Boole.

a) Optando pela forma soma de produtos e procedendo da forma descrita, os termos produto
que definem a função são os indicados.

x y f
0 0 1 −→ x·y
0 1 0
1 0 0
1 1 1 −→ x·y

Arquitetura e Organização de Computadores Pág. 22 de 104


Circuitos combinatórios — Exercícios resolvidos

Logo, f (x, y) = x·y + x·y.

b) Optando pela forma produto de somas e procedendo da forma descrita, os termos soma que
definem a função são os indicados.

x y z g
0 0 0 1
0 0 1 1
0 1 0 1
0 1 1 0 −→ x+y+z
1 0 0 1
1 0 1 1
1 1 0 0 −→ x+y+z
1 1 1 0 −→ x+y+z

Logo, g(x, y, z) = (x + y + z)·(x + y + z)·(x + y + z).

Exercício 4
Considere a função booleana F (X, Y, Z) com

F (X, Y, Z) = X ·Y ·Z + X ·Y ·Z + X · Y ·Z + X ·Y ·Z + X ·Y ·Z + X ·Y ·Z

a) Simplifique a expressão de F (X, Y, Z).

b) Construa a tabela de verdade da função.

c) Indique a expressão de F (X, Y, Z) na forma de um produto de somas.

d) Obtenha um circuito lógico que realiza a função F (X, Y, Z), usando apenas portas
lógicas do tipo NOR.

a) F (X, Y, Z) = X ·Y ·Z + X ·Y ·Z + X ·Y ·Z + X ·Y ·Z + X ·Y ·Z + X ·Y ·Z
= X ·Y ·(Z + Z) + X ·Y ·Z + X ·Y ·(Z + Z) + X ·Y ·Z
= X ·Y + X ·Y + X ·Y ·Z + X ·Y ·Z
= Y + X ·Y ·Z + X ·Y ·Z
= Y + X ·Z + X ·Z

b) Como a expressão de F está na forma de uma soma de produtos, cada termo produto
identifica combinações das entradas X, Y, Z onde F = 1. Ao lado da tabela de verdade
indicam-se esses termos.

Arquitetura e Organização de Computadores Pág. 23 de 104


Circuitos combinatórios — Exercícios resolvidos

X Y Z F
0 0 0 1 ←− Y e X ·Z
0 0 1 1 ←− Y
0 1 0 1 ←− X ·Z
0 1 1 0
1 0 0 1 ←− Y
1 0 1 1 ←− Y e X ·Z
1 1 0 0
1 1 1 1 ←− X ·Z

c) Na tabela de verdade identificam-se os termos soma para os quais F =0. São eles

X +Y +Z e X +Y +Z

resultando
F (X, Y, Z) = (X + Y + Z)·(X + Y + Z)

d) Considerando a expressão da função na forma de um produto de somas, pode obter-se uma


expressão equivalente apenas com somas lógicas negadas, cada uma das quais será realizada
por uma porta NOR no circuito lógico pretendido. A negação das variáveis pode também
realizar-se através de um NOR aplicando a variável a negar a ambas as entradas do NOR.

F (X, Y, Z) = (X + Y + Z)·(X + Y + Z) = X + Y + Z + X + Y + Z

O circuito resultante é:

Y F

Exercício 5
O circuito da figura implementa uma função F (A, B, C).
1
C

B F

a) Deduza uma expressão da função lógica realizada pelo circuito, indicando-a na forma
de um produto de somas.

b) Escreva F (A, B, C) como uma soma de produtos simplificada.

Arquitetura e Organização de Computadores Pág. 24 de 104


Circuitos combinatórios — Exercícios resolvidos

a) A expressão da função realizada pelo circuito lógico pode obter-se através das expressões que
resultam da saída de cada porta lógica como funções das entradas do circuito.
F (A, B, C) = A·B ·(1 ⊕ C) + A·B
= A·B ·C + A·B
= A·B ·C ·A·B
= (A + B + C)·(A + B)

b) F (A, B, C) = (A + B + C)·(A + B)
= A·A + A·B + A·B + B + A·C + B ·C
= (A + A + 1 + C)·B + A·C
= B + A·C

Exercício 6
Pretende-se projetar um circuito capaz de detetar se um número com 3 bits n2 n1 n0 apli-
cado à sua entrada está compreendido entre 2 e 5 (inclusive). A saída do circuito é uma
função de 3 variáveis, G(n2 , n1 , n0 ), sendo G = 1 para os números nas condições indicadas
e G = 0 no caso contrário. Defina o comportamento do circuito que realiza G na forma
de uma tabela de verdade.

Para os números compreendidos entre 2 e 5, formados em binário por n2 n1 n0 , G = 1. Para


os restantes G é 0. Assim resulta a tabela de verdade seguinte:

n2 n1 n0 G
0 0 0 0
0 0 1 0
0 1 0 1
0 1 1 1
1 0 0 1
1 0 1 1
1 1 0 0
1 1 1 0

Arquitetura e Organização de Computadores Pág. 25 de 104


Circuitos combinatórios — Exercícios resolvidos

Exercício 7
A figura mostra um circuito, baseado num multiplexador de 8 para 1, que realiza uma
função F (W, X, Y, Z).

MUX8:1

Z D0
D1
D2
D3
D4 Y F
D5
0 D6
1 D7
S2 S1 S0

W X Y

a) Defina F (W, X, Y, Z) através de uma tabela de verdade.

b) Represente F (W, X, Y, Z) através de uma expressão algébrica.

a) As variáveis W , X e Y determinam a entrada do multiplexador que é selecionada. O valor


nela aplicado surge na saída do circuito. A tabela de verdade pretendida obtém-se conside-
rando todas as combinações das variáveis e consequentes valores da função.

W X Y Z F
0 0 0 0 0
0 0 0 1 1
0 0 1 0 1
0 0 1 1 0
0 1 0 0 0
0 1 0 1 0
0 1 1 0 0
0 1 1 1 0
1 0 0 0 0
1 0 0 1 1
1 0 1 0 0
1 0 1 1 1
1 1 0 0 0
1 1 0 1 0
1 1 1 0 1
1 1 1 1 1

b) Considere-se a forma soma de produtos nesta resolução. Embora não seja requerido no
enunciado vai proceder-se à simplificação da expressão.
F = W ·X ·Y ·Z + W ·X ·Y ·Z + W ·X ·Y ·Z + W ·X ·Y ·Z + W ·X ·Y ·Z + W ·X ·Y ·Z
= W ·X ·Y ·Z + W ·X ·Y ·Z + W ·X ·Z ·(Y + Y ) + W ·X ·Y ·(Z + Z)
= W ·X ·Y ·Z + W ·X ·Y ·Z + W ·X ·Z + W ·X ·Y
= X ·(Z ·(W ·Y + W ) + W ·Y ·Z) + W ·X ·Y
= X ·(Y ·Z + W ·Z + W ·Y ·Z) + W ·X ·Y
= X ·Y ·Z + W ·X ·Z + W ·X ·Y ·Z + W ·X ·Y

Arquitetura e Organização de Computadores Pág. 26 de 104


Circuitos combinatórios — Exercícios resolvidos

Exercício 8
Seja a função booleana S = (A + B + C) · (A + B + C).

a) Represente S através de uma tabela de verdade.

b) Realize a função S recorrendo ao multiplexador de 8 para 1 da figura.

MUX8:1

D0
D1
D2
D3
D4 Y
D5
D6
D7
(M S B )
S2 S1 S0

a) A B C S b) Efetuar as seguintes ligações:


0 0 0 0 D0 = 0, D1 = D2 = 1, D3 = 0,
0 0 1 1 D4 = D5 = D6 = D7 = 1,
0 1 0 1 S2 = A, S1 = B, S0 = C e Y = F .
0 1 1 0
1 0 0 1
1 0 1 1
1 1 0 1
1 1 1 1

Exercício 9
Pretende-se realizar um circuito capaz de comparar duas quantidades positivas A e B,
representadas em binário com 2 bits cada uma (a1 a0 e b1 b0 ), e produzir duas saídas, X e
Y . A saída X deve ser 1 se e só se A = B, e a saída Y deve ser 1 se e só se A > B.

a) Construa uma tabela de verdade de X e Y como funções de a1 , a0 , b1 e b0 .

b) Obtenha um circuito que realize a função Y .

c) Mostre como, com um mínimo de esforço, poderia acrescentar a este circuito uma
saída Z que fosse 1 quando A < B.

d) Admitindo que tinha disponíveis vários circuitos como o descrito atrás, mostre como
os poderia utilizar para realizar a comparação de quantidades de 6 bits cada, isto é,
de modo a detetar as situações de A = B e A > B quando A = a5 a4 a3 a2 a1 a0 e
B = b5 b4 b3 b2 b1 b0 .

Arquitetura e Organização de Computadores Pág. 27 de 104


Circuitos combinatórios — Exercícios resolvidos

a) a1 a0 b1 b0 X Y
0 0 0 0 1 0
0 0 0 1 0 0
0 0 1 0 0 0
0 0 1 1 0 0
0 1 0 0 0 1
0 1 0 1 1 0
0 1 1 0 0 0
0 1 1 1 0 0
1 0 0 0 0 1
1 0 0 1 0 1
1 0 1 0 1 0
1 0 1 1 0 0
1 1 0 0 0 1
1 1 0 1 0 1
1 1 1 0 0 1
1 1 1 1 1 0

b) Y = a1 ·a0 ·b1 ·b0 + a1 ·a0 ·b1 + a1 ·a0 ·b1 + a1 ·a0 ·b1 ·b0
= a1 ·a0 ·b1 ·b0 + a1 ·b1 + a1 ·a0 ·b1 ·b0
= a1 ·a0 ·b1 ·b0 + a1 ·(b1 + a0 ·b1 ·b0 )
= a1 ·a0 ·b1 ·b0 + a1 ·(b1 + a0 ·b0 )
= a1 ·b1 + a1 ·a0 ·b0 + a1 ·a0 ·b1 ·b0
= a1 ·b1 +·a0 ·b0 (a1 + a1 ·b1 )
= a1 ·b1 +·a0 ·b0 (a1 + b1 )
= a1 ·b1 + a0 ·b1 ·b0 + a1 ·a0 ·b0

Desenhar o circuito a partir da expressão encontrada.

c) A função pretendida define-se como


Z = X ·Y

d) Usar 3 circuitos comparadores de 2 bits idênticos aos da alínea a), combinando as saídas da
seguinte forma:
X = X1 ·X2 ·X3 e Y = Y3 + X3 ·Y2 + X3 ·X2 ·Y1
em que:

• X1 é a saída X do comparador de a1 a0 com b1 b0 ;


• X2 é a saída X do comparador de a3 a2 com b3 b2 ;
• X3 é a saída X do comparador de a5 a4 com b5 b4 ;
• Y1 , Y2 e Y3 são as saídas Y dos comparadores correspondentes.

Arquitetura e Organização de Computadores Pág. 28 de 104


Circuitos combinatórios — Exercícios propostos

3.2 Exercícios propostos


Exercício 10
Simplifique algebricamente as seguintes funções booleanas utilizando teoremas da álgebra de
Boole.
a) F (A, B, C, D, E) = A·B ·C + C ·D·E + A·B + A·B ·C ·D·E + A·B ·D·E + C ·D·E.

b) F (A, B, C) = A + A·B + A·C.


c) G(A, B, C) = A·B ·C + A·B ·C + A·B ·C.

d) F (A, B, C, D) = B ·C ·D + A·(C + B) + A·C ·D + A·B ·C ·D.

e) F (W, X, Y, Z) = W ·(X + Y ·(Z + W )).


f) F (A, B, C, D) = A·B ·C + B ·C ·D + A·B ·C ·D + A·B ·C ·D.

Exercício 11
Obtenha a tabela de verdade para cada uma das seguintes funções booleanas.
a) F (A, B, C) = A·B + A·C.
b) G(X, Y, Z) = (X + Z)·(X + Y + Z).

c) F (W, X, Y, Z) = W ·X ·(Y + Z).

Exercício 12
Considere a função F (X, Y, Z) = X ·Y + X ·Y ·Z + X ·Z.
a) Indique a respetiva tabela de verdade.
b) Escreva F (X, Y, Z) como um produto de somas.
c) Desenhe o circuito lógico correspondente.

Exercício 13
Considere o circuito lógico apresentado na figura.

a) Deduza a expressão booleana simplificada correspondente à saída Y do circuito.


b) Mostre que a saída Z pode ser definida por Z(A, B, C) = B + C.

Arquitetura e Organização de Computadores Pág. 29 de 104


Circuitos combinatórios — Exercícios propostos

Exercício 14
Considere a função booleana F (A, B, C) = A + B + C + A·B ·C.

a) Indique a expressão de F (A, B, C) como uma soma de produtos simplificada.

b) Construa a tabela de verdade da função F (A, B, C).

c) Obtenha um circuito lógico que realize a função F (A, B, C).

Exercício 15
Considere as seguintes funções booleanas:

F = X ·Y + X ·Y ·Z e G = (A + B + C)·(A + B + D)·(B + C + D)·(A + B + C + D).

a) Represente F (X, Y, Z) através de uma tabela de verdade e obtenha uma expressão na forma
de um produto de somas.

b) Represente G(A, B, C, D) através de uma tabela de verdade e obtenha uma expressão na


forma de uma soma de produtos (não simplificada).

Exercício 16
Seja a função booleana G(A, B, C) = A·C + B·A·C + B·C·A. Exprima G(A, B, C) na forma de
um produto de somas simplificado.

Exercício 17
A figura seguinte mostra um circuito que realiza uma função G(X, Y, S). Além de portas lógicas,
o circuito inclui um bloco, M, que realiza a função F (A, B, S) definida por: F = A se S = 0 e
F = B se S = 1.
X A
Y
F(A, B, S)

B M G(X, Y, S)

a) Exprima a função F numa tabela de verdade.

b) Indique uma expressão simplificada para F (A, B, S).

c) O circuito que realiza a função F é um multiplexador (multiplexer ) de 2 para 1. Mostre


como é constituído.

d) Encontre uma expressão simplificada do tipo soma de produtos para a função G(X, Y, S)
realizada pelo circuito.

e) Mostre que o circuito seguinte, usando apenas portas NAND, realiza a função G.

Arquitetura e Organização de Computadores Pág. 30 de 104


Circuitos combinatórios — Exercícios propostos

S G

Exercício 18
Considere um circuito que apresenta na saída S o valor lógico 1 sempre que na sua entrada o
número positivo de 4 bits, A3 A2 A1 A0 , é maior que 5 e múltiplo de 4.
a) Construa a tabela de verdade da função S(A3 , A2 , A1 , A0 ).
b) Obtenha uma expressão para S(A3 , A2 , A1 , A0 ) e simplifique-a.

Exercício 19
Um circuito elementar utilizado na construção de circuitos digitais para aritmética binária é o
somador completo (full-adder ) representado na figura. O somador tem 2 saídas Co e S que
representam em binário a soma dos valores (0 ou 1) presentes nas entradas A, B e Ci.

A B
Co Ci
S

a) Construa a tabela de verdade correspondente às funções S(A, B, Ci) e Co(A, B, Ci).


b) Escreva a expressão das funções S(A, B, Ci) e Co(A, B, Ci) na forma de uma soma de pro-
dutos.
c) Verifique que o circuito lógico da figura seguinte realiza as funções S(A, B, Ci) e Co(A, B, Ci).

A
B S
Ci

Co

d) Considere agora um somador de 4 bits, constituído por 4 somadores completos, como mostra
a figura.

Arquitetura e Organização de Computadores Pág. 31 de 104


Circuitos combinatórios — Exercícios propostos

A3 B3 A2 B2 A1 B1 A0 B0

A B w A B w A B w A B
3 2 1
Co Co Ci Co Ci Co Ci Co Ci Ci
S S S S

S3 S2 S1 S0

Identifique na figura o valor de cada um dos sinais admitindo que os valores a somar, repre-
sentando números positivos, são A = A3 A2 A1 A0 = 1010 e B = B3 B2 B1 B0 = 1110.

Exercício 20
Pretende-se construir um circuito combinatório para comparar dois números de 2 bits, sem sinal,
A = A1 A0 e B = B1 B0 . A saída M AIOR é 1 quando A for maior do que B e 0 no caso contrário.
A1
A0
A>B? MAIOR
B1
B0

a) Expresse a função do circuito numa tabela de verdade.


b) Escreva uma expressão da função M AIOR(A1 , A0 , B1 , B0 ).

Exercício 21
O circuito da figura contém um comparador de magnitude de 2 bits e 2 multiplexadores de 2 para
1. As entradas do circuito formam dois números positivos, de 2 bits, A = A1 A0 e B = B1 B0 .
As saídas definem um número, também com 2 bits, M = M1 M0 . Analise o circuito e identifique
a sua funcionalidade.
MUX2_1
I0
Y
I1
S

MUX2_1
I0 M1
Y M0
I1
S
COMP2
A1
A0
A>B
B1
B0

Arquitetura e Organização de Computadores Pág. 32 de 104


Circuitos combinatórios — Exercícios propostos

Exercício 22
Um multiplexador com n entradas de seleção pode ser usado para implementar qualquer função
lógica de n variáveis. Na figura mostra-se o símbolo de um multiplexador de 4 para 1, o qual
possui 2 entradas de seleção.
MUX4:1

D0

D1
Y
D2

D3

S1 S0

a) Mostre como implementar o produto lógico de duas variáveis recorrendo ao multiplexador.

b) Realize a função F (X, Y ) = X ·Y + X ·Y com o multiplexador apresentado.

c) Verifique, exemplificando, que é igualmente possível implementar funções de três variáveis.


Sugestão: represente uma função de 3 variáveis através de uma tabela de verdade e, para
cada combinação das variáveis, relacione o valor da função com uma dessas variáveis.

Exercício 23
A figura mostra um circuito constituído por um descodificador binário de 2 para 4 e um conjunto
de 3 lâmpadas. O estado das lâmpadas é controlado pelas entradas A e B do circuito, ou seja,
Lvm , Llj e Lvr são funções de A e B. Admita que para ligar uma lâmpada é necessário que a
saída do descodificador que a controla tenha o valor lógico 1.
DEC2_4
Lvm
Y0
B I0 Llj
Y1
Lvr
A I1 Y2
Y3

a) Indique o estado de cada lâmpada se AB = 01 e AB = 11.

b) Determine o valor das entradas de modo a ligar, simultaneamente, as lâmpadas verde (Lvr =
1) e laranja (Llj = 1).

Exercício 24
O descodificador binário n-para-2n é um circuito muito comum.

a) Mostrar como construir um descodificador binário 2-4 usando portas lógicas simples.

b) Mostrar como acrescentar uma entrada de habilitação (enable) ao circuito anterior.

Arquitetura e Organização de Computadores Pág. 33 de 104


Circuitos combinatórios — Exercícios propostos

c) Mostrar como construir um descodificador 3-para-8 (sem enable) a partir de dois descodifi-
cadores 2-4 com entrada enable.

d) Mostrar como acrescentar uma entrada de habilitação (enable) ao circuito anterior.

Exercício 25
Usar um descodificador binário 3-para-8 (entradas I0 . . . I2 , saídas Q0 . . . Q7 ) nas alíneas que se
seguem.

a) Escrever as funções lógicas das saídas Q0 e Q3 do descodificador.

b) Mostrar como implementar a função booleana F (X, Y, Z) = X ·Y ·Z + X ·Z usando apenas


um descodificador e portas lógicas do tipo OR.

Arquitetura e Organização de Computadores Pág. 34 de 104


4 Circuitos sequenciais

4.1 Exercícios resolvidos

Exercício 1
Considere o seguinte circuito com uma entrada X e uma saída Y .
X
Y

D Q
D Q
CLK
CLK Q
Q

CLK

a) Desenhe no diagrama seguinte a evolução temporal das saídas dos flip-flops (Q1 e Q0 ),
assim como da saída Y , sabendo que a entrada X evolui da forma representada. Nota:
considere que no instante inicial Q1 e Q0 têm o valor lógico 0.

b) Admitindo que o período do sinal de relógio é 20 ns, indique ao fim de quanto tempo
a saída Y passa de 0 a 1 pela primeira vez.

a) Como inicialmente Q0 = 0 e Q1 = 0, nas entradas dos flip-flops vão estar os valores D0 = 0 e


D1 = 1, uma vez que X = 0. Ao ocorrer a primeira transição do sinal de relógio são estes os
valores capturados pelos flip-flops, aparecendo nas saídas respetivas. Na próxima transição,
o estado das saídas e X determinam os novos valores que os flip-flops vão apresentar. Assim
se completam as formas de onda apresentadas.

Arquitetura e Organização de Computadores Pág. 35 de 104


Circuitos sequenciais — Exercícios resolvidos

CK

Q1

Q0

b) Considerando T = 20 ns, verifica-se pelo resultado da alínea anterior que Y transita de 0


para 1 ao fim de 2,5 × T =50 ns.

Exercício 2
Considere o seguinte circuito sequencial, constituído por dois flip-flops e um multiplexador.
Os flip-flops são sensíveis à transição ascendente do sinal de relógio (CLK) e o seu estado
inicial é 0.
MUX2_1
1 I0
X
IN D Q I1 Y D Q OUT
S
CLK CLK

CLK

Assumindo a sequência de valores da entrada do circuito (IN) indicada na figura seguinte,


apresente a forma de onda dos sinais X e OUT.

CLK

IN

OUT

Inicialmente, X e OU T apresentam o valor 0. Sendo a entrada de seleção do multiplexador 0, o


valor que surge na sua saída é 1, referente à entrada I0 . Como IN = 0 e Y = 1 quando ocorre
a primeira transição do sinal de relógio, então X e OU T passam a assumir os valores 0 e 1,
respetivamente. A análise do sucedido para as restantes transições segue o mesmo raciocínio,
levando ao resultado apresentado na figura seguinte.

Arquitetura e Organização de Computadores Pág. 36 de 104


Circuitos sequenciais — Exercícios resolvidos

CLK

IN

OUT

Exercício 3
Considere o circuito, composto por um registo de 4 bits e um multiplexador com duas
entradas de 4 bits. Admita que as entradas enable e reset do registo são ativadas pelo
valor lógico 1.

MUX_2
4 REG_4bits
I0[3:0]
4 D
Y[3:0] D[3:0]
4 4
IN I1[3:0] Q[3:0] OUT

S enable
reset
CLK
en
rst
CLK

Nas alíneas seguintes, considere em cada transição ativa do sinal de relógio o valor das
entradas apresentadas em cada tabela. Determine o valor da saída OU T após cada uma
das transições assinaladas.

a) Transição D en rst b) Transição IN sel en rst


1 0110 1 0 1 1001 1 1 0
2 0100 1 1 2 1111 1 1 0
3 0100 0 0 3 0101 0 1 0
4 1101 1 0 4 1000 1 0 0
5 1000 1 1 0
6 1111 1 1 1
7 0101 0 1 0
8 0000 1 1 0
9 0001 1 1 0

a) Os sinais considerados só envolvem o registo de 4 bits. Para cada transição ativa do sinal de
relógio é necessário ter em consideração que a saída do registo assume o valor presente na en-
trada D se a entrada de habilitação (enable) estiver ativa (en = 1), permanecendo inalterado
até à próxima transição. Caso en seja 0, a saída mantém o valor anterior. Relativamente à

Arquitetura e Organização de Computadores Pág. 37 de 104


Circuitos sequenciais — Exercícios resolvidos

entrada reset do registo, quando ativo (rst = 1) coloca a saída em 0000, independentemente
do valor das restantes entradas.
Aplicando estas considerações à sequência de entradas dada, obtém-se a saída OU T como se
mostra na tabela seguinte.

Transição (CLK) D en rst OU T


1 0110 1 0 0110
2 0100 1 1 0000
3 0010 0 0 0000
4 1101 1 0 1101

b) Além do que foi descrito na análise anterior, há agora que ter em consideração o multiplexa-
dor. Observando a forma como está a ser usado, conclui-se que o valor aplicado na entrada
do registo provém da entrada IN , quando sel = 1, ou da saída OU T do registo, quando
sel = 0.
Aplicando estas considerações à sequência de entradas dada, obtém-se a saída OU T como se
mostra na tabela seguinte.

Transição (CLK) IN sel en rst OU T


1 1001 1 1 0 1001
2 1111 1 1 0 1111
3 0101 0 1 0 1111
4 1000 1 0 0 1111
5 1000 1 1 0 1000
6 1111 1 1 1 0000
7 0101 0 1 0 0000
8 0000 1 1 0 0000
9 0001 1 1 0 0001

Arquitetura e Organização de Computadores Pág. 38 de 104


Circuitos sequenciais — Exercícios resolvidos

Exercício 4
A figura representa um circuito sequencial baseado num contador de 4 bits.
CONT4
Q0
EN EN QA
Q1
QB
Q2 OUT
QC
Q3
(MSB) QD

CLK CLK

a) Desenhe as formas de onda das saídas do contador (Q3 , Q2 , Q1 e Q0 ) e do circuito


completo (OUT).

b) Indique a sequência de estados ocorridos, numerando-os em decimal.

c) Considere agora que o contador possui uma entrada de reset (ativa a 1), acionada como
mostra a figura seguinte. Determine a sequência de estados da saída do contador.

CONT4

EN EN QA
QB
RESET OUT
QC
(MSB) QD

CLK CLK

a) O circuito apresentado é constituído por um contador de 4 bits. Considerando que inici-


almente as suas saídas são nulas, a cada transição do sinal de relógio o valor das saídas é
incrementado, resultando a representação das formas de onda mostrada na figura seguinte.

C LK

Q0

Q1

Q2

Q3

OUT

b) Sequência de estados (valores resultantes de Q3 Q2 Q1 Q0 ):


0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, · · ·

Arquitetura e Organização de Computadores Pág. 39 de 104


Circuitos sequenciais — Exercícios resolvidos

c) No estado QD QC QB QA = 0100 a entrada de reset fica ativa. Admitindo-o síncrono, na


próxima transição do sinal de relógio o estado do contador passa para 0000. A sequência de
estados resultante é: 0, 1, 2, 3, 4, 0, · · · .

Exercício 5
Considere os sistemas de memória externa apresentados na figura seguinte.

RAM1 RAM2

A[15:0] RAM1 RAM2


A[11:0] A[12:0]

A[15:0]
A[12:0] A[13:0]

CS CS

D[7:0] D[7:0]
CS CS
8 bits 8 bits D[7:0] D[7:0]

8 bits 8 bits
8 bits

A[15] A[14] 8 bits


& &

A[12] A[13]
A[15] A[15] &
A[13]
A[15]
A[14] A[13]

(a) (b)

a) Determine a capacidade de cada circuito de memória.

b) Elabore o mapa de memória de cada sistema. Indique, justificando, se a descodificação


de memória é total ou parcial.

c) Para cada um dos seguintes endereços, indique o componente, ou seja, o circuito de


memória, afetado: B7FFH , 1000H , E7AAH e 8000H .

a) Obtém-se a capacidade de um circuito de memória multiplicando o número de posições pelo


número de bits por posição. O número de bits por posição é igual ao número de bits do porto
de dados D[]. Todos os circuitos deste problema têm um porto de dados de 8 bits (1 byte).
O número de posições é determinado pela dimensão do porto de endereços A[]. Para portos
de N bits, existem 2N posições.
Assim, para a figura (a) temos:

• RAM1: 212 × 8 bits = 22 × 210 × 8 bits = 4 × 210 byte = 4 KiB


• RAM2: 213 × 8 bits = 8 KiB

Para a figura (b) temos:

• RAM1: 213 × 8 bits = 8 KiB


• RAM2: 214 × 8 bits = 16 KiB

b) O mapa de memória indica, para cada endereço possível, qual o circuito que armazena os
dados correspondentes. Em ambas as figuras, o barramento de endereços do CPU tem 16

Arquitetura e Organização de Computadores Pág. 40 de 104


Circuitos sequenciais — Exercícios resolvidos

bits (A[15:0]). Portanto, o espaço de endereçamento tem 216 posições (de 1 byte, neste
caso), i.e., 64 KB. A gama de endereços vai de 0000H a FFFFH .
Os endereços mapeados em cada circuito podem ser determinados por análise das condições
em que o circuito está habilitado, i.e., para que endereços é que se tem CS=1.
Para a figura (a) temos:

• RAM1: CS = A15 ·A14 ·A13 ·A12 = 1.


Esta condição só é satisfeita se A15 = 1, A14 = 1, A13 = 1, A12 = 0.
Logo, os endereços mapeadas na RAM1 têm o formato
1110 XXXX XXXX XXXX
em que X indica que o bit correspondente tanto pode ser 0 como 1. Os endereços com
este formato estão na gama:
1110 0000 0000 0000 a 1110 1111 1111 1111.
Em hexadecimal, a gama é E000H –EFFFH .
Como todos os bits do endereço são usados (A15 − A12 na definição de CS; os restantes
na ligação ao porto de endereços de RAM1), trata-se de descodificação total.
• RAM2: CS = A15 ·A14 ·A13 = 1.
Esta condição só é satisfeita se A15 = 1, A14 = 0, A13 = 0.
Logo, os endereços mapeadas na RAM2 têm o formato
100X XXXX XXXX XXXX.
Os endereços com este formato estão na gama:
1000 0000 0000 0000 a 1001 1111 1111 1111.
Em hexadecimal, a gama é 8000H –9FFFH .
Trata-se igualmente de descodificação total.

O mapa de memória para o sistema da figura (a) é o seguinte:

Gama (hex) Dispositivo


0000–7FFF –-
8000–9FFF RAM2
A000–DFFF –-
E000–EFFF RAM1
F000–FFFF –-

A análise do sistema da figura (b) faz-se de forma análoga.

• RAM1: CS = A15 ·A13 = 1. Esta condição só é satisfeita se A15 = 1, A13 = 0.


Logo, os endereços mapeadas na RAM1 têm o formato
1?0X XXXX XXXX XXXX.
O símbolo ? indica que o bit correspondente não é usado na descodificação. Portanto,
trata-se de descodificação parcial.
Neste caso particular, dois endereços que difiram apenas no bit A14 têm o mesmo efeito
em termos de acesso a memória: os dois endereços diferentes são mapeados no mesma
posição física de memória. Temos, portanto, duas gamas de endereços equivalentes, que
apenas diferem no valor de A14 . Para A14 = 0 a gama é:
1000 0000 0000 0000 a 1001 1111 1111 1111.

Arquitetura e Organização de Computadores Pág. 41 de 104


Circuitos sequenciais — Exercícios propostos

Em hexadecimal, a gama é 8000H –9FFFH .


Para A14 = 1 a gama é:
1100 0000 0000 0000 a 1101 1111 1111 1111.
Em hexadecimal, a gama é C000H –DFFFH .
As duas gamas são mapeadas de forma sobreposta na RAM1. Por exemplo, os endereços
8000H e C000H referem-se ambos à primeira posição física do circuito RAM1. A memória
disponível não aumenta por ser usada descodificação parcial.
• O circuito RAM2 também é usado com descodificação parcial. Os endereços correspon-
dentes têm o formato
0?XX XXXX XXXX XXXX,
a que correspondem as gamas 0000H –3FFFH e 4000H –7FFFH .

O mapa de memória para o sistema da figura (b) é o seguinte:

Gama (hex) Dispositivo


0000–3FFF RAM2 (*)
4000–7FFF RAM2 (*)
8000–9FFF RAM1 (**)
A000–BFFF –-
C000–DFFF RAM1 (**)
E000–FFFF –-

Os asteriscos assinalam gamas fisicamente sobrepostas.

c) Para determinar os componentes usados basta consultar os mapas de memória obtidos na


alínea anterior. Os resultados são os seguintes:

Endereço Figura (a) Figura (b)


B7FF –- –-
1000 –- RAM2
E7AA RAM1 –-
8000 RAM2 RAM1

4.2 Exercícios propostos


Exercício 6
Assuma que no circuito seguinte os flip-flops do tipo D são sensíveis ao flanco ascendente do
sinal de relógio e que inicialmente as saídas são nulas.
X
D D Q D Q Q

CLK CLK
Q Q

CLK

Arquitetura e Organização de Computadores Pág. 42 de 104


Circuitos sequenciais — Exercícios propostos

Represente a forma de onda da saída Q em resposta à entrada D representada na figura.


Sugestão: comece por verificar qual o valor de X após cada transição do sinal de relógio.

CLK

Exercício 7
Considere o seguinte circuito sequencial, constituído por portas lógicas e um flip-flop do tipo D,
sensível ao flanco ascendente do sinal de relógio, em que no início Q = 0.

K D Q Q
CLK
Q Q

CLK

a) Indique a expressão da função lógica D(J, K, Q) à entrada do flip-flop.

b) Considerando os valores das entradas J e K apresentados na figura seguinte, obtenha o valor


da saída Q do circuito.

CLK

Arquitetura e Organização de Computadores Pág. 43 de 104


Circuitos sequenciais — Exercícios propostos

Exercício 8
Considere o circuito sequencial da figura seguinte.

D0
Q0
EN D Q

CLK

D1
Q1
D Q

CLK CLK

a) Escreva a expressão das entradas D0 e D1 dos flip-flops.


b) Represente as formas de onda correspondentes aos sinais Q0 e Q1 , assumindo que o estado
inicial dos flip-flops é “00” e que EN =1.
c) Mostre qual o estado do circuito após 4 transições consecutivas do sinal de relógio (CLK).

Exercício 9
Considere o seguinte circuito, composto por um flip-flop e uma porta XOR (ou-exclusivo).
X
T

D Q
CLK

CLK

a) Assumindo que o estado inicial do flip-flop é 0, determine a sequência de valores na saída T


se na entrada X ocorrer a sequência 0110001001111100 (um bit a cada ciclo do relógio).
b) Descreva a função do circuito relacionando T com X.
c) Ao circuito anterior foi acrescentado um contador síncrono de 4 bits, tal como representado
na figura seguinte. Identifique a relação entre as saídas Q3 Q2 Q1 Q0 do contador e a entrada
X do circuito.
CONT4
X T
EN QA Q0
QB Q1
QC Q2
D Q (MSB) QD Q3
CLK CLK

CLK

Arquitetura e Organização de Computadores Pág. 44 de 104


Circuitos sequenciais — Exercícios propostos

Exercício 10
A figura mostra a constituição de um banco de registos.

Além dos 8 registos de 4 bits, fazem parte do circuito um descodificador de 3 para 8 e um


multiplexador de 8 (conteúdos de 4 bits) para 1. A entrada DIN representa o valor de 4 bits a
escrever num dos 8 registos, endereçado (identificado) por ADDR. A escrita ocorre se WRITE=1.
A leitura de um registo é feita endereçando o registo pretendido, surgindo o valor na saída DOUT.
As operações de escrita são síncronas com o sinal de relógio.

a) Expresse a capacidade de armazenamento do banco de registos em bytes.

b) Explique o que garante escrever um conteúdo num (e um só) determinado registo.

c) Admita que o conteúdo inicial dos registos é “0000” e que os valores das entradas são:
DIN=1111, ADDR=001 e WRITE=1. Descreva que alterações ocorrem no circuito após
uma transição do sinal de relógio.

d) Explique a utilidade das entradas enable e reset dos registos.

e) Descreva a função desempenhada pelo descodificador de 3 para 8 e pelo multiplexador de 8


para 1, no contexto da sua utilização no banco de registos.

f) Mostre que alteração seria necessária efetuar para que fosse possível ler, simultaneamente, o
conteúdo de dois registos diferentes, apresentando-o nas saídas DOUT1 e DOUT2.

Exercício 11
Um sistema de memória é constituído por uma memória RAM e uma memória ROM. O barra-
mento de endereços possui 16 bits e o barramento de dados é de 8 bits. A figura seguinte mostra
o correspondente diagrama de blocos, onde CS representa o sinal de chip select das memórias.

Arquitetura e Organização de Computadores Pág. 45 de 104


Circuitos sequenciais — Exercícios propostos

CPU
16 A[15:0]
ADDRESS
8 D[7:0]
DATA
A[11:0] RAM A[10:0] ROM
A[11:0] A[10:0]
D[7:0] D[7:0]
A15
A14 CS ? CS
A13

a) Determine o intervalo de endereços a que a RAM responde e justifique se a descodificação


de endereços é total ou parcial.

b) Considere que a primeira posição da memória ROM tem o endereço 0xC800 e que o endereço
de cada posição é único. Calcule o endereço da última posição da ROM.

c) Apresente o circuito de descodificação de endereços da ROM considerando as condições da


alínea anterior.

Exercício 12
Um processador dispõe de um espaço de endereçamento de 64 KiB e de um barramento de dados
com 8 linhas. O seu mapa de memória é o seguinte:

Gama Dispositivo
0x0000-0x3FFF ROM1
0x4000-0x7FFF RAM1
0x8000-0xCFFF -
0xD000-0xDFFF RAM2
0xE000-0xFFFF -

a) Determine as dimensões de cada um dos dispositivos de memória.

b) Determine as equações lógicas dos circuitos de descodificação de endereços (descodificação


total).

c) Apresente o diagrama de blocos do sistema de memória com descodificação de endereços.

Exercício 13
Um sistema emprega um processador com 14 bits de endereço e 8 bits de dados. Assumir que se
dispõe apenas de circuitos RAM de dimensão 210 × 4 bits.
Pretende-se construir um subsistema de memória com 2048 posições (de 1 byte cada) a partir
do endereço 0 (i.e., a gama de endereços vai de 0 a 2047). Endereços pares e ímpares devem
ativar circuitos RAM diferentes. O sistema usa descodificação completa.

a) Apresente o esquema de ligações do sistema, incluindo o sub-sistema de descodificação de


endereços.

b) O valor 0x9A é guardado na posição 250. Onde fica guardada fisicamente a informação?

Arquitetura e Organização de Computadores Pág. 46 de 104


5 Desempenho

Alguns destes exercícios são extraídos ou adaptados do livro “Computer Organization and Design
– The Hardware/Software Interface”, D. Hennessy e J. Patterson, 4ª edição.

5.1 Exercícios resolvidos

Exercício 1
Um computador possui três classes de instruções, A, B e C. O CPI de cada uma delas é,
respetivamente, 1, 2 e 3. Um projetista está a implementar um compilador e precisa de
escolher uma de duas sequências de instruções a usar nesse computador. Dessas sequências
é conhecido o número de instruções de cada classe, conforme mostra a tabela seguinte.

Nº de instruções por classe


Sequência de instruções
A B C
1 2 1 2
2 4 1 1

a) Determine em qual das duas sequências de instruções é executado o maior número de


instruções.

b) Mostre qual das sequências é executada de forma mais rápida.

c) Calcule o valor do CPI para cada sequência.

a) Na sequência 1 são executadas 2 + 1 + 2 = 5 instruções e na sequência 2 são executadas


4 + 1 + 1 = 6 instruções. É pois na sequência 2 que são executadas mais instruções.

b) O número de ciclos é dado por


X
Nciclos = Ni × CPIi
i

onde Ni se refere ao número de instruções da classe i e CPIi é o número de ciclos por instrução
dessa classe.
Sequência 1: Nciclos = 2 × 1 + 1 × 2 + 2 × 3 = 10
Sequência 2: Nciclos = 4 × 1 + 1 × 2 + 1 × 3 = 9
A sequência 2 é a mais rápida, porque é executada em menos ciclos de relógio.

Arquitetura e Organização de Computadores Pág. 47 de 104


Desempenho — Exercícios resolvidos

c)
Nciclos
CPI =
Ninst
Sequência 1: CPI = 10/5 = 2
Sequência 2: CPI = 9/6 = 1,5

Exercício 2
Considere um computador com três classes de instruções, A, B e C, para as quais o valor
de CPI é 1, 2 e 3, respetivamente. Para ser executado nesse computador, um programa é
obtido através de dois compiladores distintos, originando o número de instruções de cada
classe indicado na tabela.
Nº de instruções por classe
Sequência de instruções
A B C
Compilador 1 5 × 109 1 × 109 1 × 109
Compilador 2 10 × 109 1 × 109 1 × 109

Assuma que o computador funciona a 500 MHz.

a) Indique a sequência que é executada em menos tempo.

b) Determine a qual das sequências de instruções corresponde o maior valor de MIPS


(milhões de instruções por segundo).

a) O tempo de execução é dado por


Nciclos
texec =
fCLK
sendo o número de ciclos de relógio determinado por
X
Nciclos = Ni × CPIi
i

Então, o tempo de execução da sequência de instruções obtida por cada compilador é

(5 × 1 + 1 × 2 + 1 × 3) × 109 10 × 109
texec_C1 = = = 20 s
500 × 106 500 × 106
e
(10 × 1 + 1 × 2 + 1 × 3) × 109 15 × 109
texec_C2 = = = 30 s
500 × 106 500 × 106
Atendendo aos tempos de execução calculados, conclui-se que o compilador 1 gera o programa
mais rápido.

b)
Ninstr
MIPS =
texec × 106

Arquitetura e Organização de Computadores Pág. 48 de 104


Desempenho — Exercícios resolvidos

Portanto,
(5 + 1 + 1) × 109
MIPS1 = = 350
20 × 106
e
(10 + 1 + 1) × 109
MIPS2 = = 400
30 × 106
Daqui se conclui que o compilador 2 proporciona uma taxa de execução de instruções superior.

Exercício 3
A execução de um programa num computador A, o qual funciona com um sinal de relógio
de 2 GHz, demora 10 s. Um computador B que está a ser desenvolvido é capaz de executar
o mesmo programa em 6 s. Este computador B pode atingir uma frequência de relógio
superior à do computador A, embora consuma 1,2 vezes mais ciclos de relógio do que o
computador A a executar o referido programa. Determine a frequência do sinal de relógio
a que B pode funcionar.

O tempo de execução de um programa com Ninstr instruções é dado por

texec = Ninstr × CPI × TCLK

A razão dos tempos de execução no computador A e no computador B é


texec_A Ninstr × CPIA × fCLK_B 10
= =
texec_B Ninstr × CPIB × fCLK_A 6

Como CPIB = 1,2 × CPIA , então resulta fCLK_B = fCLK_A × 1,2 × 10


6 = 2 × fCLK_A , conclui-se
que fCLK_B = 4 GHz.

Exercício 4
Considere dois computadores A e B que possuem o mesmo conjunto de instruções. O
período do sinal de relógio dos computadores A e B é 250 ps e 500 ps, respetivamente, e o
número de ciclos de relógio consumidos por instrução (CPI) é 2 no computador A e 1,2 no
computador B, respetivamente. Mostre qual dos computadores é o mais rápido a executar
um programa.

texecA = Ninstr × 2 × 250 = 500 × Ninstr ps


e
texecB = Ninstr × 1,2 × 500 = 600 × Ninstr ps
Então,
texecB 6
= = 1,2
texecA 5
O computador A é o mais rápido.

Arquitetura e Organização de Computadores Pág. 49 de 104


Desempenho — Exercícios resolvidos

Exercício 5
Um dado programa é executado em dois computadores diferentes, A e B, tendo-se obtido
os seguintes indicadores:

Indicador A B
Nº de instruções 107 8 × 106
Frequência 4 GHz 4 GHz
CPI 1 1,1

a) Indique qual o computador com maior valor de MIPS.

b) Indique qual o computador mais rápido.

a)
Ninstr Ninstr fCLK
MIPS = 6
= 6
=
texec × 10 Ninstr × CPI × TCLK × 10 CPI × 106
Logo,
4 × 109
MIPSA = = 4 × 103
1 × 106
e
4 × 109
MIPSB = ≈ 3636
1,1 × 106
A é o computador com maior valor de MIPS.
b)
Ninstr
texec = Ninstr × CPI × TCLK =
MIPS × 106
107
texecA = = 2,5 ms
4 × 103 × 106
8 × 106
texecB = ≈ 2,2 ms
3636 × 106
B é o computador mais rápido.

Exercício 6
Para um dado programa foram obtidas as seguintes medidas:

• Ocorrência de operações de vírgula flutuante (VFL) (exceto raiz quadrada): 25 %


• Ocorrência da operação de raiz quadrada: 2 %
• CPI médio de operações em VFL: 4,0
• CPI de raiz quadrada: 20
• CPI médio para outras instruções: 1,33

Considere duas alternativas para melhorar o desempenho: reduzir o CPI da operação de


raiz quadrada para 2 ou baixar o CPI de todas as instruções de VFL para 2,5. Compare
as duas alternativas usando a equação de desempenho do CPU.

Arquitetura e Organização de Computadores Pág. 50 de 104


Desempenho — Exercícios resolvidos

O número de instruções e a frequência do relógio do computador continuam a ser os mesmos


nas duas alternativas. Basta por isso comparar os valores de CPI.

CPI1 = 0,25 × 4 + 0,02 × 2 + (1 − 0,25 − 0,02) × 1,33 ≈ 2,01

CPI2 = 0,25 × 2,5 + 0,02 × 20 + (1 − 0,25 − 0,02) × 1,33 ≈ 2,00

Embora os valores sejam muito próximos, na segunda alternativa (“... baixar o CPI de todas as
instruções de VFL para 2,5”) o tempo de execução é menor, ou seja, o desempenho é superior.

Exercício 7
Um processador executa um programa em que 30 % do tempo de execução é gasto em
adições de vírgula flutuante, 25 % em multiplicações de vírgula flutuante e 10 % em divisões
de vírgula flutuante. Para a nova geração desse processador, a equipa de projeto propõe
três aperfeiçoamentos possíveis na unidade de vírgula flutuante, consistindo em tornar o:

1. somador duas vezes mais rápido;

2. multiplicador três vezes mais rápido;

3. divisor dez vezes mais rápido.

Indique qual destas alternativas poderá proporcionar o maior aumento de desempenho.

A lei de Amdahl pode ser expressa por


1
stotal (f ) = f
(1 − f ) + s

onde f representa a fração de tempo gasto na execução da parte melhorada e s traduz o aumento
de rapidez dessa parte.
A aplicação da lei de Amdahl às três situações descritas permite pois quantificar o aumento
de desempenho:

1. f = 0,3 e s = 2 → stotal (f ) = 1
0,7+0,3/2 = 1,18

2. f = 0,25 e s = 3 → stotal (f ) = 1
0,75+0,25/3 = 1,20

3. f = 0,1 e s = 10 → stotal (f ) = 1
0,9+0,1/10 = 1,10

O maior ganho de desempenho é obtido com a melhoria do multiplicador de vírgula flutuante


(alternativa 2). Pode ainda concluir-se que tornar o divisor muito mais rápido leva ao menor
aumento de desempenho devido à baixa ocorrência de divisões em vírgula flutuante (10 %). Na
verdade, mesmo tornando o divisor infinitamente mais rápido, o speed-up obtido seria 1,11.

Arquitetura e Organização de Computadores Pág. 51 de 104


Desempenho — Exercícios propostos

Exercício 8
A execução de um programa num computador demora 1000 s, sendo 75 % do tempo gasto
em multiplicações e divisões. Pretende-se remodelar o computador com hardware mais
rápido para a realização das operações de multiplicação e divisão. Calcule quanto mais
rápidas devem ser as operações de multiplicação e divisão para que o programa seja:

a) três vezes mais rápido; b) quatro vezes mais rápido.

a) Aplicando a lei de Amdahl, o aumento de rapidez do programa é dado por

1
stotal (f ) =
f
(1 − f ) +
s
onde f representa a fração de tempo gasto na execução da parte melhorada e s traduz o
aumento de rapidez dessa parte. Assim,

1 1 4×s
3= = =
0,75 1 3 s+3
(1 − 0,75) + +
s 4 4×s
resultando
3×s+9=4×s⇔s=9
isto é, as operações devem ser 9 vezes mais rápidas.

b) Da mesma forma, resulta

1 1 4×s
4= = =
0,75 1 3 s+3
(1 − 0,75) + +
s 4 4×s
e
4 × s + 12 = 4 × s
que não tem solução, concluindo-se ser impossível o programa ficar 4 vezes mais rápido.

5.2 Exercícios propostos


Exercício 9
A tabela apresentada mostra a frequência de funcionamento de 3 processadores, o número de
instruções executadas em cada um deles e o respetivo tempo de execução.
Processador FCLK (GHz) Nº de instruções Tempo (s)
P1 2 20 × 109 7
P2 1,5 30 × 109 10
P3 3 90 × 109 9

Arquitetura e Organização de Computadores Pág. 52 de 104


Desempenho — Exercícios propostos

a) Calcule o número de instruções executadas por ciclo de relógio, por cada processador.

b) Calcule a frequência a que o processador P2 deve funcionar para que o tempo de execução
das instruções seja igual ao apresentado para P1 .

c) Calcule o número de instruções a executar em P2 de modo a que o seu tempo de execução


seja igual ao de P3 .

Exercício 10
Considere que dois processadores distintos, P1 e P2 , implementam o mesmo conjunto de instru-
ções e que estas se podem enquadrar em quatro classes diferentes (A, B, C e D). A frequência
e o CPI por classe de instruções de cada implementação encontram-se na tabela.
Processador FCLK (GHz) CPI A CPI B CPI C CPI D
P1 1,5 1 2 3 4
P2 2 2 2 2 2

a) Seja um programa com 1 milhão de instruções divididas pelas quatro classes da seguinte
forma: 10 % são da classe A, 20 % são da classe B, 50 % são da classe C e 20 % são da classe
D. Verifique qual dos processadores é mais rápido a executar o programa.

b) Calcule o CPI médio de cada processador.

c) Calcule o número de ciclos de relógio necessários à execução do programa em cada processa-


dor.

Exercício 11
Dois processadores, P1 e P2 , implementam de forma diferente o mesmo conjunto de instruções,
composto por cinco classes de instruções. P1 funciona com um relógio de 4 GHz e P2 funciona a
6 GHz. O número médio de ciclos de relógio para cada classe de instruções é dado pela tabela
que se segue.

Classe CPI de P1 CPI de P2


A 1 2
B 2 2
C 3 2
D 4 4
E 3 4

O desempenho de pico (peak performance) é definido como a cadência máxima a que um compu-
tador pode executar a sequência de instruções mais favorável (para uma dada tarefa). Determinar
o desempenho de pico de P1 e P2 expresso em instruções por segundo. Comentar o resultado.

Exercício 12
A tabela seguinte apresenta o número de operações em vírgula flutuante (VFL) executadas em
três programas diferentes e o respetivo tempo de execução em três computadores A, B e C,
distintos.

Arquitetura e Organização de Computadores Pág. 53 de 104


Desempenho — Exercícios propostos

Tempo de execução (s)


Programa Nº operações VFL
Comp. A Comp. B Comp. C
1 5 × 109 2 5 10
2 20 × 109 20 20 20
3 40 × 109 200 50 15

a) Mostre qual o computador mais rápido em termos do tempo total de execução.

b) Determine quantas vezes esse computador é mais rápido do que os outros dois.

Exercício 13
A tabela mostra o número total de instruções executadas por um programa, bem como a sua
distribuição por tipo.

Total Aritméticas Store Load Salto


700 500 50 100 50

a) Assuma que o tempo de execução das instruções aritméticas corresponde a 1 ciclo de relógio,
loads e stores correspondem a 5 ciclos de relógio e as instruções de salto correspondem a 2
ciclos de relógio. Calcule o tempo de execução do programa num processador a 2 GHz.

b) Calcule o valor do CPI para o programa.

c) Se o número de instruções de load for reduzido para metade, quanto mais rápida é a execução
do programa e qual o valor do CPI?

Exercício 14
Um processador executa um programa constituído por vários tipos de instruções, entre as quais
existem instruções de transferência de dados. Supondo que é possível melhorar o tempo de exe-
cução das instruções de transferência de dados em 11 vezes, calcule a percentagem do tempo de
execução gasto por essas instruções de forma a conseguir-se melhorar o desempenho do proces-
sador em 5 vezes.

Exercício 15
Medindo o tempo de acesso a disco verificou-se que 80 % do tempo de execução de um deter-
minado programa num computador era gasto em acessos ao disco. Substituindo o disco de tal
computador constatou-se que este era duas vezes mais rápido.

a) Calcule quanto melhorou o desempenho do computador.

b) Verifique qual a melhoria de desempenho que seria alcançada se o disco tivesse um tempo de
acesso desprezável.

Exercício 16
Suponha que se pretende melhorar um computador acrescentando-lhe uma unidade vetorial.
(Estas unidades implementam instruções específicas para o tratamento de vetores.) Um cálculo
executado em modo vetorial é 10 vezes mais rápido que o normal.

Arquitetura e Organização de Computadores Pág. 54 de 104


Desempenho — Exercícios propostos

a) Desenhe um gráfico que mostre o ganho de rapidez (speedup) em função da percentagem de


tempo de execução em modo vetorial (percentagem de vetorização).

b) Que percentagem de vetorização é necessária para se obter um ganho de rapidez de 2?

c) Considerar o caso da alínea anterior. Com a utilização da unidade vetorial, o computador


demora metade de tempo a realizar os cálculos. Em que percentagem desse novo tempo
(mais curto) é que a unidade vetorial está a ser usada?

d) Que percentagem de vetorização é necessária para obter metade do máximo ganho de rapidez
possível?

e) Suponha que se determinou empiricamente que a percentagem de vetorização é de 70 %. Os


projetistas de hardware acham que é possível duplicar o desempenho da unidade vetorial. Em
alternativa, o grupo de compilação poderia tentar aumentar a utilização do modo vetorial,
como forma de aumentar o desempenho. Que aumento da percentagem de vetorização (em
relação à situação atual) seria necessário para obter o mesmo resultado que a duplicação do
desempenho de hardware? Que alternativa é mais aconselhável?

Exercício 17
Um processador suporta 4 classes de instruções. Durante a execução de um dado programa, a
percentagem de tempo gasta com instruções de cada classe foi o seguinte:

Classe A B C D
Tempo (%) 30 20 40 10

Uma nova versão do processador executa instruções de classe A três vezes mais rapidamente e
instruções de classe C quatro vezes mais rapidamente. Determinar o ganho de rapidez (speedup)
obtido pela nova versão.

Arquitetura e Organização de Computadores Pág. 55 de 104


6 Linguagem assembly

6.1 Exercícios resolvidos

Exercício 1
Para as seguintes expressões aritméticas (números inteiros de 64 bits), especifique um
mapeamento de variáveis para registos e o fragmento de código assembly ARM que as
implementa.

a) f = g - (f + 5) b) f = A[12] + 17

O primeiro passo neste tipo de problemas é escolher uma atribuição de variáveis a registos. Cada
variável é atribuída a um registo. Como a arquitetura ARM possui 31 registos de uso geral,
trata-se de uma tarefa simples porque, neste caso, se pode usar um registo diferente para cada
variável.

a) Uma possível atribuição de registos a variáveis é a seguinte (escolha arbitrária):


X0: f X1: g
O fragmento de código que realiza os cálculos desejados é:
add X0, X0, 5 // Calcula f = f + 5
sub X0, X1, X0 // Calcula f = g - f
Após esta sequência de duas instruções, X0 contém o novo valor associado a f. O cálculo da
primeira parte da expressão (instrução add) pode guardar o resultado intermédio no registo
X0, porque a segunda instrução estabelece o valor final correto.

b) Possível atribuição de variáveis a registos:


X0: f X6: endereço base de A
Como cada elemento de uma sequência de inteiros tem 8 bytes, o elemento de índice 12 da
sequência A está guardado a partir da posição de memória cujo endereço é dado por:
endereço base de A + 12 × 8
A primeira instrução deve ir buscar o valor guardado nessa posição.
ldur X0, [X6, #96] // Carrega valor da posição X6+96
add X0, X0, #17 // Soma-lhe o valor 17

Arquitetura e Organização de Computadores Pág. 56 de 104


Linguagem assembly — Exercícios resolvidos

Exercício 2
Assuma as seguintes condições iniciais:

X0 = 0x00000000BEADFEED X1 = 0x00000000DEADFADE

a) Determine o valor de X2 após a execução da seguinte sequência de instruções:


lsl X2, X0, 4
orr X2, X2, X1

b) Determine o valor de X2 após a execução da seguinte sequência de instruções:


lsr X2, X0, 3
and X2, X2, 0x00000000FFFFFFEF

Em binário, os valores iniciais dos registos são:


X0 = 0. . . 0 1011 1110 1010 1101 1111 1110 1110 11012
X1 = 0. . . 0 1101 1110 1010 1101 1111 1010 1101 11102

a) A primeira instrução desloca o valor de X0 quatro bits para a esquerda. Nos 4 bits menos
significativos são introduzidos zeros. O resultado da operação é guardado em X2; o registo
X0 fica inalterado. O valor de X2 depois da execução da primeira instrução é:
X2 = 0. . . 0 1011 1110 1010 1101 1111 1110 1110 1101 0000 2
A instrução orr calcula a função ou-inclusivo de cada bit de X2 com o bit de X0 situado na
mesma posição. O resultado é guardado em X2. O resultado da operação orr é 1 sempre que
pelo menos um dos operandos seja 1. Logo:
X2 = 0. . . 0 1011 1111 1110 1111 1111 1111 1110 1101 11102 = 0x0000000DFEFFFEDE

b) A instrução lsr desloca o valor de X0 três posições para a direita, introduzindo zeros pela
esquerda; os 3 bits menos significativos perdem-se. O valor de X2 depois da execução da
primeira instrução é:
X2 = 000 0 0. . . 0 0001 0111 1101 0101 1011 1111 1101 11012
A instrução and calcula a função e-lógico de cada bit de X2 com o bit correspondente da
constante 0x00000000FFFFFFEF
00000000FFFFFFEF16 = 0. . . 0 1111 1111 1111 1111 1111 1111 1110 11112
O resultado é guardado em X2. O e-lógico de dois bits tem resultado 1 apenas se ambos os
operandos forem 1. Neste caso, os operandos são dados pelo conteúdo de X2 e pela constante
indicada. O valor final de X2 é:
X2 = 0. . . 0 0001 0111 1101 0101 1011 1111 1100 11012 = 0x0000000017D5BFCD

Arquitetura e Organização de Computadores Pág. 57 de 104


Linguagem assembly — Exercícios resolvidos

Exercício 3
Assuma as seguintes condições iniciais:
X0 = FFFF FFFF FFFF FFFF16
X1 = 0. . . 0 0011 1111 1111 1000 0000 0000 0000 00002
Determine o valor de X1 após a execução do fragmento seguinte:
cmp X0, X1
bge ELSE
b DONE
ELSE: add X1, X1, 2
DONE: ...

A primeira instrução compara os conteúdos de X0 e X1 alterando o valor das flags (registo


NZVC) de acordo com o resultado da comparação. A operação realizada é equivalente a:
X0 - X1
Neste caso os valores dos indicadores (flags) são alterados para N=1, Z=0, C=1 e V=0.
O salto condicional (segunda instrução) é tomado se as flags N e V apresentarem o mesmo
valor, o que se verifica quando X0 é maior ou igual a X1 (a condição ge interpreta os valores dos
registos como sendo números em complemento para 2). Como neste caso o conteúdo de X0 é
negativo e o conteúdo de X1 é positivo, o salto não será tomado.
Em consequência, a terceira instrução a ser executada é a de salto incondicional (a instrução
b). Esta instrução leva o fluxo de execução a passar para o fim do fragmento apresentado
(etiqueta DONE). A instrução add não é executada.
Como o conteúdo de X1 não foi alterado, o seu valor são sofre alteração.

Arquitetura e Organização de Computadores Pág. 58 de 104


Linguagem assembly — Exercícios resolvidos

Exercício 4
Apresenta-se a seguir um programa em assembly. Na quinta linha do programa é invocada
uma sub-rotina, através da instrução bl (branch with link ), designada por par. Esta sub-
rotina, cujo código não é fornecido, tem como objetivo determinar se um número é par.
Admita que a sub-rotina recebe esse número no registo X0 e que devolve no registo X0 o
valor 1 caso seja par, ou 0 no caso contrário.

mov X10, 0x00000000FF000000


mov X1, 3
mov X2, 0
loop: stur X0, [X10]
bl par // Chama rotina par
cmp X0, 0
beq step
add X2, X2, 1
step: ldur X0, [X10]
add X0, X0, 1
adds X1, X1, -1
bne loop

a) Considerando que antes da execução do programa o registo X0 possui o valor 8, indique


o conteúdo dos registos X0 e X2 após a execução do programa.

b) Tendo em consideração a descrição que foi realizada, implemente a rotina par.

a) Em algumas situações é útil preservar o valor do registo X0 (onde, segundo a convenção


as sub-rotinas devem retornar o resultado), para isso uma solução possível é armazenar o
conteúdo do registo numa posição de memória antes da invocação da sub-rotina e voltar a
carregar esse valor após a execução da mesma. Neste caso foi utilizado o endereço de memória
0x00000000FF000000 para armazenar o conteúdo do registo X0.
O programa realiza 3 iterações, incrementando em cada uma delas o valor X0, que inicialmente
é 8. Em cada iteração é determinada a paridade do valor em X0 invocando a rotina par.
Caso o valor em X0 seja par o registo X2 é incrementado. No final da execução do programa
X2=2, correspondendo aos 2 números pares encontrados (8 e 10), e X0=11, correspondendo
ao resultado da adição de uma unidade em cada iteração ao valor de X0.

b) O bit menos significativo de um número par é 0. A rotina seguinte baseia-se nesta proprie-
dade.

par: add X0, X0, 1


and X0, X0, 1
ret

Arquitetura e Organização de Computadores Pág. 59 de 104


Linguagem assembly — Exercícios resolvidos

Exercício 5
a) Escreva um fragmento de código assembly que determina se um dado número inteiro
N está presente numa sequência SEQ. Assuma a seguinte atribuição de registos:
- N→X0
- endereço-base de SEQ→X1
- número de elementos de SEQ→X2
- resultado→X0

b) Converta o fragmento anterior numa sub-rotina chamada pesq (de “pesquisa”). Os


argumentos da função seguem a ordem indicada na alínea anterior.

c) Use a sub-rotina anterior num fragmento que determina quantos elementos de uma
sequência SEQ1 estão presentes noutra sequência SEQ2. Usar a seguinte atribuição de
registos:
- endereço-base de SEQ1→X7
- número de elementos de SEQ1→X8
- endereço-base de SEQ2→X9
- número de elementos de SEQ2→X10
- resultado→X5

a) O fragmento consiste num ciclo em que se varia o registo X1 de forma a conter o endereço
de elementos sucessivos de SEQ. O número de iterações é, no máximo, igual ao número de
elementos de SEQ, que é decrementado de uma unidade em cada iteração.
O ciclo pode terminar, quando se encontra um elemento igual ao procurado, nesse caso é
colocado em X3 o valor 1 e a instrução de salto para a etiqueta fim é executada.
Se o valor procurado não existir em SEQ, o ciclo é terminado porque o contador de elementos
vem a 0. Neste caso, o valor de X3 não é alterado, mantendo o valor inicial estabelecido na
primeira instrução.
Na última linha o valor de X3 é transferido para o registo X0 de forma a deixar o resultado
em X0 tal como é pedido no enunciado.

1 mov X3, 0 // resultado a Zero


2 prox : cmp X2, 0 // terminar?
3 beq fim
4 ldur x4, [ x1 ] // obter elemento
5 cmp x4, X0 // elemento = N?
6 bne seg
7 mov X3, 1 // encontrado, resultado a 1
8 b fim
9 seg : add x1, x1, 8 // atualizar endereço
10 sub x2, x2, 1 // ajustar numero de elementos
11 b prox
12 fim : mov x0, x3 // colocar resultado em X0

Arquitetura e Organização de Computadores Pág. 60 de 104


Linguagem assembly — Exercícios resolvidos

b) Para transformar o fragmento numa sub-rotina é necessário alterá-lo para corresponder às


convenções de invocação: os argumentos nos registos X0–X7 e o resultado nos registos X0 e
X1.
A atribuição de registos passa a ser a seguinte:
- N→X0
- endereço-base de SEQ→X1
- número de elementos de SEQ→X2
- resultado→X0

1 pesq : mov X3, 0 // resultado a Zero


2 L1 : cmp X2, 0 // terminar?
3 beq L3
4 ldur X4, [ X1 ] // obter elemento
5 cmp X4, X0 // elemento = N?
6 bne L2
7 mov X3, 1 // encontrado, resultado a 1
8 b L3
9 L2 : add X1, X1, 8 // atualizar endereço
10 sub X2, X2, 1 // ajustar numero de elementos
11 b L1
12 L3 : mov X0, X3 // colocar resultado em X0
13 ret

A ultima instrução da sub-rotina (ret), tem com função fazer com que no final da execução
da sub-rotina o programa retorne para o programa principal continuando a executar as suas
instruções normalmente.

c) O fragmento consiste num ciclo em que se “percorre” a sequência SEQ1. As linhas 2–3 verificam
se existem elementos a processar. Em caso afirmativo, obtém-se o próximo elemento de
memória; as linhas 9–10 procedem à atualização do contador de elementos e do endereço do
próximo elemento.
A sub-rotina pesq é usada para procurar um dado elemento de SEQ1 em SEQ2. As linhas
4–6 preparam a invocação da sub-rotina, colocando os argumentos nos registos apropriados
(valor a procurar em X0, endereço-base de SEQ2 em X1 e número de elementos de SEQ2 em
X2).
A linha 8 processa o resultado da invocação (registo X0). Se o valor foi encontrado em SEQ2,
o contador X5 é incrementado de uma unidade.

Arquitetura e Organização de Computadores Pág. 61 de 104


Linguagem assembly — Exercícios propostos

1 mov X5, 0 // inicializar contador


2 ciclo : cmp X8, 0 // mais elementos de SEQ1?
3 beq stop // terminar
4 ldur X0, [ X7 ] // obter um elemento de SEQ1
5 mov X1, X9 // onde pesquisar
6 mov X2, X10 // nº de elementos a pesquisar
7 bl pesq // invocar sub - rotina
8 add X5, X5, X0 // atualizar contador
9 add X7, X7, 8 // próximo endereço
10 sub X8, X8, 1 // decrementar nº de elementos
11 b ciclo // repetir
12 stop : ...

6.2 Exercícios propostos


Exercício 6
Para as seguintes expressões aritméticas (números inteiros de 64 bits), especifique um mapea-
mento de variáveis para registos e o fragmento de código assembly ARMv8 que as implementa.

a) f = g + ( j + 2) b) k = a + b - f + d - 30

c) f = g + h + A[4] d) f = g - A[B[10]]

e) f = k - g + A[h + 9] f) f = g - A[B[2] + 4]

Exercício 7
Para os seguintes fragmentos de código assembly ARMv8, indique um mapeamento entre registos
e variáveis e determine as expressões simbólicas correspondentes.

a) add x0,x0,x1
add x0,x0,x2
add x0,x0,x3
add x0,x0,x4
b) ldur x0,[x6, 8]

c) Assumir que X6 contém o endereço-base da sequência A[].


add x6, x6, -40
lsl x10, x1, 3
add x6, x6, x10
ldur x0, [x6, 16]

Arquitetura e Organização de Computadores Pág. 62 de 104


Linguagem assembly — Exercícios propostos

Exercício 8
Assuma as seguintes condições iniciais:
X0 = 0x5555555555555555 X1 = 0x0123456789ABCDEF
Determine o valor de X2 após a execução das sequências de instruções seguintes.

a) lsl x2, x0, 4


orr x2, x2, x1

b) lsl x2, x0, 4


and x2, x2, -1

c) lsr x2, x0, 3


and x2, x2, 0x00EF

Exercício 9
Os processadores RISC como o ARM implementam apenas instruções muito simples. Este exer-
cício aborda exemplos de hipotéticas instruções mais complexas.

a) Considere uma instrução hipotética abs que coloca num registo o valor absoluto de outro
registo.
abs X2, X1 é equivalente a X2 ← |X1|
Apresente uma sequência de instruções ARMv8 que realiza esta operação.
b) Repita a alínea anterior para a instrução sgt, em que sgt X1, X2, X3
é equivalente a se X2 > X3 então X1 ← 1 senão X1 ← 0.

Exercício 10
Considere o seguinte fragmento de código assembly ARMv8:
L1: stur X4,[X5]
lsl X4,X4,4
add X5,X5,8
cmp X4, 0
b.ne L1
Assuma os seguintes valores iniciais:
X4 = 0x12345678 X5 = 0x7D0
Explique como é alterada a memória durante a execução do fragmento de código. Apre-
sente numa tabela o endereço e o conteúdo das posições de memória alteradas pela execução do
fragmento de código.

Exercício 11
Numa zona de memória (endereço-base em X4) está uma sequência de números inteiros (de 64
bits) diferentes de 0. A sequência é terminada por um zero.
Escreva um fragmento de código assembly que determina o número de valores da sequência.
O valor final, 0, não entra para a contagem. O resultado deve ser guardado em X0.

Arquitetura e Organização de Computadores Pág. 63 de 104


Linguagem assembly — Exercícios propostos

Exercício 12
Considerar os seguintes fragmentos de código assembly.
Fragmento 1: LOOP: cmp X1, 0
b.eq DONE
add X2, X2, 2
add X1, X1, -1
b LOOP
DONE: ...

Fragmento 2: LOOP: mov X3, 0xA


LOOP2: add X2, X2, 2
adds X3, X3, -1
b.ne LOOP2
adds X1, X1, -1
b.ne LOOP
DONE: ...
a) Assumir a seguinte situação inicial: X1=10 e X2=0. Determinar, para cada fragmento, o valor
final de X2.

b) Assuma agora que X1=N (com N>0). Determinar, para cada fragmento, o número de instruções
executadas em função de N.

Exercício 13
Escrever um fragmento para determinar se duas sequências de números inteiros (64 bits) têm o
mesmo conteúdo. As sequências têm 100 elementos. Usar a seguinte atribuição de registos:

endereço-base da sequência A → X4
endereço-base da sequência B → X5

O resultado, a guardar em X0, deve ser 1, se as duas sequências tiverem o mesmo conteúdo
ou 0 no caso contrário.

Exercício 14
Escreva um fragmento de código assembly ARMv8 para determinar quantos números ímpares
estão contidos numa sequência de 50 números inteiros (de 64 bits). Assuma que o endereço-base
da sequência está contido no registo X0. O resultado deve ficar no registo X7.

Exercício 15
Pretende-se escrever um programa que permita realizar diversas tarefas envolvendo sequências
de números inteiros (64 bits) em memória. Para que o programa resulte estruturado e o código
seja facilmente reutilizado, o seu desenvolvimento deve basear-se na chamada de sub-rotinas,
realizando cada uma destas sub-rotinas uma tarefa específica.
Escreva um programa que realiza as tarefas a seguir descritas usando uma sub-rotina para
cada tarefa.
Nota: deve gerir a utilização de registos por forma a respeitar as convenções de chamada e
de retorno das sub-rotinas.

a) Somar todos os elementos de uma sequência.

b) Determinar o número de elementos ímpares da sequência.

Arquitetura e Organização de Computadores Pág. 64 de 104


Linguagem assembly — Exercícios propostos

c) Determinar o número de elementos que são iguais ou superiores a um valor dado.

d) Determinar se duas sequências com o mesmo comprimento são iguais.

Arquitetura e Organização de Computadores Pág. 65 de 104


7 Organização de um CPU

As figuras foram extraídas do livro “Computer Organization and Design – ARM Edition”, Pat-
terson & Hennessey.
Resumo dos formatos de codificação e opcodes

31 26 25 0

opcode address

6 bits 26 bits
d. Branch

Instrução Opcode
ADD 100 0101 1000 ALU trabalha em 3 contextos diferentes.
SUB 110 0101 1000
AND 100 0101 0000 1. instruções lógico-aritméticas: ALUOp[1:0]=10
ORR 101 0101 0000
2. cálculo de endereços: ALUOp[1:0]=00
LDUR 111 1100 0010
STUR 111 1100 0000 3. comparação: ALUOp[1:0]=01

CBZ 101 1010 0


B 000 101

7.1 Exercícios resolvidos

Exercício 1
Considere o CPU da figura 7.1. Determine o valor de todos os sinais de controlo durante
a execução da seguinte instrução:
ADD X3, X8, X11
Indique também quais os componentes com funções úteis.

Arquitetura e Organização de Computadores Pág. 66 de 104


Organização de um CPU — Exercícios resolvidos

PCSrc

0
M
Add u
x
ALU
4 Addresult 1

RegWrite Shift
left 2

Instruction [9-5] Read


Read register 1 Read MemWrite
PC address Instruction [20-16] 0
M Read data 1
u register 2 ALUSrc Zero MemtoReg
Instruction x
[31-0] 1 ALU ALU Read
Write Read 0 Address data 1
register data 2 result M
Instruction Instruction [4-0] M
memory u u
Reg2Loc x x
Write 1 0
data Registers Data
Write memory
data
Instruction [31-0] 32 64
Sign- ALU
extend
control MemRead

Instruction [31-21]
ALUOp

Figura 7.1: CPU com multiplexadores e sinais de controlo

Os valores dos sinais de controlo são determinados pela operação efetuada, que estabelece a
forma como os recursos do CPU são usados.
A instrução ADD usa dois registos como fonte de operandos e um como destino do resultado.
Como a instrução altera o banco de registos (para guardar o resultado da soma), deve ter-se
RegWrite=1. Como o valor que é guardado no registo provém da ALU e não da memória, tem-se
MemtoReg=0. Nas instruções tipo R, a especificação do registo do segundo operando é feita pelos
bits 20:16 da instrução, pelo que Reg2Loc=0.
Esta instrução não acede a memória, seja para leitura, seja para escrita. Por isso, MemRead=0
e MemWrite=0. Como também não é um salto condicional, Branch=0, o que implica PCSrc=0
(porque PcSrc = AND(Zero, Branch)).
A instrução ADD usa a ALU para realizar a operação (adição) sobre dois operandos prove-
nientes de registos. Um operando da ALU provém sempre do banco de registos; a origem do
segundo é determinada pelo sinal ALUSrc. Como neste caso o segundo operando também provém
do banco de registos, tem-se ALUSrc=0. A operação da ALU é controlada pelo sinal de 2 bits
ALUOp. Como se trata de uma instrução do tipo R, tem-se ALUOp=102 . Esta instrução não afeta
o fluxo de instruções, pelo que PCSrc=0.
Todos os módulos têm funções úteis, exceto a memória da dados (Data memory), o módulo
de extensão de sinal (Sign extend), o módulo de deslocamento (Shift left 2) e o somador
usado para calcular o destino dos saltos relativos (Add ligado a Shift left 2).

Arquitetura e Organização de Computadores Pág. 67 de 104


Organização de um CPU — Exercícios resolvidos

Exercício 2
Suponha que a unidade de controlo usada com o CPU da figura 7.1 possui um defeito de
fabrico que faz com que um determinado sinal de controlo tenha o valor fixo 0. Indique,
justificando, quais as instruções que deixam de funcionar corretamente, considerando que
o defeito ocorre em:

a) RegWrite b) ALUOp[1]

Para que uma instrução não funcione como esperado é necessário que o sinal, em operação
correta, assuma um valor diferente daquele que é imposto pelo defeito de fabrico.

a) Como o defeito de fabrico impõe sempre RegWrite=0, todas as instruções que requerem
RegWrite=1 funcionarão incorretamente. As instruções com RegWrite=1 são as que alteram
o conteúdo de um registo: as instruções do tipo R e a instrução LDUR.

b) O sinal ALUOp[1]=1 somente para as instruções lógico-aritméticas. Como o defeito impõe


ALUOp[1]=0, a ALU comporta-se nestas instruções como se estivesse a efetuar um cálculo de
endereços, i.e., a efetuar uma adição. Logo, o defeito de fabrico impede todas as instruções
lógico-aritméticas, exceto a adição, de funcionarem corretamente: SUB, AND e ORR.

Exercício 3
Processadores podem apresentar defeitos de fabrico. Suponha que se pretende detetar se
um CPU tem um certo defeito procedendo da seguinte forma:

1. preencher PC, registos e memória de instruções com valores selecionados apropria-


damente;
2. executar uma única instrução;
3. ler os valores de PC, registos e memória de dados.

Os valores lidos são examinados para determinar se uma dada falta está presente ou não.

a) Apresente um teste que permita determinar se o bit 12 da saída da memória de ins-


truções está sempre a 0 (stuck-at-0 ).

b) Repita a alínea anterior para uma falta stuck-at-1 (saída sempre a 1). É possível usar
um único teste para os dois casos? Se sim, como; se não, porquê?

Para detetar um defeito é preciso provocar uma situação em que o sinal afetado assuma
normalmente o valor complementar daquele que é imposto pelo defeito.

a) Este defeito afeta o bit 12 das instruções obtidas de memória. Nas instruções de tipo R, este
bit pertence ao campo shamt, que não é usado. Por isso, é necessário usar uma instrução de
outro tipo. Uma solução possível:

CBZ X31, 128

Arquitetura e Organização de Computadores Pág. 68 de 104


Organização de um CPU — Exercícios resolvidos

Na ausência de defeito, PC ← PC + 128 × 4. Na presença do defeito, 12810 = 000 . . . 100000002


transforma-se em 000 . . . 000000002 , já que o bit 12 (o décimo terceiro bit da instrução) é
forçado a 0. Portanto, o valor de PC mantém-se.

b) Por um raciocínio análogo ao da alínea anterior, é necessário usar uma constante com o bit
12 a zero. Por exemplo: CBZ X31, 256.
Na ausência de defeito, temos PC ← PC + 256 × 4; no caso contrário, toma o valor PC ←
PC + 384 × 4 (o campo de endereço muda de 000 . . . 1000000002 para 000 . . . 1100000002 )
Não é possível testar simultaneamente a presença de um ou outro defeito, porque isso exigiria
usar uma única instrução para impor condições opostas no local do defeito.

Exercício 4
A tabela seguinte indica a latência máxima dos blocos usados na implementação do CPU
conforme indicado na figura 7.1.

I-Mem Add Mux ALU Regs D-Mem Controlo


400 ps 100 ps 30 ps 120 ps 200 ps 350 ps 100 ps

A latência dos restantes módulos é nula.


Determine o caminho crítico (caminho de propagação de sinais com maior latência) para
a instrução AND.

É preciso encontrar o caminho ao longo do qual a propagação de sinais demora mais. O


tempo de propagação deve ser contado a partir da saída do registo PC (que muda no início de
cada ciclo). Para cada instrução, existem duas tarefas a realizar:

1. Calcular o endereço da próxima instrução.


2. Realizar a operação da instrução corrente.

Estas duas tarefas são independentes, exceto no caso das instruções que alteram o fluxo de
instruções (saltos condicionais e incondicionais). Para a instrução AND as tarefas são indepen-
dentes.
Para calcular o tempo de propagação associado a cada módulo, é preciso determinar o res-
petivo sinal de entrada que é atualizado em último lugar. Para um módulo de latência L com
N entradas relevantes cujos valores estejam atualizados nos instantes t1 , t2 , . . . , tn , e latência
máxima L, a saída estará atualizada no instante t = max(t1 , t2 , . . . , tn ) + L.
Por exemplo, a saída da memória de instruções (I-MEM) está atualizada 400 ps após o início
da instrução. A unidade de controlo (Control) atualiza todos os sinais de controlo no instante

400 ps + 100 ps = 500 ps

Para determinar o caminho crítico, é preciso determinar qual das duas tarefas demora mais.
1ª tarefa: A propagação de dados relativos ao cálculo do próximo endereço passa pelos
seguintes módulos:
Add → Mux
A saída de Add está atualizada após 100 ps.

Arquitetura e Organização de Computadores Pág. 69 de 104


Organização de um CPU — Exercícios resolvidos

As entradas relevantes de Mux são a saída do 1º somador e o sinal de controlo. Este último
está atualizado no instante t = 500 ps, conforme calculado anteriormente. Portanto, a saída de
Mux está atualizada em
t = max(100 ps, 500 ps) + 30 ps = 530 ps
Portanto, o endereço da próxima instrução está calculado após 530 ps.
2ª tarefa: A realização da operação utiliza os seguintes módulos:

I-Mem → Control → Mux → Regs → Mux → ALU → Mux

O 1º Mux é o que está ligado à entrada Read Register 2, o 2º Mux é o da entrada da ALU e
o 3º é o que está à saída da memória D-Mem. É de notar que a entrada de seleção do 1º Mux só
está disponível ao fim de 400 ps + 100 ps = 500 ps. Por este motivo, nesta instrução (e em outras
do tipo R) a unidade de controlo pertence ao caminho crítico.
A saída superior de Regs está pronta no instante

t = 400 ps + 200 ps = 600 ps

A saída inferior de Regs está pronta no instante

t = 400 ps + 100 ps + 30 ps + 200 ps = 730 ps

No instante t = 730 ps já todos os sinais de controlo estão atualizados, o que implica que,
daqui para a frente, estes já não influenciam o cálculo do tempo de propagação.
Portanto, o resultado da operação está pronto (i.e., disponível na entrada Write data do
banco de registos) no instante

t = 730 ps + 30 ps + 120 ps + 30 ps = 910 ps

Falta verificar se as demais entradas relevantes do módulo Regs estão atualizadas neste ins-
tante. A entrada RegWrite está atualizada desde o instante 500 ps, porque é um sinal de controlo.
A entrada Write register está pronta desde o instante 400 ps. Portanto, a entrada Write data
é a última a ficar atualizada.
Concluindo, o caminho crítico é I-Mem → Control → Mux → Regs → Mux → ALU → Mux,
com um tempo de propagação de 910 ps.

Arquitetura e Organização de Computadores Pág. 70 de 104


Organização de um CPU — Exercícios resolvidos

Exercício 5
Assuma que o processador da figura 7.1 recebe a seguinte instrução:

1111 1000 0100 0001 0000 0000 0100 0011

a) Indique os valores das saídas dos componentes Sign-extend e Shift-left2.

b) Indique os valores de entrada da unidade de controlo da ALU.

c) Qual é o valor de PC depois da execução da instrução?

Assuma agora que o conteúdo dos registos é o seguinte:


X0 X1 X2 X3 X4 X5 X6 X7 X12
0 1 4 3 -4 5 6 8 1

d) Indique os valores de saída de cada multiplexador.

e) Indique os valores de entrada da ALU e dos dois somadores.

f) Indique os valores de todas as entradas do banco de registos.

A resolução usa a figura 7.1 como referência.

a) O componente Sign-extend tem à entrada a instrução, e produz um valor de 64 (com sinal)


a partir de um campo da instrução. Neste caso, Instr[26]=0, pelo que o campo escolhido é
Instr[20:12]. O valor do campo é 0000100002 , logo o valor à saída de Sign-Extend é:

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00001 00002
ou 0x0000000000000010

O componente Shift-left2 produz à saída o valor da entrada deslocado de 2 bits para a


esquerda: 0x000000000040.

b) Para responder às alíneas seguintes é necessário saber de que instrução se trata (para se
conhecerem os valores dos sinais de controlo).
Consultado a lista de opcodes, temos opcode=111110000102 = 198610 , logo trata-se de uma
instrução LDUR.
Para a instrução LDUR, a ALU é usada para calcular o endereço dos dados fazendo uma
adição: ALUop=00.

c) Como a instrução LDUR não altera o fluxo de instruções, PC ← PC + 4.

d) Descodificando a instrução, tem-se:

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

11111000010 000010000 00 00010 00011


opcode address 00 Rn Rt

Arquitetura e Organização de Computadores Pág. 71 de 104


Organização de um CPU — Exercícios propostos

Portanto, Rn=2 e Rt=3. A instrução completa é: LDUR X3,[X2,#16].


Como a instrução usa a ALU para calcular a soma X2+16, o multiplexador à entrada da ALU
seleciona a constante (após extensão de sinal): a saída desse multiplexador tem o valor 16.
Como na instrução LDUR o registo de destino é definido por Instr[0:4], o multiplexador
que alimenta a entrada Read register 2 pode selecionar qualquer valor uma vez que é
irrelevante para esta instrução. Logo, a sua saída pode ser 000102 =2 ou 000112 =3.
A instrução LDUR transfere um valor de memória para um registo. Portanto, a saída do
multiplexador controlado por MemtoReg tem o valor proveniente da posição de memória lida
(valor armazenado em memória a partir da posição 20, pois X2=4).
Esta instrução não altera o fluxo de instruções. Portanto, a saída do multiplexador controlado
por PCSrc é igual a PC+4.
e) A entrada superior da ALU tem o valor do endereço-base (registo X2):4.
A entrada inferior da ALU tem a constante 16 (em 64 bits).
As entradas do somador da esquerda são: PC e 4.
As entradas do somador de destino de saltos são: PC+4 e o valor da constante multiplicado
por 4 (efeito do deslocamento de 2 bits para a esquerda) 16 × 4 = 64 (em 64 bits).
f) Os valores das entradas do banco de registos são:

• Read register 1: valor de Rn: 2.


• Read register 2: o valor de Reg2Loc é irrelevante para esta instrução. Logo, o valor
de Read register 2 pode ser 000102 =2 ou 000112 =3.
• Write register: valor de Rt: 3
• Write data: valor lido de memória (do endereço 20).
• RegWrite: 1 (sinal de controlo para habilitar o armazenamento do novo valor).

7.2 Exercícios propostos


Exercício 6
Para as seguintes instruções em código-máquina ARMv8, determine as instruções assembly cor-
respondentes. Indique o tipo de codificação, bem como os valores de todos os campos.

a) 0xF81F80A0 b) 0xF8404023

Exercício 7
Considere o CPU da figura 7.1. Determine o valor de todos os sinais de controlo durante a
execução das instruções indicadas a seguir. Indique também quais os componentes com funções
úteis.

a) LDUR X3,[X7,#64] b) STUR X8,[X2,#128]


c) CBZ X9,#-5

Arquitetura e Organização de Computadores Pág. 72 de 104


Organização de um CPU — Exercícios propostos

Exercício 8
Suponha que a unidade de controlo usada com o CPU da figura 7.1 possui um defeito de fabrico
que faz com que um determinado sinal de controlo tenha o valor fixo 0. Indique, justificando,
quais as instruções que deixam de funcionar corretamente, considerando que a falha ocorre em:

a) PCSrc b) MemWrite

Exercício 9
Pretende-se implementar a instrução BR reg (branch register). Esta instrução passa o fluxo de
execução para a instrução cujo endereço está no registo reg: PC ← reg.
A codificação de BR tem o formato R com alguns campos fixos:
31 21 20 16 15 10 9 5 4 0

11010110000 11111 000000 reg 00000


opcode 5 bits shamt Rn Rd

Indique quais os elementos e sinais de controlo que devem ser acrescentados ao CPU indicado
na figura 7.1. Defina os valores dos sinais de controlo para a nova situação.

Exercício 10
Considere a instrução LDUR X8, [X17,#40]. Para responder às questões seguintes refira-se à
figura 7.1.

a) Represente a instrução em linguagem-máquina.

b) Qual é o número de registo fornecido à entrada Read register 1? O valor deste registo é
usado?

c) Responda à mesma questão para a entrada Read register 2.

d) Qual é o número de registo fornecido à entrada Write register? O valor deste registo é
realmente alterado?

e) Qual é o valor dos sinais de controlo MemRead e MemWrite?

f) Responda às alíneas anteriores para a instrução:


Label CBZ X11, Label

Exercício 11
A tabela seguinte indica a latência máxima dos blocos usados na implementação do CPU indicado
na figura 7.1.
I-Mem Add Mux ALU Regs D-Mem Controlo
400 ps 100 ps 30 ps 120 ps 200 ps 350 ps 100 ps
Determine o caminho crítico (caminho de propagação de sinais com maior latência) para as
instruções seguintes, bem como o tempo de propagação correspondente.

a) LDUR b) CBZ

Arquitetura e Organização de Computadores Pág. 73 de 104


Organização de um CPU — Exercícios propostos

Exercício 12
Pretende-se projetar a unidade de controlo para uma implementação do CPU em que os compo-
nentes têm a seguinte latência máxima:

I-Mem Add Mux ALU Regs D-Mem Sign-extend Shift-left2 ALU Ctrl
400 ps 100 ps 30 ps 120 ps 200 ps 350 ps 20 ps 0 ps 50 ps

a) Determine o tempo disponível para a unidade de controlo gerar o sinal MemWrite sem au-
mentar a latência da implementação.

b) Determine qual é o sinal de controlo que pode demorar mais a ser gerado e qual é o tempo de
que a unidade de controlo dispõe para esse efeito sem aumentar a latência da implementação.

c) Determine qual é o sinal de controlo que pode demorar menos a ser gerado (sinal crítico) e
qual é o tempo de que a unidade de controlo dispõe para esse efeito sem aumentar a latência
da implementação.

Arquitetura e Organização de Computadores Pág. 74 de 104


8 Memória Cache

8.1 Exercícios resolvidos

Exercício 1
Considere uma memória cache do tipo direct-mapped, com 8 blocos e 1 palavra por bloco.
Complete a seguinte tabela, que representa a evolução do estado da memória cache para
os dez acessos consecutivos indicados. Inicialmente, a memória cache está vazia. Os
endereços são endereços de palavras.
Apresente também o conteúdo da memória cache após o último acesso.

Conteúdo do bloco
Acesso Endereço Hit/Miss
inicial final
1 22
2 26
3 22
4 26
5 16
6 3
7 16
8 8
9 27
10 10

Como a memória tem 8 blocos, o índice do bloco é definido pelo resto da divisão do endereço
por 8.
O efeito da sequência de acessos é descrito a seguir. A operação de obtenção do resto é
representada por %:
a % b = resto da divisão de a por b.

1. Endereço 22 →posição 22 % 8 = 6; falha (miss); cache[6] ←mem[22].

2. Endereço 26 →posição 26 % 8 = 2; falha (miss); cache[2] ←mem[26].

3. Endereço 22 →posição 22 % 8 = 6; acerto (hit); cache[6] tem conteúdo de mem[22].

4. Endereço 26 →posição 26 % 8 = 2; acerto (hit); cache[2] tem conteúdo de mem[26].

5. Endereço 16 →posição 16 % 8 = 0; falha (miss); cache[0] ←mem[16].

Arquitetura e Organização de Computadores Pág. 75 de 104


Memória Cache — Exercícios resolvidos

6. Endereço 3 →posição 3 % 8 = 3; falha (miss); cache[3] ←mem[3].


7. Endereço 16 →posição 16 % 8 = 0; acerto (hit); cache[0] tem conteúdo de mem[16].
8. Endereço 8 →posição 8 % 8 = 0; falha (miss); cache[0] tinha conteúdo de mem[16]; cache[0]
←mem[8].
9. Endereço 27 →posição 27 % 8 = 3; falha (miss); cache[3] tinha conteúdo de mem[3];
cache[3] ←mem[27].
10. Endereço 10 →posição 10 % 8 = 2; falha (miss); cache[2] tinha conteúdo de mem[26];
cache[2] ←mem[10].

Portanto, a tabela fica:


Conteúdo do bloco
Acesso Endereço Hit/Miss
inicial final
1 22 M - mem[22]
2 26 M - mem[26]
3 22 H mem[22] mem[22]
4 26 H mem[26] mem[26]
5 16 M - mem[16]
6 3 M - mem[3]
7 16 H mem[16] mem[16]
8 8 M mem[16] mem[8]
9 27 M mem[3] mem[27]
10 10 M mem[26] mem[10]

O conteúdo final da memória cache é:

Bloco Conteúdo
0 mem[8]
1 -
2 mem[10]
3 mem[27]
4 -
5 -
6 mem[22]
7 -

Exercício 2
Um processador funciona a 2 GHz e possui uma memória cache unificada. A taxa de
falhas no acesso à cache é 9% e o tempo de acesso à memória principal é 50 ns.

a) Calcule a penalidade de falha em ciclos.

b) Medições efetuadas para um conjunto de benchmarks revelaram que o número de ciclos


de protelamento em acessos a memória (por instrução) é CPIprot = 12.
Determine a percentagem de instruções que acede a dados.

Arquitetura e Organização de Computadores Pág. 76 de 104


Memória Cache — Exercícios propostos

a) Para obter a penalidade de falha em ciclos, determina-se o número de ciclos que o processador
executa durante o tempo de acesso a memória principal.

1 50
T = = 0,5 ns logo pf = = 100
F 0,5
b) Seja na o número de acessos a memória por instrução e tf a taxa de falhas.
O número médio de ciclos gastos em protelamento devidos a falhas no acesso a cache é:

CPIprot = tf × pf × na

Portanto:
CPIprot
na = ,
tf × pf
o que implica
12 4
na = =
0,09 × 100 3
Cada instrução requer obrigatoriamente um acesso para a sua obtenção. Acessos adicionais
são necessariamente acessos a dados. Então, o número médio de acessos a dados é: na − 1 =
1
3 = 33,3 %.

8.2 Exercícios propostos


Alguns exercícios foram extraídos ou adaptados do livro “Computer Organization and Design –
The Hardware/Software Interface”, Hennessy & Patterson, 4ª edição.
Exercício 3
Um CPU tem endereços de 18 bits e uma memória cache de mapeamento direto para palavras
(32 bits). A memória cache tem 16 posições. A política de escrita é write-through. O conteúdo
inicial da memória cache está indicado na tabela (em hexadecimal).

conteúdo etiqueta v
0 12345678 abc 1
1 6548feab 123 1
2 3c1f56fd 678 1
3 afd12498 567 0
4 6198fa34 b7c 1
5 1929aaaa 8d1 0
6 bbabeedd cd3 1
7 1123aa56 456 1
8 7611432a 001 1
9 ffffeffe 877 1
10 ddedd556 777 0
11 4444cccc 198 1
12 7627abed fdf 1
13 8768888a 479 1
14 71672912 655 0
15 22256733 111 1

Arquitetura e Organização de Computadores Pág. 77 de 104


Memória Cache — Exercícios propostos

a) Determine o número de bits da etiqueta e do índice. Qual é o espaço de endereçamento?


Qual a quantidade máxima de memória usável num sistema baseado neste CPU?

b) Indique as alterações da memória cache para a seguinte sequência de acessos (L=leitura,


E=escrita):

tipo endereço valor


L 2df10 –
L 23454 –
L 3f7b0 –
E 048c4 1212abab
E 3f7d0 00001111
E 1dde8 aaaabbbb

Exercício 4
Assuma que o CPU do problema anterior é usado com uma memória cache também semelhante
à anterior, mas que usa a política de escrita write-back. O conteúdo inicial da memória cache
está indicado na tabela (em hexadecimal).

conteúdo etiqueta v d
0 12345678 abc 1 1
1 6548feab 123 0 0
2 3c1f56fd 678 1 0
3 afd12498 567 0 0
4 6198fa34 b7c 1 0
5 1929aaaa 8d1 0 1
6 bbabeedd cd3 1 1
7 1123aa56 456 1 0
8 7611432a 001 1 1
9 ffffeffe 877 1 1
10 ddedd556 777 0 0
11 4444cccc 198 1 1
12 7627abed fdf 0 1
13 8768888a 479 1 0
14 71672912 655 0 0
15 22256733 111 1 0

a) Explique a finalidade do campo d.

b) Indique as alterações da memória cache para a seguinte sequência de acessos (L=leitura,


E=escrita):

Arquitetura e Organização de Computadores Pág. 78 de 104


Memória Cache — Exercícios propostos

tipo endereço valor


L 2df10 –
E 2df10 33334444
E 10c64 9999aaaa
L 23454 –
L 3f7b0 –
E 21de4 bbbb7777
E 2afdc 1212abab
E 3f7b0 00001111

Exercício 5
Uma memória cache do tipo write-through com 4 blocos de 8 bytes é usada como D-cache num
processador ARMv8.
O conteúdo da memória cache é o seguinte (em hexadecimal):

bloco conteúdo etiqueta v


7 6 5 4 3 2 1 0
0 2a 5d 04 aa 78 00 9c 23 2900002 1
1 1b b2 34 bb 7a 10 9f a3 0000893 1
2 99 52 36 cc 88 b0 3c 2b 7bcd001 1
3 42 15 90 cd 71 ab 3f 6d 65abfff 0

Assuma que X0 = 0x52000044 e X1=0xf79a0034.

a) Qual é o comprimento da etiqueta?

b) Qual é o valor lido de memória por uma operação de 32 bits que use o endereço guardado
em X0?

c) Que alterações da memória cache são causadas pela escrita de um valor de 4 bytes (dou-
bleword ) da posição especificada por [X0, -4]?

d) Qual é o valor obtido por uma instrução de leitura de 1 byte do endereço da posição de
memória especificada pelo conteúdo de X1?

Exercício 6
Para cada um dos sistemas indicados a seguir considere que o tempo de acesso a memória principal
é de 70 ns e que 36% das instruções acedem a dados em memória. O acesso a memória principal
tem início após falta de acesso à memória cache.

Processador Tamanho Taxa de faltas Tempo de acerto


P1 1 KiB 11,4% 0,62 ns
P2 2 KiB 8,0% 0,66 ns

a) Assumindo que é o tempo de acerto que determina o período de relógio, determine as frequên-
cias de operação dos dois sistemas.

b) Determine o tempo médio de acesso à memória para os dois casos.

Arquitetura e Organização de Computadores Pág. 79 de 104


Memória Cache — Exercícios propostos

c) Assumindo um CPI básico de 1, qual é o CPI de cada um dos processadores? Qual é o


processador mais rápido?

Exercício 7
Um CPU (com F=1 GHz) está equipado com memórias cache para instruções e para dados, cujas
taxas de faltas são, respetivamente, 5 % e 10 %. O tempo de acesso a memória principal é 80 ns
(a acrescentar ao tempo de acesso a memória cache).
Em média, 40 % das instruções de um programa acedem a dados (i.e., são load ou store).

a) Determine a taxa de faltas global da memória cache em número de faltas por 1000 instruções.

b) Suponha que se pretendia equipar o CPU com uma memória cache unificada. Determine a
máxima taxa de faltas desta alternativa para que ela apresente o mesmo desempenho que a
versão split cache.

c) Assuma que, na ausência de faltas de cache, o CPU tem CPIideal =1,2. Determine o CPI
efetivo para os seguintes casos:

i) sistema sem memória cache;


ii) sistema com memória cache.

Arquitetura e Organização de Computadores Pág. 80 de 104


Soluções dos exercícios propostos

1 Aritmética binária
Exercício 9
a) 1000000002 ; 100H

b) 111111111112 ; 7FFH

c) 11000,012 ; 18,4H

d) A parte fracionária não tem representação finita. Usando 4 bits para a parte fracionária, a
solução é: 100,00112 ; 4,3H .

e) 1610 ; 10H

f) 4,12510 ; 4,2H

g) 111102 ; 3010

h) 4398110 ; 10101011110011012

i) 171,7510 ; 10101011,112

j) 456H

Exercício 10
a) 10011102

b) 1010,0012

c) 10012

d) 101012

e) 11110102

f) 11000100,012

g) 1011002

Arquitetura e Organização de Computadores Pág. 81 de 104


Soluções dos exercícios propostos — Aritmética binária

Exercício 11
a) 3 = 00112 ; 2 = 00102 ; −3 = 10112

b) 3 + 2 = 01012 ; 2 + (−3) = 10012

c) Impossível: 14 não é representável.

Exercício 12
Sinal e grandeza: [−7; 7]; complemento para 2: [−8; 7]

Exercício 13
a) SG: 000100102 ; C2: 000100102 b) SG: 001100012 ; C2: 001100012

c) SG: 101100012 ; C2: 110011112 d) SG: 100000112 ; C2: 111111012

e) SG: 111001002 ; C2: 100111002 f) SG: 011100112 ; C2: 011100112

g) SG: 111111112 ; C2: 100000012 h) SG: impossível; C2: 100000002

Exercício 14
a) 10101002

b) Não ocorre overflow ; a diferença de números com o mesmo sinal é sempre representável.

Exercício 15
a) 100000012 ; resultado correto (não ocorre overflow ).

b) 010111112 ; resultado errado (ocorre overflow ).

c) 000000002 ; resultado correto (não ocorre overflow ).

Exercício 16
a) X SS: 227; C2: −29
Y SS: 72; C2: 72

b) SS: 100101011; resultado errado (ocorre overflow ).


C2: 00101011; resultado correto (não ocorre overflow ).

Exercício 17
a) PH =7A; Q10 =34

b) i) 00111002 ; resultado errado, pois a soma necessita de 8 bits (há overflow ).


ii) 00111002 ; resultado correto, a soma é representável (não há overflow ).

Arquitetura e Organização de Computadores Pág. 82 de 104


Soluções dos exercícios propostos — Vírgula flutuante

Exercício 18
a) A + B = 10001002 = 6810 .

b) A + B = 01000002 = 3210 .

c) A + B = 01001002 = 3610 .

Exercício 19
a) 010010102

b) −92

c) M − N = 101001102 ; resultado errado (ocorre overflow ).


N − M = 010110102 ; resultado errado (ocorre overflow ).

Exercício 20
a) S = −56; T = 17

b) S = 101110002 ; T = 000100012

c) S + T = 101001112 ; resultado correto (não há overflow ao somar as grandezas).

Exercício 21
a) Y = 49H ; Z = 100111102

b) 010110102 ; ocorre overflow, i.e., o resultado está errado (a soma de números negativos não
pode ser positiva).

c) 010000112

Exercício 22
a) x ∈ [0; 31] b) 192 c) −64
d) 9 bits e) 192 : 0110000002
−64 : 1110000002

2 Vírgula flutuante
Exercício 7
a) 1,011000000000000000000002 b) 000001002
c) −22,0

Exercício 8
a) 41FA0000H b) BF200000H c) 00000000H d) 44805000H

Arquitetura e Organização de Computadores Pág. 83 de 104


Soluções dos exercícios propostos — Vírgula flutuante

Exercício 9
a) (0 00000001 00000000000000000000000)2 → 1,17549435 × 10−38

b) (0 11111110 11111111111111111111111)2 → 3,4028235 × 1038

c) (1 00000001 00000000000000000000000)2 → −1,17549435 × 10−38

d) (1 11111110 11111111111111111111111)2 → −3,4028235 × 1038

Exercício 10
a) Número negativo. O expoente é 1 − 3 = −2, resultando em −2−2 × 1,11012 , ou seja −20 ×
0,0111012 .
Em decimal, corresponde a −(2−2 + 2−3 + 2−4 + 2−6 ) = −2−6 × (24 + 23 + 22 + 1) =
16 + 8 + 4 + 1 29
− =− .
64 64
b) Número positivo. O expoente é 5 − 3 = 2, resultando em 22 × 1,10012 , ou seja 20 × 110,012 .
Em decimal, corresponde a 6 + 2−2 = 6,25.
3 1+2
c) Número positivo. = = 2−3 × 112 = 2−2 × 1,12 .
8 8
O expoente da representação é −2 + 3 = 1 = 0012 e o significando é 0,10002 .
A representação completa é (0 001 1000)2 .

Exercício 11
a) A: 42040000H ; B: C0380000H

b) i) A + B: 41F10000H
ii) B − A: C20F8000H
iii) 3 × B: C10A0000H

c) A + B = 30,125 B − A = −35,875 3 × B = −8,625.

Exercício 12
a) 40000000H b) 42150000H c) C2250000H d) C29D0000H

Exercício 13
a) 010000010011101000000000000000002 b) 41460000H (falta indicar os passos)

Exercício 14
a) 110000010010010000000000000000002 b) 13,2510 (falta indicar os passos)

Exercício 15
a) C1400000H b) C2080000H (falta mostrar os passos).

Arquitetura e Organização de Computadores Pág. 84 de 104


Soluções dos exercícios propostos — Circuitos combinatórios

Exercício 16
Opção A.

Exercício 17
a) 3,3895314 × 1038

b) 1,17549435 × 10−38

c) representação de 2,6 × 106 : 0x4a1e


representação de 3,1 × 104 : 0x46f2
resultado da multiplicação: 0x5195 → 79993765888.
O resultado exato seria 80600000000. Logo, o erro absoluto é 606234112 e o erro relativo
é 0,752 %. A representação mais curta provoca um erro, mas o respetivo valor relativo
é pequeno. A implementação física de Bfloat16 exige menos recursos que a de precisão
simples e pode ser feita mais rapidamente.

3 Circuitos combinatórios
Exercício 10
a) F (A, B, C, D, E) = A·B + C ·E

b) F (A, B, C) = A·C

c) G(A, B, C) = A·B + A·C

d) F (A, B, C, D) = B ·C + A·C ·D

e) F (W, X, Y, Z) = W + X ·Z + X ·Y

f) F (A, B, C, D) = A·C + C ·D

Exercício 11
a) A B C F b) X Y Z G c) W X Y Z F
0 0 0 1 0 0 0 1 0 0 0 0 0
0 0 1 0 0 0 1 0 0 0 0 1 0
0 1 0 1 0 1 0 1 0 0 1 0 0
0 1 1 0 0 1 1 0 0 0 1 1 1
1 0 0 1 1 0 0 1 0 1 0 0 0
1 0 1 1 1 0 1 1 0 1 0 1 0
1 1 0 0 1 1 0 0 0 1 1 0 0
1 1 1 0 1 1 1 1 0 1 1 1 1
1 0 0 0 0
1 0 0 1 0
1 0 1 0 0
1 0 1 1 1
1 1 0 0 0
1 1 0 1 0
1 1 1 0 0
1 1 1 1 0

Arquitetura e Organização de Computadores Pág. 85 de 104


Soluções dos exercícios propostos — Circuitos combinatórios

Exercício 12
a) X Y Z F b) F = (X + Z)·(X + Y + Z). c) —
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 1
1 0 0 1
1 0 1 1
1 1 0 1
1 1 1 0

Exercício 13
a) Y = A + B. b) —

Exercício 14
a) F = A·B + C b) A B C F c) Nota: usar a expressão simplificada.
0 0 0 1
0 0 1 0
0 1 0 1
0 1 1 1
1 0 0 1
1 0 1 0
1 1 0 1
1 1 1 0

Exercício 15
a) X Y Z F F = (X + Y + Z)·X
0 0 0 0
0 0 1 1
0 1 0 1
0 1 1 1
1 0 0 0
1 0 1 0
1 1 0 0
1 1 1 0

Arquitetura e Organização de Computadores Pág. 86 de 104


Soluções dos exercícios propostos — Circuitos combinatórios

b) A B C D G
0 0 0 0 0
0 0 0 1 1
0 0 1 0 1
0 0 1 1 0
0 1 0 0 1
0 1 0 1 0
0 1 1 0 1
0 1 1 1 0
1 0 0 0 0
1 0 0 1 0
1 0 1 0 1
1 0 1 1 0
1 1 0 0 1
1 1 0 1 1
1 1 1 0 1
1 1 1 1 1
G = A·B + A·B ·C ·D + A·B ·C ·D + A·B ·C ·D + A·B ·C ·D + A·B ·C ·D

Exercício 16
Nota: construir tabela de verdade, exprimir G na forma de produto de somas e simplificar.
G = (A + B)·(A + C)·(A + B + C)

Exercício 17
a) A B S F
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 1
1 0 0 1
1 0 1 0
1 1 0 1
1 1 1 1

b) F (A, B, S) = A·S + B ·S.

c) Nota: desenhar circuito lógico que realiza F (A, B, S).

d) G(X, Y, S) = X ·Y + X ·S + Y ·S.

e) Nota: deduzir expressão da função realizada pelo circuito e simplificar. Alternativamente,


pode ser construída a tabela de verdade a partir da expressão deduzida do circuito e da
expressão obtida na alínea anterior, com fins comparativos.

Arquitetura e Organização de Computadores Pág. 87 de 104


Soluções dos exercícios propostos — Circuitos combinatórios

Exercício 18
a) A3 A2 A1 A0 S b) S = A3 ·A1 ·A0
0 0 0 0 0
0 0 0 1 0
0 0 1 0 0
0 0 1 1 0
0 1 0 0 0
0 1 0 1 0
0 1 1 0 0
0 1 1 1 0
1 0 0 0 1
1 0 0 1 0
1 0 1 0 0
1 0 1 1 0
1 1 0 0 1
1 1 0 1 0
1 1 1 0 0
1 1 1 1 0

Exercício 19
a) A B Ci Co S
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1

b) S(A, B, Ci) = A·B ·Ci + A·B ·Ci + A·B ·Ci + A·B ·Ci.
Co(A, B, Ci) = A·B ·Ci + A·B ·Ci + A·B ·Ci + A·B ·Ci.

c) Nota: para ambas as funções, S e Co, deduzir expressão da função realizada pelo circuito
e simplificar. Alternativamente, pode ser construída a tabela de verdade a partir das ex-
pressões deduzidas do circuito e das expressões obtidas na alínea anterior, verificando-se que
coincidem. Esta segunda opção poderá ser a mais simples.

d) Co = 1, w3 = 1, w2 = 1, w1 = 0, Ci = 0, S3 = 1, S2 = 0, S1 = 0 e S0 = 0.

Arquitetura e Organização de Computadores Pág. 88 de 104


Soluções dos exercícios propostos — Circuitos combinatórios

Exercício 20
a) A1 A0 B1 B0 M AIOR b) M AIOR = A1·B1 + A0·B1·B0 + A1·A0·B0 .
0 0 0 0 0
0 0 0 1 0
0 0 1 0 0
0 0 1 1 0
0 1 0 0 1
0 1 0 1 0
0 1 1 0 0
0 1 1 1 0
1 0 0 0 1
1 0 0 1 1
1 0 1 0 0
1 0 1 1 0
1 1 0 0 1
1 1 0 1 1
1 1 1 0 1
1 1 1 1 0

Exercício 21
O circuito determina o máximo de A e B.

Exercício 22
a)
MUX4:1

0 D0

0 D1
Y A.B
0 D2

1 D3

S1 S0

A B

b)
MUX4:1

0 D0

1 D1
Y F(X ,Y)
1 D2

0 D3

S1 S0

X Y

c) Por exemplo, sendo F uma função definida por:

Arquitetura e Organização de Computadores Pág. 89 de 104


Soluções dos exercícios propostos — Circuitos combinatórios

X Y Z F
0 0 0 0
0 0 1 1
0 1 0 1
0 1 1 1
1 0 0 0
1 0 1 0
1 1 0 1
1 1 1 0

então o circuito resultante será:


MUX4:1

Z D0

1 D1
Y F(X ,Y,Z)
0 D2

D3

S1 S0

X Y

Exercício 23
a) AB = 01 ⇒ Lvm = 0, Llj = 1 e Lvr = 0.
AB = 11 ⇒ todas as lâmpadas se mantêm desligadas, pois a saída que fica ativa é Y3 e
não é usada.

b) É impossível ter simultaneamente duas saídas de um descodificador binário ativas.

Exercício 24
a) O circuito seguinte implementa um descodificador binário 2-para-4.

I1 I0

Q3
2-4 DEC

Q3 Q2
I1 Q2
Q1
I0 Q1
Q0 Q0

b) O circuito seguinte é um descodificador binário 2-para-4 com sinal de habilitação (enable).

Arquitetura e Organização de Computadores Pág. 90 de 104


Soluções dos exercícios propostos — Circuitos combinatórios

EN I1 I0

Q3
2-4 DEC
EN
Q3 Q2
I1 Q2
Q1
I0 Q1
Q0 Q0

c) O circuito seguinte mostra um descodificador binário 3-para-8 (sem sinal de habilitação).


Ter em atenção a numeração das saídas, que depende da forma como a entrada I2 é ligada.

3-8 DEC
2-4 DEC
I2 EN
Q3 Q7
I1 I1 Q2 Q6

I0 I0 Q1 Q5
Q0 Q4

2-4 DEC
EN
Q3 Q3
I1 Q2 Q2

I0 Q1 Q1
Q0 Q0

d) O circuito seguinte mostra um descodificador binário 3-para-8 com sinal de habilitação.

3-8 DEC
2-4 DEC
EN
EN
I2 Q3 Q7
I1 I1 Q2 Q6

I0 I0 Q1 Q5
Q0 Q4

2-4 DEC
EN
Q3 Q3
I1 Q2 Q2

I0 Q1 Q1
Q0 Q0

Arquitetura e Organização de Computadores Pág. 91 de 104


Soluções dos exercícios propostos — Circuitos sequenciais

Exercício 25
a) Q0 = I2 ·I1 ·I0 e Q3 = I2 ·I1 ·I0 .

b) Ligar X à entrada I0 , Y à entrada I1 e Z à entrada I2 .


Para X = 1, Y = 1, Z = 0, apenas a saída Q3 = 1.
Com X = 0, Z = 1 podemos ter uma de duas saídas a 1 (dependendo do valor de Y ): Q4 e
Q6 . F deve tomar o valor 1 apenas nestes casos. Logo, F (X, Y, Z) = Q3 + Q4 + Q6 .
O circuito resultante é:
3-8 BINDEC

Z I2
Q7
Y I1 Q6

I0 Q5
X
Q4 F(X,Y,Z)

Q3
Q2
Q1
Q0

4 Circuitos sequenciais
Exercício 6

CLK

Exercício 7
a) D(J, K, Q) = J ·Q + K ·Q

b)

CLK

Arquitetura e Organização de Computadores Pág. 92 de 104


Soluções dos exercícios propostos — Circuitos sequenciais

Exercício 8
a) D0 = EN ⊕ Q0 e D1 = EN ·Q0 ⊕ Q1

b) A figura seguinte mostra as formas de onda pedidas.

CLK

EN

Q0

Q1

c) Estado 00 (estado inicial).

Exercício 9
a) 0101001101000010.

b) A saída T assinala as mudanças de valor da entrada X.

c) A saída do contador fornece o número de transições de valor lógico da entrada X, até ao


máximo de 15.

Exercício 10
a) 4 bytes.

b) Descodificador binário.

c) O conteúdo do registo 1 passa a ser 1111.

d) A entrada de enable permite habilitar a escrita de um valor num registo. A entrada reset
permite limpar, isto é, escrever o valor 0 num dos registos.

e) O descodificador permite identificar o registo a aceder para uma operação de escrita ou de


leitura. Quanto ao multiplexador, permite selecionar a saída de um registo, ou seja, fazer a
leitura desse registo.

f) Um segundo multiplexador de 8 (entradas de 4 bits) para 1, assim como uma segunda entrada
de 3 bits com o endereço do registo a ler.

Exercício 11
a) [0x4000; 0x5FFF]
Descodificação parcial, pois há um bit (A12 ) que não é usado pela RAM, originando dois
endereços para cada entrada da RAM.

b) 0xCFFF

Arquitetura e Organização de Computadores Pág. 93 de 104


Soluções dos exercícios propostos — Linguagem assembly

c) O circuito resulta da expressão CSROM = A15 ·A14 A13 ·A12 ·A11 (AND com duas entradas
negadas).

Exercício 12
a) ROM1: 16 KiB
RAM1: 16 KiB
RAM2: 4 KiB

b) CSROM1 = A15 ·A14


CSRAM1 = A15 ·A14
CSRAM2 = A15 ·A14 ·A13 ·A12

c) —

Exercício 13
Como cada circuito só armazena 4 bits por posição, é necessário usar 2 circuitos para a mesma
posição (um para guardar os bits D[3,0] e outro para os bits D[7,4]. Um grupo de dois circuitos
RAM armazena os valores dos endereços pares entre 0 e 2047 (0, 2, 4, . . . , 2046), enquanto o
segundo grupo guarda os valores dos endereços ímpares (1, 3, 5, . . . , 2047).
O bit A0 deve ser usado para selecionar o grupo de RAMs pretendido.

a) A figura apresenta uma solução. Os circuitos RAM1 e RAM2 realizam o grupo que armazena o
conteúdo correspondente aos endereços pares.
CPU

A13..A0 14

[A10,A1] [A10,A1] [A10,A1] [A10,A1]


RAM 1024x4 RAM 1024x4 RAM 1024x4 RAM 1024x4

10 A9...A0 10 A9...A0 10 A9...A0 10 A9...A0

RAM1 RAM2 RAM3 RAM4


CS CS CS CS
D3...D0 D3...D0 D3...D0 D3...D0
4 [D3,D0] 4 [D7,D4] 4 4
D7..D0 8
A13
A13 A12
A12 A11
A11 A0
A0

b) O endereço 250 é par. Logo, os dados vão ficar guardados na posição 250/2=125 dos circuitos
RAM1 e RAM2. O valor A (bits [D0,D3]) é armazenado em RAM1 e o valor 9 em RAM2.

5 Linguagem assembly

Arquitetura e Organização de Computadores Pág. 94 de 104


Soluções dos exercícios propostos — Linguagem assembly

Exercício 6
É necessário definir uma atribuição arbitrária de variáveis a registos.

a) Atribuição: f → x0, g → x1, j → x2.

add x0, x2, 2


add x0, x1, x0

b) Atribuição: a → x0, b → x1, d → x2, f → x3, k → x4.

add x4, x0, x1


sub x4, x4, x3
add x4, x4, x2
add x4, x4, -30

c) Atribuição: f → x0, g → x1, h → x2, A → x7.

ldur x0, [x7, 32]


add x0, x0, x1
add x0, x0, x2

d) Atribuição: f → x0, g → x2, A → x6, B → x7.

ldur x5, [x7, 80]


lsl x5, x5, 3
add x5, x5, x6
ldur x0, [x5]
sub x0, x2, x0

e) Atribuição: f → x0, g → x1, h → x2, k → x3, A → x6.

add x10, x2, 9


lsl x10, x10, 3
add x10, x6, x10
ldur x0, [x10]
add x0, x0, x3
sub x0, x0, x1

f) Atribuição: f → x0, g → x1, A → x6, B → x7.

ldur x10, [x7, 16]


add x10, x10, 4
lsl x10, x10, 3
add x10, x6, x10
ldur x10, [x10]
sub x0, x1, x10

Arquitetura e Organização de Computadores Pág. 95 de 104


Soluções dos exercícios propostos — Linguagem assembly

Exercício 7
a) Atribuição: f → x0, g → x1, h → x2, i → x3, j → x4
A expressão correspondente é: f = f + g + h + i + j

b) Atribuição: f → x0, A → x6
A expressão correspondente é: f = A[1]

c) Atribuição: f → x0, g → x1, A → x6


A expressão correspondente é: f = A[g-3]

Exercício 8
a) 0x55775577DDFFDDFF

b) 0x5555555555555550

c) 0x00000000000000AA

Exercício 9
a) mov X2, X1
cmp X1, XZR
b.ge pos
sub X2, XZR, X2
pos: ...
Ou, tirando proveito da instrução CSNEG:
cmp X1, 0
csneg X2, X1, X1, ge

b) mov X1, 0
cmp X2, X3
b.le pos
mov X1, 1
pos: ...
Ou, tirando proveito da instrução CSINC:
cmp X2, X3
csinc X1, XZR, XZR, le

Exercício 10
A cada iteração do ciclo L1 será guardado em memória (no endereço dado pelo conteúdo do registo
X5) o valor do registo X4. Como em cada ciclo o valor do registo X4 sofre um deslocamento de 4
bits para a esquerda, o seu valor será zero após 16 iterações e consequentemente a instrução de
salto não é realizada, terminando o programa.
Tendo em conta os valores iniciais, a tabela com o conteúdo da memória é:

Arquitetura e Organização de Computadores Pág. 96 de 104


Soluções dos exercícios propostos — Linguagem assembly

Endereço Valor
0x7D0 0x0000000012345678
0x7D8 0x0000000123456780
0x7E0 0x0000001234567800
0x7E8 0x0000012345678000
0x7F0 0x0000123456780000
0x7F8 0x0001234567800000
0x800 0x0012345678000000
0x808 0x0123456780000000
0x810 0x1234567800000000
0x818 0x2345678000000000
0x820 0x3456780000000000
0x828 0x4567800000000000
0x830 0x5678000000000000
0x838 0x6780000000000000
0x840 0x7800000000000000
0x848 0x8000000000000000

Exercício 11
Uma possível solução:

1 mov x0, 0
2 ciclo : ldur x1, [ x4 ]
3 cmp x1, 0
4 b.eq fim
5 add x4, x4, 8
6 add x0, x0, 1
7 b ciclo
8 fim : ...

Exercício 12
a) Fragmento 1: 20; fragmento 2: 200.

b) Fragmento 1: 5 × N + 2; fragmento 2: (1 + 3 × 10 + 2) × N = 33 × N .

Exercício 13
Uma possível solução:

Arquitetura e Organização de Computadores Pág. 97 de 104


Soluções dos exercícios propostos — Linguagem assembly

1 mov X6, 100 // dimensão das seq.


2 mov X0, 1
3 proximo : ldur X1, [ X4 ] // extrai elemento de A
4 ldur X2, [ X5 ] // extrai elemento de B
5 cmp X1,X2 // compara os elementos extraidos
6 b.eq continua // continua se forem iguais
7 mov X0,0 // termina se forem diferentes
8 b fim
9 continua : subs X6,X6, 1
10 b.eq fim
11 add X4,X4, 8 // se não chegou ao fim
12 add X5,X5, 8 // passar ao próximo elemento
13 b proximo
14 fim : ...

Exercício 14
Uma solução entre outras possíveis:

1 mov X8, 50 // contador : X8


2 mov X7, 0 // resultado a zero
3 ciclo : ldur X9, [ X0 ]
4 ands X10, X9, 1
5 b.eq prox // par
6 add X7, X7, 1 // ímpar
7 prox : add X0, X0, 8 // próximo endereço
8 subs X8, X8, 1 // decrementar contador
9 b.ne ciclo
10 ...

Exercício 15
a) Parâmetros da sub-rotina:
• X0: endereço-base da sequência
• X1: número de elementos da sequência

1 soma : mov X2, 0 // coloca contador a 0


2 L1 : cmp X1, 0 // verifica se chegou ao fim
3 b.eq L2 // terminar
4 ldur X3, [ X0 ] // obter um elemento
5 add X2, X2, X3 // acumular
6 add X0, X0, 8 // endereço do próximo elemento
7 add X1, X1, -1 // ajustar nº de elementos
8 b L1 // repetir ( próximo elemento )
9 L2 : mov X0, X2 // devolver resultado em X0
10 ret

b) Parâmetros da sub-rotina:
• X0: endereço-base da sequência

Arquitetura e Organização de Computadores Pág. 98 de 104


Soluções dos exercícios propostos — Linguagem assembly

• X1: número de elementos da sequência

1 impar : mov X7, 0 // coloca contador a 0


2 L21 : cmp X1, 0 // verifica se chegou ao fim
3 b.eq L23 // terminar
4 ldur X9, [ X0 ] // obter um elemento
5 ands X10, X9, 1 // testar se é impar
6 beq L22 // se par, não contabiliza
7 add X7, X7, 1 // contabilizar
8 L22 : add X0, X0, 8 // endereço do próximo elemento
9 sub X1, X1, 1 // ajustar nº de elementos
10 b L21 // repetir ( próximo elemento )
11 L23 : mov X0, X7 // devolver resultado em X0
12 ret

c) Parâmetros da sub-rotina:
• X0: endereço-base da sequência
• X1: número de elementos da sequência
• X2: valor de limiar

1 limiar : mov X7, 0 // coloca contador a 0


2 L31 : cmp X1, 0 // verifica se chegou ao fim
3 b.eq L33 // terminar
4 ldur X9, [ X0 ] // obter um elemento
5 cmp X9, X2 // testar se é maior que o limiar
6 b.lt L32 // se menor, não contabiliza
7 add X7, X7, 1 // contabilizar
8 L32 : add X0, X0, 8 // endereço do próximo elemento
9 sub X1, X1, 1 // ajustar nº de elementos
10 b L31 // repetir ( próximo elemento )
11 L33 : mov X0, X7 // devolver resultado em X0
12 ret

d) Parâmetros da sub-rotina:
• X0: endereço-base da sequência 1
• X1: endereço-base da sequência 2
• X2: número de elementos de cada sequência

Arquitetura e Organização de Computadores Pág. 99 de 104


Soluções dos exercícios propostos — Organização de um CPU

1 iguais : mov X7, 1 // coloca resultado a 1


2 L41 : cmp X2, 0 // verifica se chegou ao fim
3 b.eq L43 // terminar
4 ldur X9, [ X0 ] // obter um elemento de cada sequência
5 ldur X10, [ X1 ]
6 cmp X9, X10
7 b.ne L42 // Se nao forem iguais termina
8 add X0, X0, 8 // endereço do próximo elemento
9 add X1, X1, 8
10 sub X2, X2, 1 // ajustar nº de elementos
11 b L41 // repetir ( próximo elemento )
12 L42 : mov X7, 0 // resultado a 0
13 L43 : mov X0, X7 // devolver resultado em X0 ( 1 se iguais )
14 ret

6 Organização de um CPU
Exercício 7
Ter em atenção que PcSrc = AND(Zero, Branch).

a) RegWrite=1, MemRead=1, ALUSrc=1, MemWrite=0, MemtoReg=1, PCSrc=0,


ALUOp=00, Reg2Loc=X.
Todos os componentes realizam trabalho útil, exceto Shift left 2 e o somador para ende-
reço de saltos (Add). O valor Read data 2 também não é utilizado.

b) RegWrite=0, MemRead=0, ALUSrc=1, MemWrite=1, MemtoReg=X, PCSrc=0, ALUOp=00,


Reg2Loc=1.
Todos os componentes realizam trabalho útil, exceto Shift left 2, somador para endereços
de saltos (Add) e multiplexador MemtoReg. utilizado.

c) RegWrite=0, MemRead=0, ALUSrc=0, MemWrite=0, MemtoReg=X, ALUOp=01, Reg2Loc=1.


(
0 se X9 6= 0
PCSrc =
1 se X9 = 0

Todos os componentes realizam trabalho útil, exceto memória de dados (D-Mem) e multiple-
xador MemtoReg. O valor Read data 1 também não é utilizado.

Exercício 8
a) Instrução CBZ. b) Instrução STUR.

Arquitetura e Organização de Computadores Pág. 100 de 104


Soluções dos exercícios propostos — Memória Cache

Exercício 9
Acrescentar um multiplexador que receberá na entrada 0 a saída proveniente do multiplexador
controlado por PCSrc e na entrada 1 a saída Read data 1 do banco de registos. Este novo
multiplexador deverá ser controlado por um sinal adicional de controlo, BranchReg, tal que
BranchReg=1 se opcode=11010110000 e BranchReg=0 no caso contrário.

Exercício 10
a) 0xF8428228.

b) 17. Sim.

c) Indefinido (Reg2Loc=X). Não.

d) 8. Sim.

e) MemRead=1, MemWrite=0.

f) 0xB400000B; 0, não; 11, sim; 11, não; MemRead=0, MemWrite=0.

Exercício 11
a) I-Mem → Regs → ALU → D-Mem → Mux . Tempo: 1100 ps.

b) I-Mem → Control → Mux → Regs → Mux → ALU → Mux (PCSrc). Tempo: 910 ps.

Exercício 12
a) 320 ps.

b) RegWrite. 700 ps para a instrução mais lenta (LDUR).

c) Reg2Loc. 120 ps. Evita que STUR demore mais que 1100 ps, correspondente à instrução mais
lenta (LDUR).

7 Memória Cache
Exercício 3
a) Etiqueta: 12 bit; índice: 4 bit; espaço de endereçamento: 0x00000 - 0x3ffff; capacidade
máxima: 256 KiB.

b) 1. Lê valor 0x6198fa34 de memória cache.


2. Lê valor de memória principal e coloca-o na posição 5, com v=1 e etiqueta 0x8d1.
3. Lê valor de memória principal e coloca-o na posição 12, com v=1 e etiqueta 0xfde.
4. Escreve valor 0x1212abab na posição 1, v=1, e atualiza a memória principal no endereço
0x048c4.
5. Não altera memória cache (não existe informação em cache para este endereço, porque
a etiqueta é diferente); coloca valor 0x00001111 em memória principal no endereço
0x3f7d0.
6. Não altera memória cache (não existe informação válida em cache para este endereço);
coloca valor 0xaaaabbbb em memória principal no endereço 0x1dde8.

Arquitetura e Organização de Computadores Pág. 101 de 104


Soluções dos exercícios propostos — Memória Cache

Exercício 4
a) O campo d indica se o valor de conteúdo em memória cache é diferente do valor em memória
principal.

b) A determinação do índice e da etiqueta faz-se como no problema anterior.

1. Índice 4, etiqueta 0xb7c e v=1: read hit. Ler valor 0x6198fa34 de memória cache (bloco
4).
2. Endereço igual ao da alínea anterior: write hit. Como d=0, não é necessário fazer write
back. O valor 0x33334444 é escrito na memória cache (bloco 4), v=1, d=1, etiqueta
0xb7c.
3. Índice 9, etiqueta 0x431, v=1: write miss. Como v=1 e d=1, é necessário fazer write
back : escrever o valor 0xffffeffe (posição 9) em memória (endereço 0x21de4). O valor
0x9999aaaa é colocado na posição 9 da memória cache, com v=1, d=1, etiqueta 0x431.
4. Índice 5, etiqueta 0x8d1 e v=0: read miss. Como v=0, não faz write back (valor de d
não interessa neste caso). Ler valor de memória principal e colocá-lo na posição 5, com
v=1, d=0, etiqueta 0x8d1.
5. Índice 12, etiqueta 0xfde, v=0: read miss. Como v=0, não faz write back. Ler valor de
memória principal e colocá-lo na posição 12, com v=1, d=0, etiqueta 0xfde.
6. Índice 9, etiqueta 0x877. O bloco 9 foi alterado pelo terceiro acesso, pelo que a etiqueta
é diferente (etiqueta atual do bloco 0x431). Como v=1, ocorre um write miss. Como
d=1, é necessário efetuar write back : escrever o valor valor 0x9999aaaa na posição de
endereço 0x00010c64. Escrever valor 0xbbbb7777 no bloco 9 da memória cache, v=1,
d=1, etiqueta 0x877.
7. Índice 7, etiqueta 0xabf, v=1: como as etiquetas não coincidem, ocorre write miss.
Como d=0, não existe necessidade de fazer write-back. Colocar o valor 0x1212abab em
memória cache (bloco 7) com v=1, d=1.
8. Índice 12, etiqueta 0xfde, v=1 (mesmo endereço que no quinto acesso, que alterou este
bloco): read hit. Basta atualizar valor em memória cache: escreve valor 0x00001111 no
bloco 12 com v=1, d=1, etiqueta 0xfde (mantém etiqueta).

Exercício 5
a) 59 bits

b) 0x2a5d04aa

c) O conteúdo do bloco 0 é alterado para 2a 5d 04 aa 00 00 00 00.

d) 0x000000cc

Exercício 6
a) P1: 1,61 GHz; P2: 1,52 GHz.

b) P1: 8,6 ns; P2: 6,26 ns.

c) Ter em atenção que existem 1 + 0,36 acessos a memória por instrução.


P1: CPI=1 + 0,114 × 1,36 × 70/0,62=18,5; P2: CPI=12,54.

Arquitetura e Organização de Computadores Pág. 102 de 104


Soluções dos exercícios propostos — Desempenho

Exercício 7
a) 90 faltas/103 instruções.

b) 6,43 %.

c) Um acesso a memória custa 80 ciclos (período de relógio: 1 ns).

i) CPIefetivo = 1,2 + 1,4 × 80 = 113,2 ciclos/instrução.


ii) CPIefetivo = 1,2 + 0,0643 × 1,4 × 80 = 8,4 ciclos/instrução.

8 Desempenho
Exercício 9
a) IPCP1 = 1,43 (instruções/ciclo)
IPCP2 = 2,00 (instruções/ciclo)
IPCP3 = 3,33 (instruções/ciclo)

b) 2,1 GHz

c) 27 × 109

Exercício 10
a) P1 : texec = 1,87 ms P2 : texec = 1,00 ms
P2 é o processador mais rápido.

b) CPIP1 = 2,8 (ciclos/instrução)


CPIP2 = 2,0 (ciclos/instrução)

c) P1 : 2,8 × 106 P2 : 2 × 106

Exercício 11
P1 : 4 × 109 (instruções/segundo) P2 : 3 × 109 (instruções/segundo)

Exercício 12
a) C é o computador mais rápido (45 s).

b) C é 1,67 vezes mais rápido que B e 4,93 vezes mais rápido que A.

Exercício 13
a) texec = 675 ns

b) CPI = 1,93 (instruções/segundo)

c) A execução é 1,23 mais rápida e CPI = 1,69

Arquitetura e Organização de Computadores Pág. 103 de 104


Soluções dos exercícios propostos — Desempenho

Exercício 14
88 %

Exercício 15
a) 1,67 b) 5

Exercício 16
a) Desenhar o gráfico da função

1 10
S(f ) = = 0≤f ≤1
f 10 − 9 × f
+ (1 − f )
10

5
b) f = ≈ 0,56 =56 %
9
c) Percentagem de tempo gasto em modo vetorial após introdução da alteração: 1
9 ≈11 %

d) Speedup máximo: 10; para obter speedup de 5 é preciso que f = 8


9 ≈88,9 %

e) Duplicação de desempenho da unidade vetorial: S ≈ 2,99. Sem duplicação de desempenho,


o mesmo speedup é obtido para f ≈ 0,74 =74 %. Provavelmente é mais fácil passar de 70 %
para 74 % do que duplicar o desempenho da unidade vetorial.

Exercício 17
O ganho de rapidez da nova versão é 2.

Arquitetura e Organização de Computadores Pág. 104 de 104

Você também pode gostar