Exercicios AOCO FEUP
Exercicios AOCO FEUP
Exercicios AOCO FEUP
Exercícios
Outubro de 2020
Conteúdo
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
Exercício 1
Realizar as conversões de base indicadas.
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
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
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.
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
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 .
Exercício 3
Represente os seguintes números decimais em sinal e grandeza e em complemento para 2
com 6 bits.
a) 12 = 8 + 4 = 11002
• 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).
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.
i)
110000012 = 27 + 26 + 20 = 128 + 64 + 1 = 193
1 0100111 = −39
− 25 + 7
iii) Os valores são ambos negativos.
compl. 2
110000012 −→ 001111112 = 63
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]
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.
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 )
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:
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.
Exercício 8
Considere a representação em complemento para 2 dos valores X e Y indicada:
X = 1100102 e Y = 1010112
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
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.
j) 111010 =?16
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.
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.
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.
Exercício 16
Considere os seguintes números binários: X = 11100011 e Y = 01001000.
Exercício 17
Considere os números P = 11110102 e Q = 01000102 com 7 bits.
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).
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.
Exercício 20
Considere os números S = 110010002 e T = 000100012 representados em complemento para 2
com 8 bits.
Exercício 21
Considere os números de 8 bits expressos, nas bases indicadas, por: X2 = 10111100, Y10 = 73 e
Z16 = 9E.
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
d) Qual é o número mínimo de bits necessário para representar o valor com sinal y.
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
b) Determine o sinal de X + Y .
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 .
1,1001010 · · · 0
×1,1000000 · · · 0
0 0000000 · · · 0
···
11001010 · · · 0
11001010 · · · 0
10,01011110 ··· 0
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:
b) em complemento para 2;
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
↓ ↓
−01111101110000000000000000000002
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á:
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)
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
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)
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
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
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).
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
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)
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.
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 .
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 :
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
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.
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.
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.
Exercício 1
Simplifique algebricamente as seguintes funções booleanas usando teoremas da álgebra de
Boole.
c) F (X, Y, Z) = X + X ·Z + X ·Y .
d) G(X, Y, Z) = X ·Y ·Z + X ·Y ·Z + X ·Y ·Z.
c) F (X, Y, Z) = X + X ·Z + X ·Y
= X ·(1 + Y ) + X ·Z
= X + X ·Z
= X +Z
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
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
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.
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
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
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
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.
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)
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.
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.
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
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
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
Exercício 8
Seja a função booleana S = (A + B + C) · (A + B + C).
MUX8:1
D0
D1
D2
D3
D4 Y
D5
D6
D7
(M S B )
S2 S1 S0
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.
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 .
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
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:
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).
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.
Exercício 14
Considere a função booleana F (A, B, C) = A + B + C + A·B ·C.
Exercício 15
Considere as seguintes funções booleanas:
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.
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)
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.
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
B S
Ci
Co
d) Considere agora um somador de 4 bits, constituído por 4 somadores completos, como mostra
a figura.
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
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
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
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
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.
c) Mostrar como construir um descodificador 3-para-8 (sem enable) a partir de dois descodifi-
cadores 2-4 com entrada enable.
Exercício 25
Usar um descodificador binário 3-para-8 (entradas I0 . . . I2 , saídas Q0 . . . Q7 ) nas alíneas que se
seguem.
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.
CK
Q1
Q0
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
CLK
IN
OUT
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) 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 à
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.
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.
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
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
C LK
Q0
Q1
Q2
Q3
OUT
Exercício 5
Considere os sistemas de memória externa apresentados na figura seguinte.
RAM1 RAM2
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[12] A[13]
A[15] A[15] &
A[13]
A[15]
A[14] A[13]
(a) (b)
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
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:
CLK CLK
Q Q
CLK
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
CLK
Exercício 8
Considere o circuito sequencial da figura seguinte.
D0
Q0
EN D Q
CLK
D1
Q1
D Q
CLK 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
CLK
Exercício 10
A figura mostra a constituição de um banco de registos.
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.
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.
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
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.
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 -
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.
b) O valor 0x9A é guardado na posição 250. Onde fica guardada fisicamente a informação?
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.
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.
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.
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
(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
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.
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.
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)
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:
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:
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
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:
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.
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.
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 .
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.
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.
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.
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.
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.
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.
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.
d) Que percentagem de vetorização é necessária para obter metade do máximo ganho de rapidez
possí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.
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.
Exercício 2
Assuma as seguintes condições iniciais:
X0 = 0x00000000BEADFEED X1 = 0x00000000DEADFADE
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
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: ...
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.
b) O bit menos significativo de um número par é 0. A rotina seguinte baseia-se nesta proprie-
dade.
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
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.
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.
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]
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.
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.
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: ...
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.
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
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.
PCSrc
0
M
Add u
x
ALU
4 Addresult 1
RegWrite Shift
left 2
Instruction [31-21]
ALUOp
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).
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.
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:
Os valores lidos são examinados para determinar se uma dada falta está presente ou não.
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:
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.
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
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.
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:
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
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
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.
Exercício 5
Assuma que o processador da figura 7.1 recebe a seguinte instrução:
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00001 00002
ou 0x0000000000000010
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.
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
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.
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
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.
b) Qual é o número de registo fornecido à entrada Read register 1? O valor deste registo é
usado?
d) Qual é o número de registo fornecido à entrada Write register? O valor deste registo é
realmente alterado?
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
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.
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.
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) 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 %.
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
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
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):
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.
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.
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:
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
Exercício 11
a) 3 = 00112 ; 2 = 00102 ; −3 = 10112
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
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 ).
Exercício 16
a) X SS: 227; C2: −29
Y SS: 72; C2: 72
Exercício 17
a) PH =7A; Q10 =34
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
Exercício 20
a) S = −56; T = 17
b) S = 101110002 ; T = 000100012
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
Exercício 9
a) (0 00000001 00000000000000000000000)2 → 1,17549435 × 10−38
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
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).
Exercício 16
Opção A.
Exercício 17
a) 3,3895314 × 1038
b) 1,17549435 × 10−38
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
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
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
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
d) G(X, Y, S) = X ·Y + X ·S + Y ·S.
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.
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
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
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.
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
EN I1 I0
Q3
2-4 DEC
EN
Q3 Q2
I1 Q2
Q1
I0 Q1
Q0 Q0
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
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
Exercício 25
a) Q0 = I2 ·I1 ·I0 e Q3 = I2 ·I1 ·I0 .
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
Exercício 8
a) D0 = EN ⊕ Q0 e D1 = EN ·Q0 ⊕ Q1
CLK
EN
Q0
Q1
Exercício 9
a) 0101001101000010.
Exercício 10
a) 4 bytes.
b) Descodificador binário.
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.
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
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
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
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
Exercício 6
É necessário definir uma atribuição arbitrária de variáveis a registos.
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]
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 é:
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:
Exercício 14
Uma solução entre outras possíveis:
Exercício 15
a) Parâmetros da sub-rotina:
• X0: endereço-base da sequência
• X1: número de elementos da sequência
b) Parâmetros da sub-rotina:
• X0: endereço-base da sequência
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
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
6 Organização de um CPU
Exercício 7
Ter em atenção que PcSrc = AND(Zero, Branch).
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.
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.
d) 8. Sim.
e) MemRead=1, 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.
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.
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.
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
d) 0x000000cc
Exercício 6
a) P1: 1,61 GHz; P2: 1,52 GHz.
Exercício 7
a) 90 faltas/103 instruções.
b) 6,43 %.
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.
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
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 %
Exercício 17
O ganho de rapidez da nova versão é 2.