Arquitetura e Organização de Computadores Exercícios António José Araújo João Canas Ferreira Raul Moreira Vidal
Mestrado Integrado em Engenharia Informática e Computação Setembro de 2015
Conteúdo
1 Aritmé Aritmétic tica a binári binária a
1.1 Exercício Exercícioss resolvidos resolvidos . . . . . . . 1.2 Exercí Exercício cioss propost propostos os . . . . . . . 2 Vírgul Vírgula a flutuan flutuante te
1
1 7 10
2.1 Exercício Exercícioss resolvidos resolvidos . . . . . . . 10 2.2 Exercí Exercício cioss propost propostos os . . . . . . . 16 3 Circui Circuitos tos com combin binató atório rioss
18
3.1 Exercício Exercícioss resolvidos resolvidos . . . . . . . 18 3.2 Exercí Exercício cioss propost propostos os . . . . . . . 26 4 Circui Circuitos tos sequen sequenciai ciaiss
44
5.1 Exercício Exercícioss resolvidos resolvidos . . . . . . . 44 5.2 Exercí Exercício cioss propost propostos os . . . . . . . 49 6 Ling Lingua uage gem m assembly
6.1 Sumário Sumário das instruções instruções MIPS-32 MIPS-32
7 Organi Organizaç zação ão do proces processad sador or MIPS MIPS 67
7.1 Exercício Exercícioss resolvidos resolvidos . . . . . . . 67 7.2 Exercí Exercício cioss propost propostos os . . . . . . . 72 8 Memó Memóri ria a Cach Cache e
53
53
75
8.1 Exercício Exercícioss resolvidos resolvidos . . . . . . . 75 8.2 Exercí Exercício cioss propost propostos os . . . . . . . 77
Soluções dos dos exercí exercício cioss proposto propostoss 32 9 Soluções
4.1 Exercício Exercícioss resolvidos resolvidos . . . . . . . 32 4.2 Exercí Exercício cioss propost propostos os . . . . . . . 39 5 Desem Desempen penho ho
6.2 Exercício Exercícioss resolvidos resolvidos . . . . . . . 54 6.3 Exercí Exercício cioss propost propostos os . . . . . . . 63
9.1 9.2 9.3 9.4 9.5 9.5 9.6 9.6 9.7 9.8
Aritmé Aritmétic ticaa bin binári áriaa . . . . . . . . Vírgul Vírgulaa flutuan flutuante te . . . . . . . . . Circuitos Circuitos combinató combinatórios rios . . . . . Circuitos Circuitos sequenci sequenciais ais . . . . . . . Dese Desempe mpenh nhoo . . . . . . . . . . . . Ling Lingua uage gem m assembly . . . . . . . Organizaçã Organizaçãoo do processador processador MIPS Memór Memória ia Cache Cache . . . . . . . . . .
81
81 83 84 89 91 93 97 98
Esta coletânea reúne exercícios resolvidos e propostos sobre a matéria lecionada em 2014/15 na unidade curricular de Arquitetura de Arquitetura e Organização de Computadores do 1o ano do Mestrado Integrado em Engenharia Informática e Computação da Faculdade de Engenharia da Universidade do Porto.
Conteúdo
1 Aritmé Aritmétic tica a binári binária a
1.1 Exercício Exercícioss resolvidos resolvidos . . . . . . . 1.2 Exercí Exercício cioss propost propostos os . . . . . . . 2 Vírgul Vírgula a flutuan flutuante te
1
1 7 10
2.1 Exercício Exercícioss resolvidos resolvidos . . . . . . . 10 2.2 Exercí Exercício cioss propost propostos os . . . . . . . 16 3 Circui Circuitos tos com combin binató atório rioss
18
3.1 Exercício Exercícioss resolvidos resolvidos . . . . . . . 18 3.2 Exercí Exercício cioss propost propostos os . . . . . . . 26 4 Circui Circuitos tos sequen sequenciai ciaiss
44
5.1 Exercício Exercícioss resolvidos resolvidos . . . . . . . 44 5.2 Exercí Exercício cioss propost propostos os . . . . . . . 49 6 Ling Lingua uage gem m assembly
6.1 Sumário Sumário das instruções instruções MIPS-32 MIPS-32
7 Organi Organizaç zação ão do proces processad sador or MIPS MIPS 67
7.1 Exercício Exercícioss resolvidos resolvidos . . . . . . . 67 7.2 Exercí Exercício cioss propost propostos os . . . . . . . 72 8 Memó Memóri ria a Cach Cache e
53
53
75
8.1 Exercício Exercícioss resolvidos resolvidos . . . . . . . 75 8.2 Exercí Exercício cioss propost propostos os . . . . . . . 77
Soluções dos dos exercí exercício cioss proposto propostoss 32 9 Soluções
4.1 Exercício Exercícioss resolvidos resolvidos . . . . . . . 32 4.2 Exercí Exercício cioss propost propostos os . . . . . . . 39 5 Desem Desempen penho ho
6.2 Exercício Exercícioss resolvidos resolvidos . . . . . . . 54 6.3 Exercí Exercício cioss propost propostos os . . . . . . . 63
9.1 9.2 9.3 9.4 9.5 9.5 9.6 9.6 9.7 9.8
Aritmé Aritmétic ticaa bin binári áriaa . . . . . . . . Vírgul Vírgulaa flutuan flutuante te . . . . . . . . . Circuitos Circuitos combinató combinatórios rios . . . . . Circuitos Circuitos sequenci sequenciais ais . . . . . . . Dese Desempe mpenh nhoo . . . . . . . . . . . . Ling Lingua uage gem m assembly . . . . . . . Organizaçã Organizaçãoo do processador processador MIPS Memór Memória ia Cache Cache . . . . . . . . . .
81
81 83 84 89 91 93 97 98
Esta coletânea reúne exercícios resolvidos e propostos sobre a matéria lecionada em 2014/15 na unidade curricular de Arquitetura de Arquitetura e Organização de Computadores do 1o ano do Mestrado Integrado em Engenharia Informática e Computação da Faculdade de Engenharia da Universidade do Porto.
1 Aritmética binária 1.1 Exercício Exercícioss resolvido resolvidoss Exercício 1
Realizar as conversões de base indicadas. a) 7210 =? 2 =? 16
b) 25910 =? 2 =? 16
100000,,112 =? 10 =? 16 d) 100000
e) 1BEEF16 =? 2
c) 11102 =? 10 =? 16
a) A conve conversã rsãoo de decimal decimal para para qualqu qualquer er base de represen representaç tação ão pode ser feita feita por divisõe divisõess 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 = 2 6 + 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 hexadecimal. 100 1000 = 48H 4 8
Nota: O índice ’H’, tal como ’16’, indica uma representação em hexadecimal. b) 25910 = 256 + 2 + 1 = 2 8 + 21 + 20 = 10000001 10000001112 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 100
Aritmética binária — Exercícios resolvidos
d) 100000,,112 = 25 + 2−1 + 2−2 = 32 100000 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 100000 2 0 C
e) 1BEEFH =
1 B 0001 1011
E 1110
E 1110
F = 110111110111011112 1111
Exercício 2
Efetue as seguintes operações aritméticas binárias, considerando os operandos representados 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 11 1 00 10 −1101101 101
c) 1001011 × 11001 1001011 1001011 +1001011 11101010011
d) Nesta divisão divisão ocorre ocorre uma situação situação particula particular: r: o divisor divisor é uma potência 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 100
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
11002 a) 12 = 8 + 4 = 1100 • Sinal e grandeza: sendo o número positivo, o bit de sinal é 0; a grandeza, escrita em 5 bits, é 01100. Assim, 12 = 0011002 . • Complement Complementoo para 2: a representação representação de um núm número ero positivo em complement complementoo para
2 é a mesma do número sem sinal (binário puro), respeitando porém a largura de representação. Portanto, 12 = 0011002 . − 12 é 12 = 11002 . b) A gra grand ndez ezaa de de −12 • Sinal e grandeza: sendo o número negativo, o bit de sinal é 1; a grandeza é codificada − 12 = 1011002 . com 5 bits, 01100. Assim, −12 • Complemento para 2:
A representação de um número negativo em complemento para 2 pode ser obtida a partir da representação representação binária do simétrico do núm número. ero. Para Para tal, copiam-se 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 processo expedito. expedito. − 12 = 1101002 . Assim, partindo de 12 = 0011002 obtém-se −12 c)
• Sinal e grandeza: −1 = 1000012 . • Comple Complemen mento to para para 2: tendo tendo em consid considera eração ção o que foi descri descrito to na alínea alínea anterio anterior, r, 1 = 0000012 , pelo que −1 − 1 = 1111112 .
d) O núme número ro em em causa 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. • Complemen Complemento to para 2: o valor 32 também não é represen representáv tável el com 6 bits; é um número número positivo e no entanto 1000002 representa um número negativo (MSB=1). Com 6 bits, o maior número representável é 2 6−1 − 1 = 31.
Arquitetura e Organização de Computadores
Pág. 3 de 100
Aritmética binária — Exercícios resolvidos
Exercício 4
Considere a representação binária dos valores C1 16 e A7 16 com 8 bits. a) Indique o valor valor decimal correspondente, correspondente, admitindo que são interpretadas interpretadas como númenúmeros: i) positivos;
ii) em sinal e grandeza;
iii) em complemento para dois. b) Indique Indique a gama de valores valores represen representáv táveis eis considerand considerandoo a forma complemen complemento to para 2. c) Admitindo que a referida referida representação representação se encontra encontra em complemento complemento para dois, efetue 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 + 2 0 1 0100111 = −39 − 25 + 7
iii) Os valore valoress são são ambos ambos negativ negativos. os. 110000012
compl. 2
−→
001111112 = 63
Este Este é o valor alor simétr simétrico ico do númer númeroo a ident identific ificar. ar. Logo, Logo, 110000012 interpretado em − 63. complemento para 2, resulta no decimal −63 101001112
compl. 2
−→
010110012 = 89
Da mesma forma, 101001112 interpretado em complemento para 2, resulta no decimal −89. b) Com 8 bits bits conseg conseguem uem escrev escrever-s er-see 2 8 = 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 +127]]. Ao contrário do que sucede em sinal e grandeza, o intervalo intervalo de representação: representação: [−128; +127 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 100
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 negativos 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)
Quanto a N , conclui-se da alínea anterior que |N | = −N = 01110
(= 1410 )
Conclusão: N é o número que possui maior grandeza. Arquitetura e Organização de Computadores
Pág. 5 de 100
Aritmética binária — Exercícios resolvidos
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. −M = 001100
compl. 2
−→
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 S G
e
Y =
1 0100110 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 realizar 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 100
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 Y = 1010112 e 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 complemento 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 100
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
Arquitetura e Organização de Computadores
c) P = 8CH e Q = 74H
Pág. 8 de 100
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: i) sem sinal;
ii) em complemento para 2.
Exercício 18
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 19
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. Exercício 20
Considere os números de 8 bits expressos, nas bases indicadas, por: X 2 = 10111100, Y 10 = 73 e Z 16 = 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.
Arquitetura e Organização de Computadores
Pág. 9 de 100
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 E X = 135
O expoente real de X é: real E X = 135 − 127 = 8
b) Como E Y = 127, E X > E Y . Então |X | > |Y | e portanto, S X +Y = S X = 1
ou seja, X + Y é um número negativo. c) Como E Y = 127, E Y real = 0. Porque os 23 bits da mantissa de Y são nulos, M Y = 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. 10 de 100
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 • S Y = 0 real + 127 = 4 + 127 = 131 = 10000011 • E Y = E Y 2 • M Y = 1,1001012
Resulta então: Y = 010000011100101 00· · · 0
17 0’s
b) X = BF40000016 =
1 01111110 100 · · · 02 S X E X f X
Então: • S X ×Y = 1 • E X ×Y = E X + E Y − 127 = (131 + 126) − 127 = 130 = 100000102 • M X ×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: M X ×Y = 10,01011110 · · · 02 = 1,001011112 × 21
Assim, E X ×Y = 13110 = 100000112 , pelo que X × Y = 11000001100101111 00· · · 0
15 0’s
Exercício 3
Considere o número cuja representação em hexadecimal é C1200000 H . 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. 11 de 100
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 simé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
1
23 22
0
10000010
↓ S = −
01000000000000000000000
↓ 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. 12 de 100
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 − E X = 134 M X = 1,0000011
O expoente real de X é: real E X = 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 S Z = −S X E Z = E X M Z = M X
Logo, Z = 0100001100000011 00· · · 02
16 0’s
c)
real real real E X ≡ E X =7 +Y = E Y
Contudo, ao somar as mantissas, o resultado pode não estar normalizado: M X : 1,0000011 M Y : +1,1111100 M X +Y 10,1111111 = 1,011111112 × 21
Logo, o expoente indicado inicialmente tem de ser incrementado, resultando real E X +Y = 8
Arquitetura e Organização de Computadores
Pág. 13 de 100
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
1 bit
8 bits
...
0
23 bits
c) Qual é o número Z tal que o valor de Y ×Z é representado por 110000011001010· · · 02 ?
a) X = 234567654328 =
1 00111001 01110111110101100011010
↓
E X
−
X é negativo.
f X
Note-se que a conversão de cada dígito octal origina 3 bits e por essa razão X 2 devia possuir 33 bits. Porém, a representação de X 2 em vírgula flutuante é constituída por 32 bits, que no seu conjunto correspondem a X 8 , pois o dígito mais significativo (2) pode escrever-se como 0102 ou 10 2 . b) Y > 0 ⇒ S Y = 0 real real E Y = 3 ⇒ E Y = E Y + 127 = 130 = 100000102 f Y = 0,00101 ⇒ M Y = 1,001012
Daqui resulta Y = +1,001012 × 23 =
0
1 bit
10000010 001010...0
8 bits
23 bits
c) S Y ×Z = − ⇒ S Z = −S Y = − E Y ×Z = E Y + E Z − 127 ⇔ 131 = 130 + E Z − 127 ⇔ E Z = 128 M Y ×Z ≡ M Y ⇒ M Z = 1,0
Logo, Z =
Arquitetura e Organização de Computadores
1 10000000 00...0 S Z E Z f Z
Pág. 14 de 100
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) ii)
a mantissa de X × Y ; o expoente de Y , sabendo que o expoente resultante de X × Y , representado nos seus 8 bits, é 100000002 .
a) X =
0 10000100 00111010000000000000000 + E X = 132 M X = 1,0011101
O expoente real de X é: real E X = 132 − 127 = 5
Logo, X 10 = +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 M Y = 1,f Y = 1,0. Assim, M X ×Y = M X × M Y = M X = 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 M Y = 1,0. Assim, E X ×Y = E X + E Y − 127 128 = 132 + E Y − 127 real E Y = 123 (E Y = −4)
Arquitetura e Organização de Computadores
Pág. 15 de 100
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 os números decimais A = 33 e B = −2,875. a) Represente A e B em vírgula flutuante, no formato de 32 bits definido na norma IEEE 754. b) Efetue as operações seguintes em vírgula flutuante no formato de 32 bits: i) A + B
ii) B − A
iii) 3 × B
c) Represente o resultado das operações anteriores em decimal e verifique se corresponde ao valor esperado. Exercício 10
Dois números V 1 e V 2 estão representados em vírgula flutuante no formato de 32 bits. Os seus valores, expressos em hexadecimal, são: V 1 : 421D0000H V 2 : C0000000H Calcule: a) −V 2
b) V 1 + V 2
c) V 2 − V 1
d) V 1 × V 2
Exercício 11
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.
Arquitetura e Organização de Computadores
Pág. 16 de 100
Vírgula flutuante — Exercícios propostos
Exercício 12
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 13
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 14
No formato de precisão simples da norma IEEE 754, os números X e Y são representados por X : C3800000H Y : 001111111000000000000000000000002 . e 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. 17 de 100
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) (A + A)·B B
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
Arquitetura e Organização de Computadores
Pág. 18 de 100
Circuitos combinatórios — Exercícios resolvidos
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 0 1 1 1 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
1 0 0 0 1 1 1 1
←− ←− ←−
A + B + C A+B A+B
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. X
Y
Z
F
0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
0 0 1 0 1 1 0 0
Arquitetura e Organização de Computadores
←−
X ·Y ·Z
←− ←−
X ·Y X ·Y
Pág. 19 de 100
Circuitos combinatórios — Exercícios resolvidos
Exercício 3
Escreva uma expressão booleana para as funções lógicas representadas pelas tabelas de verdade indicadas. a)
x
y
f
0 0 1 1
0 1 0 1
1 0 0 1
b)
x
y
z
f
0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
1 1 1 0 1 1 0 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 1
0 1 0 1
1 0 0 1
−→
x·y
−→
x·y
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.
Arquitetura e Organização de Computadores
Pág. 20 de 100
Circuitos combinatórios — Exercícios resolvidos
x
y
z
g
0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
1 1 1 0 −→ x + y + z 1 1 0 −→ x + y + z 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. X
Y
Z
F
0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
1 1 1 0 1 1 0 1
←− ←− ←−
Y e X ·Z Y X ·Z
←− ←−
Y Y e X ·Z
←−
X ·Z
c) Na tabela de verdade identificam-se os termos soma para os quais F =0. São eles X + Y + Z Arquitetura e Organização de Computadores
e
X + Y + Z Pág. 21 de 100
Circuitos combinatórios — Exercícios resolvidos
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 é:
Exercício 5
O circuito da figura implementa uma função F (A,B,C ).
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.
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.
b)
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)
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
Arquitetura e Organização de Computadores
Pág. 22 de 100
Circuitos combinatórios — Exercícios resolvidos
Exercício 6
Pretende-se projetar um circuito capaz de detetar se um número com 3 bits n 2 n1 n0 aplicado à 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 1 1 1 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
0 0 1 1 1 1 0 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 ).
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 considerando todas as combinações das variáveis e consequentes valores da função.
Arquitetura e Organização de Computadores
Pág. 23 de 100
Circuitos combinatórios — Exercícios resolvidos
W
X
Y
Z
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
F
0 1 1 0 0 0 0 0 0 1 0 1 0 0 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 ). 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.
Arquitetura e Organização de Computadores
Pág. 24 de 100
Circuitos combinatórios — Exercícios resolvidos
a)
A
B
C
S
0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
0 1 1 0 1 1 1 1
b) Efetuar as seguintes ligações: D0 = 0, D1 = D2 = 1, D3 = 0, D4 = D5 = D6 = D7 = 1, S2 = A , S1 = B , S0 = C e Y = F .
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 b 1 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 a 1 , a 0 , b 1 e b 0 . 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 a3a2 a1a0 e B = b 5 b4 b3 b2 b1 b0 .
a)
a1
a0
b1
b0
X
Y
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
0 0 0 0 1 0 0 0 1 1 0 0 1 1 1 0
Arquitetura e Organização de Computadores
Pág. 25 de 100
Circuitos combinatórios — Exercícios propostos
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 = X 1 ·X 2 ·X 3 Y = Y 3 + X 3 ·Y 2 + X 3 ·X 2 ·Y 1 e em que: • X 1 é a saída X do comparador de a 1 a0 com b 1 b0 ; • X 2 é a saída X do comparador de a 3 a2 com b 3 b2 ; • X 3 é a saída X do comparador de a 5 a4 com b 5 b4 ; • Y 1 , Y 2 e Y 3 são as saídas Y dos comparadores correspondentes.
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.
Arquitetura e Organização de Computadores
Pág. 26 de 100
Circuitos combinatórios — Exercícios propostos
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 . 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. Arquitetura e Organização de Computadores
Pág. 27 de 100
Circuitos combinatórios — Exercícios propostos
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 Y
A F(A, B, S) B
M
G(X, Y, S)
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 .
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, A 3 A2A1 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.
Arquitetura e Organização de Computadores
Pág. 28 de 100
Circuitos combinatórios — Exercícios propostos
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 C i. A
B
Co
Ci S
a) Construa a tabela de verdade correspondente às funções S (A,B,Ci) e C o(A,B,Ci). b) Escreva a expressão das funções S (A,B,Ci) e C o(A,B,Ci) na forma de uma soma de produtos. 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. A3
B3
A Co
A2
B2
B w A 3 Co
Co
B
Ci
Ci
A1
w2
B1
A
B
Co
Ci
A0
w1
B0
A
B
Co
Ci
S
S
S
S
S3
S2
S1
S0
Ci
Identifique na figura o valor de cada um dos sinais admitindo que os valores a somar, representando 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 = A 1 A0 e B = B 1 B0 . A saída MAIOR é 1 quando A for maior do que B e 0 no caso contrário. A1 A0 B1
A>B?
MAIOR
B0
Arquitetura e Organização de Computadores
Pág. 29 de 100
Circuitos combinatórios — Exercícios propostos
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 = M 1 M 0 . Analise o circuito e identifique a sua funcionalidade. MUX2_1 I0 Y I1
S
MUX2_1 M1
I0 Y I1
M0
S
COMP2 A1 A0 B1
A>B
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.
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.
Arquitetura e Organização de Computadores
Pág. 30 de 100
Circuitos combinatórios — Exercícios propostos
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 B
I0
A
I1
Y0 Y1 Y2
Lvm Llj Lvr
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).
Arquitetura e Organização de Computadores
Pág. 31 de 100
4 Circuitos sequenciais 4.1 Exercícios resolvidos Exercício 1
Considere o seguinte circuito com uma entrada X e uma saída Y .
a) Desenhe no diagrama seguinte a evolução temporal das saídas dos flip-flops ( Q1 e Q 0 ), assim como da saída Y , sabendo que a entrada X evolui da forma representada. Nota: considere que no instante inicial Q 1 e Q 0 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 Q 0 = 0 e Q 1 = 0, nas entradas dos flip-flops vão estar os valores D 0 = 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. 32 de 100
Circuitos sequenciais — Exercícios resolvidos
b) Considerando T = 20ns, 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 IN
D
Q
CLK
X
I0 I1
Y S
D
Q
OUT
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
X
OUT
Inicialmente, X e OUT apresentam o valor 0. Sendo a entrada de seleção do multiplexador 0, o valor que surge na sua saída é 1, referente à entrada I 0 . 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. 33 de 100
Circuitos sequenciais — Exercícios resolvidos
CLK
IN
X
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.
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 1 2 3 4
D
en
rst
0110 0100 0100 1101
1 1 0 1
0 1 0 0
b) Transição 1 2 3 4 5 6 7 8 9
IN
sel
en
rst
1001 1111 0101 1000 1000 1111 0101 0000 0001
1 1 0 1 1 1 0 1 1
1 1 1 0 1 1 1 1 1
0 0 0 0 0 1 0 0 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 entrada 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. 34 de 100
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 ) 1 2 3 4
D
en
rst
OUT
0110 0100 0010 1101
1 1 0 1
0 1 0 0
0110 0000 0000 1101
b) Além do que foi descrito na análise anterior, há agora que ter em consideração o multiplexador. 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 ) 1 2 3 4 5 6 7 8 9
Arquitetura e Organização de Computadores
IN
sel
en
rst
OUT
1001 1111 0101 1000 1000 1111 0101 0000 0001
1 1 0 1 1 1 0 1 1
1 1 1 0 1 1 1 1 1
0 0 0 0 0 1 0 0 0
1001 1111 1111 1111 1000 0000 0000 0000 0001
Pág. 35 de 100
Circuitos sequenciais — Exercícios resolvidos
Exercício 4
A figura representa um circuito sequencial baseado num contador de 4 bits. CONT4 EN
QA QB QC (MSB) QD
EN
CLK
Q0 Q1 Q2 Q3
OUT
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
CLK
QA QB RESET QC (MSB) QD EN
OUT
CLK
a) O circuito apresentado é constituído por um contador de 4 bits. Considerando que inicialmente 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 Q 3 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. 36 de 100
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.
���� �������
�������
����
����
�������
�������
����
�������
�������
��
��
������
������
��
�� � ����
� ����
�����
�
�����
�����
�����
�����
� ����
�
�����
�
�����
�����
������ � ����
� ����
� ���� �����
������
(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 2 N 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 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 . Arquitetura e Organização de Computadores
Pág. 37 de 100
Circuitos sequenciais — Exercícios resolvidos
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 = A 15 ·A14 ·A13 ·A12 = 1. Esta condição só é satisfeita se A 15 = 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 = A 15 ·A14 ·A13 = 1. Esta condição só é satisfeita se A 15 = 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) 0000–7FFF 8000–9FFF A000–DFFF E000–EFFF F000–FFFF
Dispositivo –RAM2 –RAM1 –-
A análise do sistema da figura (b) faz-se de forma análoga. • RAM1: CS = A 15 ·A13 = 1. Esta condição só é satisfeita se A 15 = 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 A 14 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 A 14. Para A 14 = 0 a gama é: 1000 0000 0000 0000 a 1001 1111 1111 1111. Em hexadecimal, a gama é 8000H –9FFFH . Para A 14 = 1 a gama é: Arquitetura e Organização de Computadores
Pág. 38 de 100
Circuitos sequenciais — Exercícios propostos
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 correspondentes 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 4000–7FFF 8000–9FFF A000–BFFF C000–DFFF E000–FFFF
RAM2 (*) RAM2 (*) RAM1 (**) –RAM1 (**) –-
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 B7FF 1000 E7AA 8000
Figura (a) ––RAM1 RAM2
Figura (b) –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. D
D
Q
X
D
Q
Q
CLK
CLK Q
Q
CLK
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.
Arquitetura e Organização de Computadores
Pág. 39 de 100
Circuitos sequenciais — Exercícios propostos
CL K
D
X
Q
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.
J
K
D
Q
Q
Q
Q
CLK
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
J
K
Q
Exercício 8
Considere o circuito sequencial da figura seguinte.
Arquitetura e Organização de Computadores
Pág. 40 de 100
Circuitos sequenciais — Exercícios propostos
D0 D
EN
Q
Q0
Q
Q1
CLK
D1 D CLK
CLK
a) Escreva a expressão das entradas D 0 e D 1 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 E N =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) 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 Q 3 Q2Q1 Q0 do contador e a entrada X do circuito. CONT4 X
T
D CLK
EN
Q
QA QB QC (MSB) QD
Q0 Q1 Q2 Q3
CLK
CLK
Arquitetura e Organização de Computadores
Pág. 41 de 100
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 barramento 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. 42 de 100
Circuitos sequenciais — Exercícios propostos
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 0x4000-0x7FFF 0x8000-0xCFFF 0xD000-0xDFFF 0xE000-0xFFFF
ROM1 RAM1 RAM2 -
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.
Arquitetura e Organização de Computadores
Pág. 43 de 100
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, 4a 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. Sequência de instruções 1 2
No de instruções por classe A
B
C
2 4
1 1
2 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 N ciclos =
N i × CPIi
i
onde N i 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: N ciclos = 2 × 1 + 1 × 2 + 2 × 3 = 10 Sequência 2: N ciclos = 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. 44 de 100
Desempenho — Exercícios resolvidos
c) CPI =
N ciclos N inst
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. Sequência de instruções Compilador 1 Compilador 2
No de instruções por classe A 5 × 109 10 × 109
B 1 × 109 1 × 109
C 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 texec =
N ciclos f CLK
sendo o número de ciclos de relógio determinado por N ciclos =
N i × 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) MIPS =
Portanto,
N instr texec × 106
(5 + 1 + 1) × 109 MIPS1 = = 350 20 × 106
Arquitetura e Organização de Computadores
Pág. 45 de 100
Desempenho — Exercícios resolvidos
e MIPS2 =
(10 + 1 + 1) × 109 = 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 N instr instruções é dado por texec = N instr × CPI × T CLK
A razão dos tempos de execução no computador A e no computador B é texec_A N instr × CPIA × f CLK_B 10 = = texec_B N instr × CPIB × f CLK_A 6 = 2 × f CLK_A, conclui-se Como CPI B = 1,2 × CPIA , então resulta f CLK_B = f CLK_A × 1,2 × 10 6 que f CLK_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.
texec = N instr × 2 × 250 = 500 × N instr ps A
e texec = N instr × 1,2 × 500 = 600 × N instr ps B
Então,
texec 6 = = 1,2 texec 5 B
A
O computador A é o mais rápido.
Arquitetura e Organização de Computadores
Pág. 46 de 100
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 No de instruções Frequência CPI
A
B
107
8 × 106
4 GHz 1
4 GHz 1,1
a) Indique qual o computador com maior valor de MIPS. b) Indique qual o computador mais rápido.
a) MIPS =
N instr N instr f CLK = = texec × 106 N instr × CPI × T CLK × 106 CPI × 106
Logo, MIPSA =
e
4 × 109 = 4 × 103 1 × 106
4 × 109 MIPSB = ≈ 3636 1,1 × 106
A é o computador com maior valor de MIPS.
b) texec = N instr × CPI × T CLK =
N instr MIPS × 106
107 = 2,5 ms 4 × 103 × 106 8 × 106 = ≈ 2,2 ms 3636 × 106
texec = A
texec
B
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. 47 de 100
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 stotal (f ) =
1 (1 − f ) +
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
3. f = 0,1 e s = 10
→
stotal (f ) =
1 0,9+0,1/10
= 1,20
= 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. 48 de 100
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 ) =
(1 − f ) +
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
3=
(1 − 0,75) +
0,75 s
=
1 1 3 + 4 4×s
=
4×s s+3
=
4×s s+3
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
4=
(1 − 0,75) +
0,75 s
=
1 1 3 + 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 F CLK (GHz) No de instruções Tempo (s) P 1 P 2 P 3 Arquitetura e Organização de Computadores
2 1,5 3
20 × 109 30 × 109 90 × 109
7 10 9 Pág. 49 de 100
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 P 2 deve funcionar para que o tempo de execução das instruções seja igual ao apresentado para P 1. c) Calcule o número de instruções a executar em P 2 de modo a que o seu tempo de execução seja igual ao de P 3 . Exercício 10
Considere que dois processadores distintos, P 1 e P 2 , 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 P 1 P 2
1,5 2
1 2
CPI B 2 2
CPI C CPI D 3 2
4 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 processador. Exercício 11
Considere dois processadores, P 1 e P 2 , que implementam de forma diferente o mesmo conjunto de instruções, composto por cinco classes de instruções. P 1 funciona com um relógio de 4GHz e P 2 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 P 1 A B C D E
1 2 3 4 3
CPI de P 2 2 2 2 4 4
Pico de desempenho é definido como a cadência máxima a que um computador pode executar a sequência de instruções mais favorável (para uma dada tarefa). Determinar o pico de desempenho de P 1 e P 2 , expresso em instruções por segundo. 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. 50 de 100
Desempenho — Exercícios propostos
Programa No operações VFL 5 × 109 20 × 109 40 × 109
1 2 3
Tempo de execução (s) Comp. A Comp. B Comp. C 2 5 10 20 20 20 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 700
500
50
Load Salto 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 computador A tem um CPI médio de 1,3 e funciona a 600 MHz. Um outro computador, B , tem um CPI médio de 2,5 e funciona a 750 MHz. Pretende-se executar um certo programa em ambos os computadores. Compilando esse programa para o computador A resultaram 105 instruções. Determine quantas instruções devem resultar compilando-o para o computador B , de modo que a execução do programa demore o mesmo tempo em ambos os computadores. Exercício 15
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 execução das instruções de transferência de dados em 11 vezes, calcule a percentagem dessas instruções de forma a conseguir-se melhorar o desempenho do processador em 5 vezes. Exercício 16
Medindo o tempo de acesso a disco verificou-se que 80% do tempo de execução de um determinado 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.
Arquitetura e Organização de Computadores
Pág. 51 de 100
Desempenho — Exercícios propostos
Exercício 17
Suponha que se pretende melhorar um computador acrescentando-lhe uma unidade vetorial. Um cálculo executado em modo vetorial é 10 vezes mais rápido que o normal. 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?
Arquitetura e Organização de Computadores
Pág. 52 de 100
6 Linguagem assembly 6.1 Sumário das instruções MIPS-32 Instruções do tipo R com opcode=0. Valor do campo funct em hexadecimal: add:20 addu:21 slt:2A sltu:2B
and:24 sll:0
jr:8 srl:2
nor:27 or:25 sub:22 subu:23
mult:18 multu:19 mfhi:10 div:1A divu:1B mflo:12
Instruções do tipo I. Valor do campo opcode em hexadecimal: addi:8 lw:23
addiu:9 ori:D
andi:C slti:A
beq:4 sltiu:B
bne:5 sb:28
lbu:24 sh:29
lhu:25 sw:2B
lui:F
Instruções do tipo J. Valor do campo opcode em hexadecimal: j:2 jal:3. 31
Formato R:
26 25
Número
11 10
6
5
0
rs
rt
rd
shamt
funct
6 bits
5 bits
5 bits
5 bits
5 bits
6 bits
26 25
21 20
16 15
0
op
rs
rt
constante
6 bits
5 bits
5 bits
16 bits
31
Formato J:
16 15
op
31
Formato I:
21 20
26 25
0
op
endereço parcial
6 bits
26 bits
Nome
Propósito
Sempre a zero Registo para uso do assembler Valor retornado por sub-rotina Valores dos argumentos de uma sub-rotina Registos para valores temporários Registos preservados por sub-rotinas Reservados para sistema operativo (*) Reservados para funções especiais (*) Endereço de retorno da sub-rotina corrente Linhas a sombreado indicam registos cujos valores devem ser preservados pelas sub-rotinas. (*) Registos não usados em AOCO. $0 $1 $2–$3 $4–$7 $8–$15,$24,$25 $16–$23 $26–$27 $28,$29,$30 $31
$zero $at $v0–$v1 $a0–$a3 $t0–$t9 $s0–$s7 $k0–$k1 $gp,$sp,$fp $ra
Arquitetura e Organização de Computadores
Pág. 53 de 100
Linguagem assembly — Exercícios resolvidos
6.2 Exercícios resolvidos Exercício 1
Para as seguintes expressões aritméticas (números inteiros de 32 bits), especifique um mapeamento de variáveis para registos e o fragmento de código assembly MIPS-32 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 MIPS-32 dispõe de um número elevado de registos, trata-se geralmente de uma tarefa simples, porque se pode usar um registo diferente para cada variável. a) Uma possível atribuição de registos a variáveis é a seguinte: f → $s0, g → $s1
O fragmento de código que realiza os cálculos desejados é: addi sub
$s0, $s0, 5 $s0, $s1, $s0
# Calcula f = f + 5 # Calcula f = g - f
Após esta sequência de duas instruções, $s0 contém o novo valor associado a f. O cálculo da primeira parte da expressão (instrução addi) pode guardar o resultado intermédio no o registo $s0 , porque a segunda instrução estabelece o valor final correto. b) Possível atribuição de variáveis a registos: f → $s0, endereço base de A → $s6
Como cada elemento de uma sequência de inteiros tem 4 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 × 4
A primeira instrução deve ir buscar o valor guardado nessa posição. lw addi
$s0, 48($s6) $s0, $s0, 17
# Carrega valor da posição $s6+48 # Soma-lhe o valor 17
Exercício 2
Para as seguintes instruções em código-máquina MIPS-32, determine a instrução assembly correspondente. Indique o tipo de codificação, bem como os valores de todos os campos. a) 0x8D08FFC0
Arquitetura e Organização de Computadores
b) 0x01204020
Pág. 54 de 100
Linguagem assembly — Exercícios resolvidos
Para resolver este tipo de problemas, deve começar-se por determinar a instrução. Para isso, determina-se o valor do campo opcode, que em todas as instruções é constituído pelos 6 bits mais significativos do código. Depois interpretam-se os demais campos de acordo com o tipo da instrução (R, I ou J). a) Os oito bits mais significativos da instrução são 8D16 =100011012 . O código da instrução (campo opcode) é sempre definido pelos 6 bits mais significativos: opcode=1000112 =2316 . Da tabela existente no início do enunciado conclui-se que se trata de uma instrução lw . Esta instrução é do tipo I, pelo que a sua decomposição em campos é: 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
100011
01000
01000
1111111111000000
opcode
rs
rt
constante
2
1
0
Os registo são: rs = 8 → $t0, rt = 8 → $t0. Constante: FFC016 interpretada em complemento para 2 → −26 = −64. Concluindo, a instrução é: lw $t0, -64($t0). b) Para esta instrução opcode=0, pelo que se trata de uma instrução do tipo R. 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
000000
01001
00000
01000
00000
100000
opcode
rs
rt
rd
shamt
funct
0
Como funct = 2016 , trata-se de uma instrução add . Os registos envolvidos são: rs = 9 → $t1, rt = 0 → $zero e rd = 8 → $t0. Juntando todas as informações: add $t0,$t1,$zero Exercício 3
Assuma as seguintes condições iniciais: $t0 = 0xBEADFEED
$t1 = 0xDEADFADE
a) Determine o valor de $t2 após a execução da seguinte sequência de instruções: sll or
$t2, $t0, 4 $t2, $t2, $t1
b) Determine o valor de $t2 após a execução da seguinte sequência de instruções: srl andi
Arquitetura e Organização de Computadores
$t2, $t0, 3 $t2, $t2, 0xFFEF
Pág. 55 de 100
Linguagem assembly — Exercícios resolvidos
Em binário, os valores iniciais dos registos são: $t0 = 1011 1110 1010 1101 1111 1110 1110 11012 $t1 = 1101 1110 1010 1101 1111 1010 1101 11102 a) A primeira instrução desloca o valor de $t0 quatro bits para a esquerda. Os 4 bits mais significativos perdem-se; nos 4 menos significativos são introduzidos zeros. O resultado da operação é guardado em $t2; o registo $t0 fica inalterado. O valor de $t2 depois da execução da primeira instrução é: $t2 = 1110 1010 1101 1111 1110 1110 1101 0000 2
A instrução or calcula a função ou-inclusivo de cada bit de $t2 com o bit de $t0 situado na mesma posição. O resultado é guardado em $t2 . O resultado da operação or é 1 sempre que pelo menos um dos operandos seja 1. Logo: $t2 = 1111 1110 1111 1111 1111 1110 1101 11102 = 0xFEFFFEDE
b) A instrução srl desloca o valor de $t0 três posições para a direita, introduzindo zeros pela esquerda. O valor de $t2 depois da execução da primeira instrução é: $t2 = 000 1 0111 1101 0101 1011 1111 1101 11012
A instrução andi calcula a função e-lógico de cada bit de $t2 com o bit correspondente da constante 0xFFEF. Esta constante tem apenas 16 bits. Os bits mais significativos são considerados como sendo iguais a zero. FFEF16 = 0000 0000 0000 0000 1111 1111 1110 11112 O resultado é guardado em $t2 . 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 $t2 e pela constante indicada. O valor final de $t2 é: $t2 = 0000 0000 0000 0000 1011 1111 1100 11012 = 0x0000BFCD Exercício 4
Assuma as seguintes condições iniciais: $t0 = 1111 1111 1111 1111 1111 1111 1111 11112 $t1 = 0011 1111 1111 1000 0000 0000 0000 00002
a) Determine o valor de $t2 após a execução do fragmento seguinte:
ELSE: DONE:
slt beq j addi ...
$t2, $t0, $t1 $t2, $zero, ELSE DONE $t2, $zero, 2
b) Apresente o código-máquina correspondente ao fragmento, supondo que este está alo jado a partir da posição de memória 0x00400000.
Arquitetura e Organização de Computadores
Pág. 56 de 100
Linguagem assembly — Exercícios resolvidos
Para resolver a primeira parte do problema, deve-se determinar a ordem de execução das instruções. A segunda parte resolve-se por aplicação sistemática dos dados da tabela apresentada no início do capítulo (pág. 53). Também é necessário determinar o endereço do destino dos saltos (instruções beq e j). a) A primeira instrução compara os conteúdos de $t0 e $t1 . A condição avaliada é: $t0 < $t1 ?
Os valores dos registos são interpretados em complemento para dois. (Se a instrução fosse sltu, então os valores seriam interpretados como sendo unsigned —“sem sinal”.) Como o valor de $t0 é negativo (tem o bit mais significativo a 1) e o de $t1 é positivo, a condição é verdadeira. Logo, o valor de $t2 é posto em 1. O salto condicional (segunda instrução) é tomado, se o conteúdo de $t2 for igual ao de $zero (que é sempre 0). Como 1 é diferente de 0, o salto não é tomado. Em consequência, a terceira instrução a ser executada é a de salto incondicional (a instrução j). Esta instrução leva o fluxo de execução a passar para o fim do fragmento apresentado (etiqueta DONE). A instrução addi não é executada. Como o conteúdo de $t2 não foi alterado depois da execução da primeira instrução, o valor de $t2 permanece igual a 1 até ao fim. b) A codificação das instruções é feita por aplicação da tabela que se encontra no início do enunciado. • slt $t2,$t0,$t1
É uma instrução de formato R. Logo: opcode = 0, funct = 2AH , rs = 8 ($t0), rd = 10 ($t2), rt = 9 ($t1), shamt = 0 (não é uma instrução de deslocamento). 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
000000
01000
01001
01010
00000
101010
opcode
rs
rt
rd
shamt
funct
0
Em hexadecimal, o código-máquina correspondente é 0x0109502A. • beq $t2,$zero,ELSE
É uma instrução do formato I. Logo, opcode=4; rs = 10 ($t2); rt = 0 ($zero); constante = 1.
O salto relativo é para duas instruções a seguir ao beq . Como a contagem das instruções é feita a partir da instrução seguinte , trata-se de um salto relativo de uma instrução para a frente (+1). 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
000100
01010
00000
0000000000000001
opcode
rs
rt
constante
2
1
0
Em hexadecimal, o código-máquina correspondente é 0x11400001. • j DONE
Instrução do formato J: opcode = 2. Arquitetura e Organização de Computadores
Pág. 57 de 100
Linguagem assembly — Exercícios resolvidos
A etiqueta DONE refere-se ao endereço da instrução seguinte a addi , ou seja, refere-se ao endereço da 5a instrução do segmento de código. Como cada instrução tem 4 bytes, o endereço do primeiro byte da 5a instrução é dado por: 0x00400000 + 4×4 = 0x00400010 Em binário o endereço de destino é: 0000 0000 0100 0000 0000 0000 0001 00 00 Os 26 bits indicados a cinzento são usados no campo de endereço incluído no código da instrução. 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10
000010
9
8
7
6
5
4
3
2
1
0
00000100000000000000000100
opcode
endereço
Em hexadecimal, o código-máquina correspondente é 0x08100004. • addi $t2,$zero,2
Trata-se de uma instrução do tipo I. Logo, opcode=8; rs = 0 ($zero); rt = 10 ($t2); constante = 2. 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
001000
00000
01010
0000000000000010
opcode
rs
rt
constante
2
1
0
Em hexadecimal, o código-máquina correspondente é 0x200A0002. Resumindo, o código-máquina do fragmento é: endereço
instrução
0x0400000 0x0400004 0x0400008 0x040000C
0x0109502A 0x11400001 0x08100004 0x200A0002
Exercício 5
Pretende-se escrever um fragmento de código assembly MIPS-32 para somar todos os valores de uma sequência de 10 números inteiros. O endereço-base da sequência está contido no registo $s0 e o resultado deve ficar no registo $s7 . a) Escrever o fragmento assumindo que todos os números inteiros têm 32 bits. b) Escrever uma nova versão assumindo que todos os elementos da sequência têm 16 bits.
Arquitetura e Organização de Computadores
Pág. 58 de 100
Linguagem assembly — Exercícios resolvidos
A estratégia geral das soluções indicadas a seguir é a seguinte: 1. Carregar o primeiro valor da sequência para o registo que vai conter o resultado final ( $s7) 2. Repetir nove vezes (contador de iterações $t0 ) 2.1. Determinar a posição do próximo elemento da sequência 2.2. Ler o próximo valor da sequência para um registo ( $t1) 2.3. Somar o valor lido ao resultado corrente ( $s7) a) Neste caso, cada elemento da sequência tem 4 bytes. Por isso, o endereço do próximo elemento é obtido somando-se 4 ao endereço do elemento corrente. lw addi ciclo: addi lw add addi bne ...
$s7,0($s0) $t0,$zero,9 $s0,$s0,4 $t1,0($s0) $s7,$s7, $t1 $t0,$t0,-1 $t0,$zero,ciclo
# # # # # # # #
Carregar 1o elemento Inicializar contador de iterações Endereço do próximo elemento (+4) Carregar próximo elemento Adicionar próximo elemento Decrementar contador de iterações = 0 Continuar se contador $s7 contém a soma do todos os elementos
b) Neste caso, cada elemento da sequência tem 2 bytes. Por isso, o endereço do próximo elemento é obtido somando-se 2 ao endereço do elemento corrente. Além disso, é necessário usar a instrução lh (load half-word) para carregar o valor de memória. O resultado final continua a ser um valor de 32 bits. lh addi ciclo: addi lh add addi bne ...
$s7,0($s0) $t0,$zero,9 $s0,$s0,2 $t1,0($s0) $s7,$s7, $t1 $t0,$t0,-1 $t0,$zero,ciclo
Arquitetura e Organização de Computadores
# # # # # # # #
Carregar 1o elemento Inicializar contador de iterações Endereço do próximo elemento (+2) Carregar próximo elemento Adicionar próximo elemento Decrementar contador de iterações Continuar se contador = 0 $s7 contém a soma do todos os elementos
Pág. 59 de 100
Linguagem assembly — Exercícios resolvidos
Exercício 6
O programa que se segue está escrito em assembly MIPS-32. Suponha que se encontra em memória a partir do endereço 0x400000, ocupado pelo código da primeira instrução (linha 1), e que $ra=0x400008 (return address ). 1... <- primeira instrução 2add $a0, $a0, $a0 3- stop: j stop 4- subr: andi $a0, $a0, 1 5ori $a0, $a0, 1 6sll $a0, $a0, 1 7jr $ra
Após a execução do programa, o conteúdo dos registos $a0, $pc e $ra, em hexadecimal, pode corresponder a uma das opções seguintes: 1. $a0=2 2. $a0=2 3. $a0=2 4. $a0=4
$pc=0x400008 $pc=0x400008 $pc=0x400004 $pc=0x400008
$ra=0x400004 $ra=0x400008 $ra=0x400008 $ra=0x400004
Aqui, $pc representa o program counter , um registo interno que não é diretamente acessível. Escolha, justificando, a opção que indica os valores corretos dos referidos registos, supondo que a instrução em falta na linha 1 é: a) j subr
b) jal subr
a) Neste caso, o código a partir de subr não altera o registo $ra. Logo, após a execução da instrução jr $ra temos $pc=$ra=0x400008. Portanto, a execução prossegue a partir da linha 3, onde fica em ciclo infinito. O efeito das linhas 4–6 é independente do valor inicial de $a0 . A linha 4 força a zero os bits 31–1 de $a0. A linha 5 força o bit menos significativo (o bit da posição 0) a 1. A instrução sll desloca o valor de $a0 de uma posição para a esquerda. Logo $a0=2. A opção correta é a 2 . b) A instrução jal subr coloca em $ra a posição da instrução seguinte: $ra=0x400004. A execução da sub-rotina coloca $a0=2 (ver alínea anterior). Depois de executar a invocação de subr, a execução prossegue a partir da instrução da linha 2, já que a instrução jr $ra coloca $pc=0x400004. A instrução da linha 2 duplica o valor de $a0 , que passa a 4. De seguida, o programa fica a executar o ciclo infinito da linha 3 (e, portanto, $pc=0x400008). A opção correta é a 4 .
Arquitetura e Organização de Computadores
Pág. 60 de 100
Linguagem assembly — Exercícios resolvidos
Exercício 7
Apresenta-se a seguir um programa em assembly para o microprocessador MIPS. Na terceira linha do programa é invocada uma rotina, através da instrução jal ( jump and link ), designada por par. Esta rotina, cujo código não é fornecido, tem como objetivo determinar se um número é par. Admita que a rotina recebe esse número no registo $a0 e que devolve no registo $v0 o valor 1 caso seja par, ou 0 no caso contrário.
loop:
step:
addi addi jal beq addi addi addi bne
$a1, $s0, par $v0, $s0, $a0, $a1, $a1,
$zero, 3 $zero, 0 # Chama rotina par $zero, step $s0, 1 $a0, 1 $a1, -1 $zero, loop
end: ...
a) Considerando que antes da execução do programa o registo $a0 possui o valor 8, indique o conteúdo dos registos $v0 e $s0 após a execução do programa. b) Tendo em consideração a descrição que foi realizada, implemente a rotina par .
a) O programa realiza 3 iterações, incrementando em cada uma delas o valor de $a0, que inicialmente é 8. Em cada iteração é determinada a paridade do valor em $a0 invocando a rotina par . Caso o valor em $a0 seja par o registo $s0 é incrementado. No final da execução do programa $(s0)=2, correspondendo aos 2 números pares encontrados (8 e 10), e $(v0)=1, correspondendo ao resultado da paridade do último valor fornecido à rotina par. b) O bit menos significativo de um número par é 0. A rotina seguinte baseia-se nesta propriedade. par:
Arquitetura e Organização de Computadores
addi $v0, $a0, 1 andi $v0, $v0, 1 jr $ra
Pág. 61 de 100
Linguagem assembly — Exercícios resolvidos
Exercício 8
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→$t0 - endereço-base de SEQ→$t1 - número de elementos de SEQ →$t2 - resultado→$t7 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→$s0 - número de elementos de SEQ1→$s1 - endereço-base de SEQ2→$s2 - número de elementos de SEQ2→$s3 - resultado→$s7
a) O fragmento consiste num ciclo em que se varia o registo $t1 de forma a conter o endereço de elementos sucessivos de SEQ (linha 5). 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 (linha 6). O ciclo pode terminar, quando se encontra um elemento igual ao procurado (linha 4). Neste caso, a instrução da linha 8 assegura que o resultado (i.e., o valor de $t7 ) é 1. Se o valor procurado não existir em SEQ , o ciclo é terminado porque o contador de elementos vem a 0 (linha 2). Neste caso, o valor de $t7 não é alterado, mantendo o valor inicial estabelecido na linha 1. Esta solução altera os valores iniciais de $t1 e $t2. Esta informação teria que ser preservada, caso fosse necessária noutros lugares do programa. Por exemplo, poderia ser copiada para registos livres ou guardada em memória (em variáveis declaradas com a diretiva .word). 1 2 3 4 5 6 7 8 9
add $s7 , L1 : beq $t2 , lw $t0 , beq $t0 , addi $t1 , addi $t2 , j L1 L2 : addi $ s7 , f im : . ..
$ zer o , $z er o $zero , fim 0( $t1 ) $a0 , L2 $t1 , 4 $t2 , -1 $zero , 1
# r es ul ta do a 0 # termi nar # obter um elemento # sair do ciclo se encontrou # endereço do próximo elemento # ajustar n o d e e l e me n t os # repetir ( próximo elemento ) # encontrado : resultado = 1
b) Para transformar o fragmento numa sub-rotina é necessário alterá-lo para corresponder às convenções de invocação: os argumentos nos registos $a0–$a3 e o resultado em $v0 (e $v1, se necessário). Arquitetura e Organização de Computadores
Pág. 62 de 100
Linguagem assembly — Exercícios propostos
Também é preciso garantir as regras de preservação de valores dos registos. A maneira mais fácil é usar a gama de registos $t0–$t7. O código original já faz isso (com exceção da utilização de $s7 para guardar o resultado). A atribuição de registos passa a ser a seguinte: - N→$a0 - endereço-base de SEQ→$a1 - número de elementos de SEQ →$a2 - resultado→$v0 1 2
pesq: L1 :
3 4
5 6 7 8 9
L2 : L3 :
add beq lw beq addi addi j addi jr
$ v0 , $a2 , $ t0 , $t0 , $a1 , $a2 , L1 $v0 , $ra
$ ze ro , $ ze ro $ ze ro , L3 # n ão há m ai s e le me nt os 0 ( $a 1 ) $a0 , L2 # e le me nt o ig ua l ao p ro cu ra do $a1 , 4 # posiç ão ele men to se gui nte $a2 , -1 # decrementar n o d e e l e me n t os # tratar do elemento seguinte $ ze ro , 1 # e le me nt o e nc on tr ad o
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 3–5 preparam a invocação da sub-rotina, colocando os argumentos nos registos apropriados (valor a procurar em $a0 , endereço-base de SEQ2 em $a1 e número de elementos de SEQ2 em $a2). As linhas 7–8 processam o resultado da invocação (registo $v0). Se o valor foi encontrado em SEQ2, o contador $s7 é incrementado de uma unidade. 1 2 3 4 5 6 7 8 9 10
add ciclo: beq lw add add jal beq addi cont: addi addi
$ s7 , $s1 , $a0 , $a1 , $a2 , pesq $v0 , $s7 , $s1 , $s0 ,
$ ze ro , $ z er o $z er o , s to p 0( $s0 ) $s2 , $z er o $s3 , $zero $z er o , c on t $s7 , 1 $s1 , -1 $s0 , 4
11 12 13
stop :
j ...
ciclo
# i n i c i al i z ar c o n ta d o r # m ai s e le me nt os de S EQ 1 ? # obter um elemento de SEQ1 # on de p es qu is ar # n o d e e l em e nt o s a p e sq u is a r # invocar sub - rotina # sa lt ar , s e n ão en co nt ro u # encontrou : contabilizar # decrementar contador de SEQ1 # endereço de próximo # e le m en t o d e S EQ 1 # repetir
6.3 Exercícios propostos
Arquitetura e Organização de Computadores
Pág. 63 de 100
Linguagem assembly — Exercícios propostos
Exercício 9
Para as seguintes expressões aritméticas (números inteiros de 32 bits), especifique um mapeamento de variáveis para registos e o fragmento de código assembly MIPS-32 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 10
Para os seguintes fragmentos de código assembly MIPS-32, indique as expressões simbólicas correspondentes, bem como o correspondente mapeamento entre registos e variáveis. a)
add add add add
$s0,$s0,$s1 $s0,$s0,$s2 $s0,$s0,$s3 $s0,$s0,$s4
b)
lw
$s0,4($s6)
c) Assumir que $s6 contém o endereço-base da sequência A[] . addi sll add lw
$s6, $t0, $s6, $s0,
$s6, -20 $s1, 2 $s6, $t0 8($s6)
Exercício 11
Para as seguintes instruções em código-máquina MIPS-32, determine as instruções assembly correspondentes. Indique o tipo de codificação, bem como os valores de todos os campos. a) 0xAE0BFFFC
b) 0x8D090012
Exercício 12
Assuma as seguintes condições iniciais: $t0 = 0x55555555
$t1 = 0x12345678
Determine o valor de $t2 após a execução das sequências de instruções seguintes. a)
sll or
$t2, $t0, 4 $t2, $t2, $t1
b)
sll andi
$t2, $t0, 4 $t2, $t2, -1
Arquitetura e Organização de Computadores
Pág. 64 de 100
Linguagem assembly — Exercícios propostos
c)
srl andi
$t2, $t0, 3 $t2, $t2, 0xFFEF
Exercício 13
Considere o seguinte fragmento de código assembly MIPS-32: L1:
sw sll addi bne
$t4,0($t5) $t4,$t4,4 $t5, $t5, 4 $t4,$zero, L1
Assuma os seguintes valores iniciais: $t4 = 0x12345678
$t5 = 2000
a) Explique como é alterada a memória durante a execução do programa. Apresente um diagrama do conteúdo da memória alterada pela execução do programa. b) Supondo que o código do fragmento está alojado a partir da posição de memória 0x00400000, apresente o código-máquina correspondente. Exercício 14
Os processadores RISC como o MIPS implementam apenas instruções muito simples. Este problema 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 $t2, $t1 $t2 ← |$t1| é equivalente a Apresente a mais curta sequência de instruções MIPS-32 que realiza esta operação. b) Repita a alínea anterior para a instrução sgt, em que sgt $t1, $t2, $t3 é equivalente a se $t2 > $t3 então $t1 ← 1 senão $t1 ← 0. Exercício 15
Numa zona de memória (endereço-base em $s4 ) está uma sequência de bytes diferentes de 0. A sequência de bytes é terminada por um byte a zero. Escreva um fragmento de código assembly que determina o número de bytes da sequência. O byte 0 final não entra para a contagem. O resultado deve ser guardado em $s0 . Exercício 16
Considerar os seguintes fragmentos de código assembly . Fragmento 1: LOOP: slt $t2,$zero,$t1 ELSE:
bne j addi addi j
DONE:
Arquitetura e Organização de Computadores
$t2,$zero,ELSE DONE $s2, $s2, 2 $t1, $t1, -1 LOOP ...
Pág. 65 de 100
Linguagem assembly — Exercícios propostos
Fragmento 2: LOOP:
addi LOOP2: addi addi bne addi bne DONE: ...
$t2, $s2, $t2, $t2, $t1, $t1,
$zero, 0xA $s2, 2 $t2, -1 $zero, LOOP2 $t1, -1 $zero, LOOP
a) Assumir a seguinte situação inicial: $t1=10 e $s2=0. Determinar, para cada fragmento, o valor final de $s2. b) Assuma agora que $t1=N (com N>0 ). Determinar, para cada fragmento, o número de instruções executadas em função de N . Exercício 17
Escrever um fragmento para determinar se duas sequências de números inteiros (32 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 → $s4 endereço-base da sequência B → $s5
O resultado, a guardar em $s0 , deve ser 1, se as duas sequências tiverem o mesmo conteúdo ou 0 no caso contrário. Exercício 18
Escreva um fragmento de código assembly MIPS-32 para determinar quantos números ímpares estão contidos numa sequência de 50 números inteiros (de 32 bits). Assuma que o endereço-base da sequência está contido no registo $s0 . O resultado deve ficar no registo $s7 . Exercício 19
Considere uma sequência de 50 números inteiros armazenada em memória a partir do endereço contido no registo $t0 . Escreva um fragmento de código assembly que determine o valor mínimo contido na sequência, guardando-o em $t7. Exercício 20
Pretende-se escrever um programa que permita realizar diversas tarefas envolvendo sequências de números inteiros 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. Construa o programa que realiza as tarefas a seguir descritas, escrevendo uma sub-rotina para cada tarefa. Nota: deve gerir a utilização de registos por forma a que uma sub-rotina não estrague o conteúdo de registos usados por outras sub-rotinas. a) Somar todos os elementos de uma sequência. b) Determinar o número de elementos ímpares da sequência. 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. 66 de 100
7 Organização do processador MIPS Os exercícios seguintes e respetivas figuras foram extraídos ou adaptados do livro “Computer Organization and Design – The Hardware/Software Interface”, Hennessy & Patterson, 4a edição.
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
$t0, $s0, $s1
Indique também quais os componentes com funções úteis. PCSrc
0 M u x
Add
Add
4
Instruction [25:21] PC
Read register 1
Instruction [20:16] Instruction [31:0] Instruction memory
Instruction [15:11]
0 M u x 1 RegDst
Instruction [15:0]
Read register 2 Write register Write data
1
Shift
RegWrite
Read address
ALU result
left 2
MemWrite Read data 1 ALUSrc ALU
Read data 2
0 M u x 1
MemtoReg
Zero ALU result
Address
Registers Write data
16
Sign extend
Read data
1 M u x 0
Data memory
32 ALU control
MemRead
Instruction [5:0] ALUOp
Figura 7.1: CPU com multiplexadores e sinais de controlo
Arquitetura e Organização de Computadores
Pág. 67 de 100
Organização do processador MIPS — Exercícios resolvidos
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 de destino é feita pelos bits 11 a 15 da instrução, pelo que RegDst=1. 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 provenientes 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) ALUop1
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 as instruções lw e addi. b) O sinal ALUOp1=1 somente para as instruções lógico-aritméticas. Como o defeito impõe ALUOp1=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, or, slt.
Arquitetura e Organização de Computadores
Pág. 68 de 100
Organização do processador MIPS — Exercícios resolvidos
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 apropriadamente; 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 7 da saída da memória de instruções está sempre a 0 (stuck-at0). b) Repita a alínea anterior para uma falta stuck-at1 (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 7 das instruções obtidas de memória. Nas instruções de tipo R, este bit pertence ao campo shamt, que não é usado por nenhuma das instruções implementadas. Por isso, é necessário usar uma instrução do tipo I. Uma solução possível: addi $t0, $zero, 128
Na ausência de defeito, o registo $t0 tomará o valor 128. Na presença do defeito, tomará o valor 0: 12810 = 100000002 transforma-se em 000000002 , se o bit 7 (o oitavo bit da instrução) for forçado a 0. b) Por um raciocínio análogo ao da alínea anterior, é necessário usar uma constante com o bit 7 a zero. Por exemplo: addi $t0, $zero, 0 . Na ausência de defeito, o registo $t0 toma o valor 0; no caso contrário, toma o valor 128. 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 400 ps
Add
Mux
ALU
Regs
100 ps 30 ps 120 ps 200 ps
D-Mem Controlo 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.
Arquitetura e Organização de Computadores
Pág. 69 de 100
Organização do processador MIPS — Exercícios resolvidos
É 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 independentes. Para calcular o tempo de propagação associado a cada módulo, é preciso determinar o respetivo sinal de entrada que é atualizado em último lugar. Para um módulo de latência L com N entradas relavantes 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: a
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 o somador e o sinal de controlo. Este último está atualizado no instante t = 500ps, 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: a
I-Mem → Regs → Mux → ALU → Mux
O 1o Mux é o da entrada da ALU, o 2 o é o que está à saída da memória D-Mem. As saídas de Regs estão prontas no instante t = 400 ps + 200 ps = 600 ps
No instante t = 600ps 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 = 600 ps + 30 ps + 120 ps + 30 ps = 780 ps
Falta verificar se as demais entradas relevantes do módulo Regs está atualizadas neste instante. A entrada RegWrite está atualizada desde o instante 500 ps, porque é um sinal de controlo. A entrada Write register está pronta desde o instante 400ps + 30ps = 430ps. Portanto, a entrada Write data é a última a ficar atualizada. Concluindo, o caminho crítico é I-Mem → Regs → Mux → ALU → Mux, com um tempo de propagação de 780 ps. Arquitetura e Organização de Computadores
Pág. 70 de 100
Organização do processador MIPS — Exercícios resolvidos
Exercício 5
Assuma que o processador da figura 7.1 recebe a seguinte instrução: 1000 1100 0100 0011 0000 0000 0001 0000
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: $0
$1
$2
$3
$4
$5
$6
$8
$12
$31
0
1
4
3
-4
5
6
8
1
-32
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 os 16 bits menos significativos da instrução 0x0010 e produz uma valor de 32 bits por extensão de sinal: 0x00000010. O componente Shift-left2 produz à saída o valor da entrada (0x00000010) deslocado de 2 bits para a esquerda: 0x00000040. 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). O valor de opcode é: 1000112 = 2316 , logo trata-se de uma instrução lw (tipo I). Para a instrução lw , a ALU é usada para calcular o endereço dos dados fazendo uma adição: ALUop=00. c) Como a instrução lw 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
100011
00010
00011
0000000000010000
opcode
rs
rt
constante
2
1
0
Portanto, rs=2 e rt=3. A instrução completa é: lw $3,16($2). Como a instrução usa a ALU para calcular a soma $2+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 lw o registo de destino é especificado pelos bits 16 a 20, o multiplexador que alimenta a entrada Write register seleciona esse campo da instrução. Logo, a sua saída é 000112 . Arquitetura e Organização de Computadores
Pág. 71 de 100
Organização do processador MIPS — Exercícios propostos
A instrução lw 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 (endereço $2+16 = 4+16 = 20). 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 $2): 4. A entrada inferior da ALU tem a constante 16. 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. f) Os valores das entradas do banco de registos são: • Read register 1: valor de rs : 2. • Read register 2: valor de rt : 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
Considere o CPU da figura 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) lw $t3,64($s7)
b) sw $s0,256($t2)
c) beq $s0,$t2, -5 Exercício 7
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 8
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) lw Arquitetura e Organização de Computadores
b) beq Pág. 72 de 100
Organização do processador MIPS — Exercícios propostos
Instruction [25–0] 26
Shift left 2
Jump address [31–0] 28
PC + 4 [31–28]
Add ALU Add result
4
Instruction [25–21]
Read address
Instruction [20–16]
Instruction [31–0] Instruction memory
0 M u Instruction [15–11] x 1
Instruction [15–0]
Read register 1 Read data 1 Read register 2 Write register
Read data 2
Write data Registers
16
Signextend
1
M u x
M u x
1
0
Read data
1 M u x 0
Shift left 2
RegDst Jump Branch MemRead Instruction [31–26] MemtoReg Control ALUOp MemWrite ALUSrc RegWrite
PC
0
32
0 M u x 1
Zero ALU ALU result
Address
Write Data data memory
ALU control
Instruction [5–0]
Figura 7.2: CPU com suporte para saltos incondicionais.
Exercício 9
Pretende-se implementar a instrução jr (jump register). Indique quais os elementos e sinais de controlo que devem ser acrescentados. Defina os valores dos sinais de controlo para a nova situação. Use o circuito da figura 7.1 como referência, tomando em consideração a abordagem seguida no tratamento de saltos incondicionais (figura 7.2). Exercício 10
Considere a instrução lw $t0, 40($s0). (Para responder às questões seguintes refira-se à figura 1.) a) Apresente o código-máquina correspondente. 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) Quais são os valores dos sinais de controlo RegDst e MemRead? f) Responda às alíneas anteriores para a instrução: Arquitetura e Organização de Computadores
Pág. 73 de 100
Organização do processador MIPS — Exercícios propostos
Label: bne $t0, $t1, Label Exercício 11
Pretende-se projetar a unidade de controlo para uma implementação do CPU em que os componentes 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 aumentar o caminho crítico 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 100
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. Acesso 1 2 3 4 5 6 7 8 9 10
Endereço Hit/Miss
Conteúdo do bloco inicial final
22 26 22 26 16 3 16 8 27 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]. 6. Endereço 3 → posição 3 % 8 = 3; falha (miss); cache[3] ← mem[3]. Arquitetura e Organização de Computadores
Pág. 75 de 100
Memória Cache — Exercícios resolvidos
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: Acesso
Endereço
Hit/Miss
1 2 3 4 5 6 7 8 9 10
22 26 22 26 16 3 16 8 27 10
M M H H M M H M M M
Conteúdo inicial mem[22] mem[26] mem[16] mem[16] mem[3] mem[26]
do bloco final mem[22] mem[26] mem[22] mem[26] mem[16] mem[3] mem[16] mem[8] mem[27] mem[10]
O conteúdo final da memória cache é: Bloco 0 1 2 3 4 5 6 7
Conteúdo mem[8] mem[10] mem[27] mem[22] -
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) é CPI prot = 12. Determine a percentagem de instruções que acede a dados.
Arquitetura e Organização de Computadores
Pág. 76 de 100
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. T =
1 = 0,5 ns logo F
pf =
50 = 100 0,5
b) Seja n a o número de acessos a memória por instrução e t f a taxa de falhas. O número médio de ciclos gastos em protelamento devidos a falhas no acesso a cache é: CPIprot = t f × pf × na Portanto: na =
o que implica na =
CPIprot tf × pf
,
12 4 = 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 = 33,3 %. 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 a edição. Exercício 3
Considere a seguinte sequência de endereços acedidos sucessivamente durante a execução de um programa num sistema com endereços de 8 bits: 1, 134, 212, 1, 135, 213, 162, 161, 2, 44, 41, 221 Admita que o sistema dispõe de uma memória cache de mapeamento direto com 16 blocos, 1 byte/bloco. Para cada um dos acessos apresente o endereço em binário, a etiqueta e o índice. Indique também se o acesso provoca uma falta ou um acerto na memória cache , assumindo que está inicialmente vazia. Exercício 4
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).
Arquitetura e Organização de Computadores
Pág. 77 de 100
Memória Cache — Exercícios propostos
conteúdo 12345678 6548feab 3c1f56fd afd12498 6198fa34 1929aaaa bbabeedd 1123aa56 7611432a ffffeffe ddedd556 4444cccc 7627abed 8768888a 71672912 22256733
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
etiqueta abc 123 678 567 b7c 8d1 cd3 456 001 877 777 198 fdf 479 655 111
v 1 1 1 0 1 0 1 1 1 1 0 1 1 1 0 1
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 L L E E E
2df10 23454 3f7b0 048c4 3f7d0 1dde8
– – – 1212abab 00001111 aaaabbbb
Exercício 5
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).
Arquitetura e Organização de Computadores
Pág. 78 de 100
Memória Cache — Exercícios propostos
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
conteúdo 12345678 6548feab 3c1f56fd afd12498 6198fa34 1929aaaa bbabeedd 1123aa56 7611432a ffffeffe ddedd556 4444cccc 7627abed 8768888a 71672912 22256733
etiqueta abc 123 678 567 b7c 8d1 cd3 456 001 877 777 198 fdf 479 655 111
v 1 0 1 0 1 0 1 1 1 1 0 1 0 1 0 1
d 1 0 0 0 0 1 1 0 1 1 0 1 1 0 0 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): tipo
endereço
valor
L E E L L E E E
2df10 2df10 10c64 23454 3f7b0 21de4 2afdc 3f7b0
– 33334444 9999aaaa – – bbbb7777 1212abab 00001111
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 P2
1 KiB 2 KiB
11,4% 8,0%
0,62 ns 0,66 ns
a) Assumindo que é o tempo de acerto que determina o período de relógio, determine as frequências de operação dos dois sistemas. b) Determine o tempo médio de acesso à memória para os dois casos. c) Assumindo um CPI básico de 1, qual é o CPI de cada um dos processadores? Qual é o processador mais rápido? Arquitetura e Organização de Computadores
Pág. 79 de 100
Memória Memória Cache — Exercícios Exercícios propostos
Exercício 7
Um CPU (com F=1 GHz) está equipado com memórias cache memórias cache para para instruções e para dados, cujas taxas de faltas faltas são, respetiv respetivamen amente, te, 5 % e 10 %. O tempo de acesso acesso a memória principal principal é 80 ns (a acrescentar ao tempo de acesso a memória cache memória cache ). ). Em média, 40 % das instruções instruções de um programa acedem a dados (i.e., são load são load ou store ou store ). ). cache em a) Determine Determine a taxa de de faltas faltas global global da memória memória cache em número de faltas por 1000 instruções. b) Suponha que que se pretendia pretendia equipar equipar o CPU com com uma memória memória cache cache unificada. unificada. Determine a máxima taxa de faltas desta alternativa para que ela apresente o mesmo desempenho que a versão split versão split cache . c) Assuma Assuma que, que, na ausênci ausênciaa de faltas faltas de cache de cache , o CPU tem CPIideal =1,2. =1,2. Determ Determine ine o CPI efetivo para os seguintes casos: i) ii) ii)
sist sistem emaa sem sem memó memóri riaa cache ; sist sistem emaa com com memó memóri riaa cache .
Arquitetura e Organização de Computadores
Pág. 80 de 100
9 Soluções dos exercícios propostos 9.1 Aritmétic Aritmética a binária binária Exercício 9
a) 1000000002 ; 100H b) 111111111112 ; 7FFH c) 11000,012 ; 18,4H d) A parte fracionária fracionária não tem representação representação finita. Usando Usando 4 bits para a parte fracionária, fracionária, a 100,,00112 ; 4,3H . solução é: 100 e) 1610; 10H f ) 4,12510 ; 4,2H g) 111102 ; 3010 1010101111001101 10011012 h) 4398110 ; 101010111 171,,7510 ; 1010 10101011 1011,,112 i) 171
j) 456H Exercício 10 a) 10011102 1010,0012 b) 1010,
c) 10012 d) 101012 e) 11110102 11000100,012 f ) 11000100,
g) 1011002
Arquitetura e Organização de Computadores
Pág. 81 de 100
Soluções Soluções dos exercícios exercícios propostos — Aritmética Aritmética binária
Exercício 11 − 3 = 10112 a) 3 = 00112 ; 2 = 00102 ; −3 (−3) = 10012 b) 3 + 2 = 01012 ; 2 + (−
c) Impossíve Impossível: l: 14 não é represen representáv tável. el. 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) 10101 1010100 002 b) Não Não ocorr ocorree overflow ; overflow ; a diferença de números com o mesmo sinal é sempre representável. Exercício 15
a) 10000 1000000 00112 ; resultado correto (não ocorre overflow ocorre overflow ). ). b) 01011 0101111 11112 ; resultado resultado errado (ocorre overflow (ocorre overflow ). ). c) 00000 0000000 00002 ; resultado correto (não ocorre overflow ocorre overflow ). ). Exercício 16 a) X SS: 227; C2: −29 Y SS: 72; C2: 72 72
b) SS: 100101011; 100101011; resultado resultado errado errado (ocorre (ocorre overflow overflow ). ). C2: 00101011; 00101011; resultado resultado correto correto (não ocorre overflow ocorre overflow ). ). Exercício 17 a) P H = 7A; Q 10 = 34
b) i) i) ii) ii)
00111002 ; resultado errado, pois a soma necessita de 8 bits (há overflow (há overflow ). ). 0011 001110 10002 ; resultado correto, a soma é representável (não há overflow há overflow ). ).
Arquitetura e Organização de Computadores
Pág. 82 de 100
Soluções dos exercícios propostos — Vírgula flutuante
Exercício 18
a) 010010102 b) −92 c) M − N = 101001102 ; resultado errado (ocorre overflow ). N − M = 010110102 ; resultado errado (ocorre overflow ). Exercício 19 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 20 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
9.2 Vírgula flutuante Exercício 7 a) 1,01100000000000000000000 2
b) 000001002
c) −22,0 Exercício 8
a) 41FA0000H
b) BF200000H
c) 00000000H
d) 44805000H
Exercício 9 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 10
a) 40000000H
b) 42150000H
Arquitetura e Organização de Computadores
c) C2250000H
d) C29D0000H
Pág. 83 de 100
Soluções dos exercícios propostos — Circuitos combinatórios
Exercício 11 a) 010000010011101000000000000000002
b) 41460000H (falta indicar os passos)
Exercício 12 a) 110000010010010000000000000000002
b) 13,2510 (falta indicar os passos)
Exercício 13
a) C1400000H
b) C2080000H (falta mostrar os passos).
Exercício 14
Opção A.
9.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
0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
F
1 0 1 0 1 1 0 0
b) X 0 0 0 0 1 1 1 1
Arquitetura e Organização de Computadores
Y
Z
G
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
1 0 1 0 1 1 0 1
c) W 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
X
Y
Z
F
0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0
Pág. 84 de 100
Soluções dos exercícios propostos — Circuitos combinatórios
Exercício 12 a) X Y Z
F
0 0 0 0 1 1 1 1
0 1 0 1 1 1 1 0
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
b) F = (X + Z )·(X + Y + Z ).
Exercício 13 a) Y = A + B .
b) —
Exercício 14 a) F = A·B + C
Exercício 15 a) X Y Z
0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
c) —
F
b) A B 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1
C
F
0 1 0 1 0 1 0 1
1 0 1 1 1 0 1 0
c) Nota: usar a expressão simplificada.
F = (X + Y + Z ) ·X
0 1 1 1 0 0 0 0
Arquitetura e Organização de Computadores
Pág. 85 de 100
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 1 1 1 1 1 1
0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 1 0 1 0 1 0 0 0 1 0 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
0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
F
0 0 0 1 1 0 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. 86 de 100
Soluções dos exercícios propostos — Circuitos combinatórios
Exercício 18 a) A3 A2
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
Exercício 19 a) A B Ci
0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
A1
A0
S
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0
Co
S
0 0 0 1 0 1 1 1
0 1 1 0 1 0 0 1
b) S = A 3 ·A1 ·A0
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 expressõ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, S 3 = 1, S 2 = 0, S 1 = 0 e S 0 = 0.
Arquitetura e Organização de Computadores
Pág. 87 de 100
Soluções dos exercícios propostos — Circuitos combinatórios
Exercício 20 a) A1 A0
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
B1
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
b) MAIOR = A 1·B1 + A0·B1·B0 + A1·A0·B0 .
B0 MAIOR
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 0 0 0 1 0 0 0 1 1 0 0 1 1 1 0
Exercício 21
O circuito determina o máximo de A e B . Exercício 22
a)
b)
c) Por exemplo, sendo F uma função definida por: Arquitetura e Organização de Computadores
Pág. 88 de 100
Soluções dos exercícios propostos — Circuitos sequenciais
X
Y
Z
F
0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
0 1 1 1 0 0 1 0
então o circuito resultante será:
Exercício 23 a) AB = 01 ⇒ AB = 11
⇒
Lvm = 0, Llj = 1 e Lvr = 0.
todas as lâmpadas se mantêm desligadas, pois a saída que fica ativa é Y 3 e
não é usada. b) É impossível ter simultaneamente duas saídas de um descodificador binário ativas.
9.4 Circuitos sequenciais Exercício 6 CL K
D
X
Q
Arquitetura e Organização de Computadores
Pág. 89 de 100
Soluções dos exercícios propostos — Circuitos sequenciais
Exercício 7 a) D(J,K,Q) = J ·Q + K ·Q
b) CLK
J
K
Q
Exercício 8 a) D0 = EN ⊕ Q0
e
D1 = EN ·Q0 ⊕ Q1
b) CL K
EN
Q0
Q1
c) Estado 00 (estado inicial). Exercício 9
a) 0101001101000010. b) 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. Arquitetura e Organização de Computadores
Pág. 90 de 100
Soluções dos exercícios propostos — Desempenho
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 CS ROM = A15 ·A14 A13 ·A12 ·A11 (AND com duas entradas negadas). Exercício 12
a) ROM1: 16 KiB RAM1: 16KiB RAM2: 4KiB b) CS ROM1 = A 15 ·A14 CS RAM1 = A 15 ·A14 CS RAM2 = A 15 ·A14 ·A13 ·A12
c) —
9.5 Desempenho Exercício 9
a) IPCP = 1,43 (instruções/ciclo) IPCP = 2,00 (instruções/ciclo) IPCP = 3,33 (instruções/ciclo) 1
2
3
b) 2,1 GHz c) 27 × 109 Exercício 10 a) P 1 : texec = 1,87ms
P 2 : texec = 1,00ms
P 2 é o processador mais rápido.
b) CPIP = 2,8 (ciclos/instrução) CPIP = 2,0 (ciclos/instrução) 1
2
c) P 1 : 2,8 × 106
P 2 : 2 × 106
Arquitetura e Organização de Computadores
Pág. 91 de 100
Soluções dos exercícios propostos — Desempenho
Exercício 11 P 1 : 4 × 109 (instruções/segundo)
P 2 : 3 × 109 (instruções/segundo)
Exercício 12 a) C é o computador mais rápido (45s).
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 Exercício 14 6,5 × 104 Exercício 15
88 % Exercício 16
a) 1,67
b) 5
Exercício 17
a) Desenhar o gráfico da função S (f ) =
b) f =
1 f + (1 − f ) 10
=
10 10 − 9 × f
0 ≤ f ≤ 1
5 ≈ 0,56 =56 % 9
c) Percentagem de tempo gasto em modo vetorial após introdução da alteração: d) Speedup máximo: 10; para obter speedup de 5 é preciso que f =
8 9
1 9
≈11 %
≈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.
Arquitetura e Organização de Computadores
Pág. 92 de 100
Soluções dos exercícios propostos — Linguagem assembly
9.6 Linguagem assembly Exercício 9
É necessário definir uma atribuição arbitrária de variáveis a registos. a) Atribuição: f → $s0, g → $s1, j → $s2. addi add
$s0, $s2, 2 $s0, $s1, $s0
b) Atribuição: a → $s0, b → $s1, d → $s2, f → $s3, k → $s4. add sub addi add
$s4, $t0, $s4, $s4,
$s0, $s2, $s4, $s4,
$s1 $s3 -30 $t0
c) Atribuição: f → $s0, g → $s1, h → $s2, A → $s7. lw add add
$s0, 16($s7) $s0, $s0, $s1 $s0, $s0, $s2
d) Atribuição: f → $s0, g → $s2, A → $s6, B → $s7. lw sll add lw sub
$t0, $t0, $t0, $s0, $s0,
40($s7) $t0, 2 $t0, $s6 0($t0) $s2, $s0
e) Atribuição: f → $s0, g → $s1, h → $s2, k → $s3, A → $s6. addi sll add lw add sub
$t0, $t0, $t0, $s0, $s0, $s0,
$s2, 9 $t0, 2 $s6, $t0 0($t0) $s0, $s3 $s0, $s1
f) Atribuição: f → $s0, g → $s1, A → $s6, B → $s7. lw addi sll add lw sub
Arquitetura e Organização de Computadores
$t0, $t0, $t0, $t0, $t0, $s0,
8($s7) $t0, 4 $t0, 2 $s6, $t0 0($t0) $s1, $t0
Pág. 93 de 100
Soluções dos exercícios propostos — Linguagem assembly
Exercício 10
a) Atribuição: f → $s0, g → $s1, h → $s2, i → $s3, j → $s4 A expressão correspondente é: f = f + g + h + i + j b) Atribuição: f → $s0, A → $s6 A expressão correspondente é: f = A[1] c) Atribuição: f → $s0, g → $s1, A → $s6 A expressão correspondente é: f = A[g-3] Exercício 11 a) sw $t3,-4($s0)
b) lw $t1,18($t0) Exercício 12 a) 0x57755778
b) 0x55555550 c) 0x0000AAAA Exercício 13
a) — b)
endereço
instrução
0x0400000 0x0400004 0x0400008 0x040000C
0xADAC0000 0x000C6100 0x21AD0004 0x1580FFFC
Exercício 14
a)
sub srl bne add fim: ... b) slt $t1,$t3,$t2
$t2,$zero,$t1 $t0,$t1,31 $t0,$zero,fim $t2,$t1,$zero
Exercício 15
Uma possível solução: ciclo:
fim:
add lb beq addi addi j ...
$s0, $zero, $zero # inicializa contador $t0, 0($s4) # extrai byte de memória $t0, $zero, fim # termina se for 0 $s0, $s0, 1 $s4, $s4, 1 # endereço do próximo byte ciclo
Arquitetura e Organização de Computadores
Pág. 94 de 100
Soluções dos exercícios propostos — Linguagem assembly
Exercício 16
a) Fragmento 1: 20; fragmento 2: 200. b) Fragmento 1: 5 × N + 3; fragmento 2: (1 + 3 × 10 + 2) × N = 33 × N . Exercício 17
Uma solução entre outras possíveis: addi addi proximo: lw lw beq add j continua: addi beq addi addi j fim: ...
$t0,$zero,100 $s0,$zero,1 $t1,0($s4) $t2,0($s5) $t1,$t2,continua $s0,$zero,$zero fim $t0,$t0,-1 $t0,$zero,fim $s4,$s4,4 $s5,$s5,4 proximo
# dimensão das seq. # extrai elemento de A # extrai elemento de B # par diferente
# se não chegou ao fim # passa ao próximo elemento
Exercício 18
Uma solução entre outras possíveis:
ciclo:
prox:
addi $t0, $zero, 50 addi $s7, $zero, 0 lw $t1, 0($s0) andi $t2, $t1, 1 beq $t2, $zero, prox addi $s7, $s7, 1 addi $s0, $s0, 4 addi $t0, $t0, -1 bne $t0, $zero, ciclo ...
# contador: $t0 # resultado a zero
# # # #
par ímpar próximo endereço decrementar contador
Exercício 19
ciclo:
fim:
lw addi addi beq addi lw slt beq add j ...
$t7, 0($t0) $t1, $zero, 50 $t1, $t1, -1 $t1, $zero, fim $t0, $t0, 4 $t2, 0($t0) $t3, $t2, $t7 $t3, $zero, ciclo $t7, $t2, $zero ciclo
Arquitetura e Organização de Computadores
#Carrega 1o número (mínimo inicial) #Inicializa contador de iterações #Decrementa contador #Verifica se chegou ao fim #Atualiza endereço de memória #Carrega próximo número #É menor que mínimo atual? #Continua se não é menor #Atualiza mínimo #Continua o ciclo # Termina Pág. 95 de 100
Soluções dos exercícios propostos — Linguagem assembly
Exercício 20
a) Parâmetros da sub-rotina: • $a0: endereço-base da sequência • $a1: número de elementos da sequência 1 2
soma: L1 :
add $ v0 , beq $a1 , lw $t0 , add $v0 , addi $a0 , addi $a1 , j L1 jr $ra
3 4
5 6 7 8
L2 :
$ ze ro , $ z er o $zero , L2 0( $a0 ) $v0 , $t0 $a0 , 4 $a1 , -1
# r e su l ta do a 0 # terminar # obter um elemento # acumular # endereço do próximo elemento # ajustar n o d e e l e me n t os # repetir ( próximo elemento )
b) Parâmetros da sub-rotina: • $a0: endereço-base da sequência • $a1: número de elementos da sequência 1 2
impar: Lx :
3
4 5 6 7 8
par:
9 10
Ly :
add $ v0 , $ z er o , $ z er o beq $a1 , $zero , Ly lw $t0 , 0( $a0 ) andi $t0 , $t0 , 1 beq $t0 , $zero , par addi $v0 , $v0 , 1 addi $a0 , $a0 , 4 addi $a1 , $a1 , -1 j Lx jr $ra
# r e su l ta do a 0 # terminar # obter um elemento # isolar bit menos sign . # saltar se n o é p a r # contabilizar # endereço do próximo elemento # ajustar n o d e e l e me n t os # repetir ( próximo elemento )
c) Parâmetros da sub-rotina: • $a0: endereço-base da sequência • $a1: número de elementos da sequência • $a2: valor de limiar 1 2 3 4 5 6 7 8 9 10
limiar: add $ v0 , L11: beq $a1 , lw $t0 , slt $t1 , bne $t1 , addi $v0 , L21: addi $a0 , addi $a1 , j L11 L31: jr $ra
$ z er o , $ z er o $zero , L31 0( $a0 ) $t0 , $a2 $zero , L 21 $v0 , 1 $a0 , 4 $a1 , -1
# r e su l ta do a 0 # t er mi na r # obter um elemento # teste : elem < limiar # s al ta r se el em >= li mi ar # contabilizar # endereço do próximo elemento # ajustar n o d e e l e me n t os # repetir ( próximo elemento )
d) Parâmetros da sub-rotina: Arquitetura e Organização de Computadores
Pág. 96 de 100
Soluções dos exercícios propostos — Organização do processador MIPS
• $a0: endereço-base da sequência 1 • $a1: endereço-base da sequência 2 • $a2: número de elementos de cada sequência 1 2 3 4 5 6 7 8 9 10 11
iguais: addi $v0 , $zero , 1 L12: beq $a2 , $zero , L42 lw $t0 , 0( $a0 ) lw $t1 , 0( $a1 ) bne $t0 , $t1 , L32 L22: addi $a0 , $a0 , 4 addi $a1 , $a1 , 4 addi $a2 , $a2 , -1 j L12 L32: add $v0 , $ ze ro , $ z er o L42: jr $ra
# resultado a 1 # ter min ar # obter um elemento da 1 a # obter um elemento da 2 a # saltar se diferentes # endereço do próximo elemento # endereço do próximo elemento # ajustar n o d e e l e mn t o s # repetir ( próximos elementos ) # s eq uê nc ia s d if er en te s
9.7 Organização do processador MIPS Exercício 6
Ter em atenção que PcSrc = AND(Zero, Branch). a) RegWrite=1, MemRead=1, ALUSrc=1, MemWrite=0, MemtoReg=1, PCSrc=0, ALUOp=00, RegDst=0.
Todos os componentes, exceto Shift left 2 e o somador para endereço de saltos ( Add), realizam trabalho útil. 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, RegDst=X.
Todos os componentes realizam trabalho útil, exceto Shift left 2, somador para endereços de saltos (Add) e multiplexador MemtoReg. O valor Read data 2 também não é utilizado. c) RegWrite=0, MemRead=0, ALUSrc=0, MemWrite=0, MemtoReg=X, ALUOp=01, RegDst=X. PCSrc =
0 se $s0 = $t2 1 se $s0 = $t2
Todos os componentes realizam trabalho útil, exceto multiplexador RegDst, memória de dados (D-Mem) e multiplexador MemtoReg. Exercício 7
a) A instrução beq .
Arquitetura e Organização de Computadores
b) A instrução sw.
Pág. 97 de 100
Soluções dos exercícios propostos — Memória Cache
Exercício 8 a) I-Mem → Regs → ALU → D-Mem → Mux . Tempo: 1100 ps.
b) I-Mem → Regs → Mux → ALU → Mux (PCSrc). Tempo: 780ps. Exercício 9
— Exercício 10 a) 0x8E080028.
b) 16. Sim. c) 8. Não. d) 8. Sim. e) RegDst=0, MemRead=1. f) 0x1509FFFF; 8, sim; 9, sim; 9 ou 31 (RegDst=X), não; RegDst=X, MemRead=0. Exercício 11
a) 320 ps. b) RegWrite.700 ps para a instrução mais lenta (lw). c) ALUOp. 150ps.
9.8 Memória Cache Exercício 3
4 bits para índice de bloco ( 16 = 24 ) e 4 bits para etiqueta. endereço etiqueta 1 → 0000 0001 0 134 → 1000 0110 8 212 → 1101 0100 13 1 → 0000 0001 0 135 → 1000 0111 8 213 → 1101 0101 13 162 → 1010 0010 10 161 → 1010 0001 10 2 → 0000 0010 0 44 → 0010 1100 2 41 → 0010 1001 2 221 → 1101 1101 13
Arquitetura e Organização de Computadores
índice Hit/Miss 1 M 6 M 4 M 1 H 7 M 5 M 2 M 1 M 2 M 12 M 9 M 13 M
Pág. 98 de 100
Soluções dos exercícios propostos — Memória Cache
Exercício 4
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.
Exercício 5
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). Arquitetura e Organização de Computadores
Pág. 99 de 100