Você está na página 1de 7

GABARITO APX3 2° semestre de 2021.

1. (1,5 pontos) Considere uma máquina que pode ter seu ciclo de busca e execução de uma instrução dividido em
5 blocos totalmente independentes: Busca de Instrução (BI), Decodificação (DI), Cálculo de Endereços de
Operandos (CO), Busca dos Operandos (BO) e Execução (EX). Cada um dos blocos BI, BO e EX possui a
duração de 8 ps (picosegundos), o bloco DI tem a duração de 2 ps e o CO tem duração de 1 ps. Cada instrução
desta máquina precisa executar os 5 blocos que serão sempre executados na sequência BI, DI, CO, BO e EX.
Calcule o tempo de UCP utilizado para executar 50 instruções nesta máquina, para cada caso abaixo:

a. (0,5) Execução em uma máquina que realiza a execução das instruções de forma sequencial.
1º. 2º. 3º. 4º. 5º.
bloco bloco bloco bloco bloco

BI DI CO BO EX
8ps 2ps 1ps 8ps 8ps

O tempo total do ciclo de busca e execução de uma instrução deverá ser obtido com a soma dos tempos na
execução sequencial dos blocos = 27ps (8ps + 2ps + 1ps + 8ps + 8ps)
Para executar 50 instruções, o tempo total = 50 x tempo de uma instrução = 50 x 27ps= 1350ps

b. (0,5) Execução em uma máquina que utiliza um pipeline de 2 estágios, considerando que o primeiro
estágio executa os blocos BI DI e CO, e o segundo estágio executa os blocos BO e EX. Considere que
não há atrasos na execução do pipeline, devido a desvios condicionais.

1º. Estágio 2º. Estágio

BI DI CO BO EX
8ps 2ps 1ps 8ps 8ps

11ps 16ps
Assumir tempo de 16ps Tempo 16ps

Temos de considerar o mesmo tempo para todos os estágios. Será adotado o tempo do estágio de maior tempo.
O ciclo de busca e execução de 1 instrução (t1) será igual ao tempo de 2 estágios = 2 x 16ps = 32ps
Para executar 50 instruções, o tempo total (Ttotal) = tempo da 1ª instrução (t1) + 49 x tempo de um estágio
Ttotal = 32ps + 49 x 16ps = 816ps

c. (0,5) Execução em uma máquina que utiliza um pipeline de 5 estágios, no qual cada bloco é executado
em um estágio. Considere que não há atrasos na execução do pipeline, devido a desvios condicionais.

1º. Estágio 2º. Estágio 3º. Estágio 4º. Estágio 5º. Estágio
8ps 8ps 8ps 8ps 8ps

BI DI CO BO EX

Temos de considerar o mesmo tempo para todos os estágios. Será adotado o tempo do estágio de maior tempo.
O ciclo de busca e execução de 1 instrução (t1) será igual ao tempo de 5 estágios = 5 x 8ps = 40ps
Para executar 50 instruções, o tempo total (Ttotal) = tempo da 1ª instrução (t1) + 49 x tempo de um estágio
Ttotal = 40ps + 49 x 8ps = 432ps
2. (1,0 ponto) Um computador, que apresenta uma arquitetura similar àquela apresentada em aula, possui uma
capacidade máxima de memória principal de 256 M células, cada uma capaz de armazenar uma palavra de 8
bits. A largura do barramento de dados é de 8 bits. As instruções da máquina são compostas de 2 campos: código
de operação e endereço da célula de memória do operando. Sabe-se que o tamanho de uma instrução é 32 bits.

1 (0,5) Calcule o número de operações diferentes que esse computador pode ter.
Cada instrução = código de operação + 1 operando
operando = endereço de memória, são necessários 28 bits para endereçar 256M células
32bits = código de operação + 28bits => código de operação = 4 bits
Com 4 bits, podemos ter 24 = 16 operações diferentes

2 (0,5) Indique o número de acessos à memória necessários para se obter uma instrução.
Para uma instrução de 32bits e barramento de dados de 8 bits, serão necessários 4 acessos.

3. (5,0 pontos) Visando implementar instruções de salto condicional, responda os seguintes itens.

a. (1,0) Apresente um programa em linguagem de montagem, e o mesmo programa traduzido para


linguagem de máquina, que implemente o seguinte programa proposto, descrito a seguir em
linguagem de alto nível:

IF A <= 0 GO TO EXIT ELSE CONTINUE.

Se A <= 0 o programa desvia para EXIT; se não, ele continua a execução com a próxima instrução. O
operador <= refere-se à comparação “menor ou igual”.

No seu programa, você pode usar qualquer instrução apresentada na aula 4.

OBS1: nas instruções ministradas na aula 4, não temos a instrução condicional (Se A<= 0), podemos
adotar a composição das condicionais (Se ACC < 0) e de (Se ACC = 0), ou então pela substituição
pela condicional (Se ACC > 0) invertendo as saídas
OBS2: Consideremos A na posição de memória 20
OBS3: Consideremos EXIT um endereço de memória para outro programa

Opção 1: decompondo ACC <=0 em duas condicionais ACC<0 e ACC=0


Endereço (hexa) Instrução Descrição Linguagem Máquina (bin / hexa)
00 LDA 20 ACC ← (20) ( 0001 0001 0000 / 120 )
01 JZ 04 se ACC = 0, CI ← 04 ( 0011 0000 0100 / 504 )
02 JN 04 se ACC < 0, CI ← 04 ( 0111 0000 0100 / 704 )
03 JMP 05 CI ← 05 ( 1000 0000 0101 / 805 )
04 JMP EXIT CI ← EXIT ( 1000 ---- ---- / 8-- )
05 xxx Próxima instrução
...
20 yyy Conteúdo de A ( ---- ---- ---- / --- )
...
EXIT xxx Instrução do outro programa ( ---- ---- ---- / --- )
...

Opção 2: substituindo ACC <=0 por ACC>0, mantendo a lógica invertendo as saídas
Endereço (hexa) Instrução Descrição Linguagem Máquina (bin / hexa)
00 LDA 20 ACC ← (20) ( 0001 0010 0000 / 120 )
01 JP 03 se ACC > 0, CI ← 03 ( 0110 0000 0011 / 603 )
02 JMP EXIT CI ← EXIT ( 1000 ---- ---- / 8-- )
03 xxx Próxima instrução
...
20 y Conteúdo de A ( ---- ---- ---- / --- )
...
EXIT x Instrução do outro programa ( ---- ---- ---- / --- )
...
Nos itens b., c., d. e e. a seguir, assuma que estamos projetando uma máquina que implementa apenas
um subconjunto bem restrito de instruções. Em particular, a máquina irá suportar um conjunto de instruções
minimalista necessário para implementar o programa proposto. Um dos propósitos da questão é mostrar que
mesmo com tal conjunto de instruções bem restrito, ainda assim podemos contornar as restrições e
implementar o programa proposto.

b. (1,0) Crie um conjunto de instruções de um operando definidas em Linguagem Assembly, necessárias


para a implementação do seguinte programa proposto. Explique cada instrução criada em detalhes.

IF A <= 0 GO TO EXIT ELSE CONTINUE.

Atenção! Na sua solução, você pode fazer uso da seguinte instrução

JZ Ra, EXIT

onde Ra é um registrador e EXIT é um endereço de memória. Você não pode fazer uso de nenhuma
outra instrução de JUMP nem de comparação além de JZ. Ao invés disso, aproveite-se da
observação abaixo.

Observação: note que A <= 0 se e somente se X = 0 onde

X= max(A,0),
e max(A,0) = (A+|A|)/2

Atenção! O seu conjunto de instruções pode conter instruções para calcular somas, subtrações,
divisões e a operação de módulo (valor absoluto). A operação de módulo (valor absoluto) é definida
como sendo igual |Y| = Y se Y >= 0, e |Y| = -Y caso Y < 0. Essa operação pode fazer parte do seu
conjunto de operações.

Adotando as mesmas instruções ministradas em aula, exceto as que foram acrescidas (A e B)

Instruções

Cod. Op. Instrução Descrição

1 LDA Op. ACC ← (Op.)


2 STR Op. (Op.) ← ACC
3 ADD Op. ACC ← ACC + (Op)
4 SUB Op. ACC ← ACC – (Op)
5 JZ Op. Se ACC=0, CI ← Op.
6 JP Op. Se ACC>0, CI ← Op.
7 JN Op. Se ACC<0, CI ← Op.
8 JMP Op. CI ← Op.
..
A MDL Op. ACC ← |(Op)| Módulo do conteúdo de Op
B DIVi z ACC ← ACC / z (modo imediato para z)
c. (1,0) Elabore uma sequência de instruções que implemente o seguinte programa proposto, usando as
instruções que você elencou no item acima.

IF A <= 0 GO TO EXIT ELSE CONTINUE.

Importante! A sua sequência de instruções deve funcionar independentemente da forma como os


números são armazenados (por exemplo, a sua sequência de instruções não deve se aproveitar
explicitamente da representação dos números em formato sinal e magnitude ou complemento a dois).

OBS1: Consideremos A a posição de memória 20, e X na posição 21


OBS2: Consideremos Exit um endereço de memória para outro programa
Endereço (hexa) Instrução Descrição
00 MDL 20 ACC ← |(20)| Resolvendo
01 ADD 20 ACC ← ACC + (20) X = (A + |A|)/2
02 DIVi 2 ACC ← ACC / 2 equivalente a X = max(A,0)
03 STR 21 (21) ← ACC
04 JZ EXIT se ACC = 0, CI ← EXIT Se X = 0 então Exit , equivalente a
IF A <= 0 GO TO EXIT ELSE CONTINUE
05 xxx Próxima instrução Restante do programa
...
20 y Conteúdo de A Dados
21 y Conteúdo de X
...
EXIT xxx Instrução do próximo programa Próximo programa (EXIT)
...

d. (1,0) Suponha que agora se deseje implementar o seguinte programa proposto

IF A >= 0 GO TO EXIT ELSE CONTINUE.

Entretanto, assuma agora que A está representado no formato de inteiro de 8 bits com sinal (formato
sinal e magnitude). O bit mais significativo guarda o sinal: 0 se positivo, 1 se negativo.

Atenção! Enquanto nos itens anteriores tínhamos A <= 0, nesse item temos A >= 0.

Elabore uma sequência de instruções que implemente o programa proposto acima.


Diferentemente dos itens acima, utilize exclusivamente as

● instruções de deslocamento
● instrução JZ

Instrução de deslocamento: esse tipo de instrução desloca todos os bits para a direita (right shift) ou
para a esquerda (left shift). Na right shift, a instrução preenche o bit mais significativo com zero. Na
left shift, a instrução preenche o bit menos significativo com zero.
Para resolvermos a condição A>=0, diferente do item anterior, vamos troca de sinal do valor de A e,
assim, manter a mesmo procedimento de solução utilizado no item anterior. Para inverter o sinal, será
criada uma instrução para esse fim

Adotando as mesmas instruções do item anterior, acrescido as instruções B,C,D

Instruções

Cod. Op. Instrução Descrição

1 LDA Op. ACC ← (Op.)


2 STR Op. (Op.) ← ACC
3 ADD Op. ACC ← ACC + (Op)
4 SUB Op. ACC ← ACC – (Op)
5 JZ Op. Se ACC=0, CI ← Op.
6 JP Op. Se ACC>0, CI ← Op.
7 JN Op. Se ACC<0, CI ← Op.
8 JMP Op. CI ← Op.
..
A MDL Op. ACC ← |(Op)| Módulo do conteúdo de Op
B LSHi z (ACC) ← (ACC) << z (modo imediato para z)
C RSHi z (ACC) ← (ACC) >> z (modo imediato para z)
D INVs ACC ← -ACC inverter sinal do valor contido em ACC.– sinal e magnitude

OBS1: Consideremos A a posição de memória 20, e X na posição 21


OBS2: Consideremos Exit um endereço de memória para outro programa
Endereço (hexa) Instrução Descrição
00 LDA 20 ACC ← (20)
01 INVs ACC ← - ACC Invertendo sinal de A colocando em B
02 STR 21 (21) ← ACC B = -A
03 MDL 21 ACC ← |(21)| Resolvendo
04 ADD 21 ACC ← ACC + (21) X = (B + |B|)/2
05 RSHi 1 ACC ← ACC >> 1 equivalente a X = max(B,0)
06 STR 21 (21) ← ACC
07 JZ EXIT se ACC = 0, CI ← EXIT Se X = 0 então Exit , equivalente a
IF A >= 0 GO TO EXIT ELSE CONTINUE
08 xxx Próxima instrução Restante do programa
...
20 yyy Conteúdo de A Dados
21 yyy Conteúdo de X
...
EXIT xxx Instrução do próximo programa Próximo programa
...

e. (0,5) Refaça o item d. acima assumindo que o conteúdo de A é inteiro no formato complemento a
dois.

Um valor em complemento a dois, caso seja negativo, terá erro quando aplicada a instrução de
deslocamento binário face a composição da representação do complemento a dois. No programa do
item d, não será necessário, pois B + |B| sempre resultará em um número não negativo, o que não
inviabiliza o uso da instrução de deslocamento binário. Concluíndo, não há necessidade de alteração
no programa apresentado no item d quando utilizar complemento a dois para A. O mesmo programa
poderá ser utilizado neste item.
f. (0,5) Explique as vantagens e desvantagens da sua solução dos últimos dois itens d., e. em
comparação com a solução do item c.

A diferença está basicamente no uso do deslocamento binário (RSHi) que é uma instrução que exige
menos ciclos de processamento em relação à operação de divisão e possui uma implementação em
hardware mais fácil. A limitação do deslocamento está em ser equivalente à operação de divisão apenas
quando o divisor for 2 ou potência deste, e como mencionado no item anterior, a aplicação do
deslocamento binário em valores negativos leva a erros nos resultados esperados.
4. (2,5 pontos) Certo ou errado. Justifique claramente. Resposta sem justificativa clara não pontua.

a. (0,5) O uso de pipeline é sempre benéfico, em termos de desempenho, para a execução de uma sequência
de instruções, independente do número de estágios envolvidos no pipeline, do número de ciclos
necessários para a execução das instruções sem pipeline, e do número de instruções na sequência a ser
executada.

Não são benéficos em programas que contenham uma quantidade muito grande de saltos. Cada salto faz
com que o pipeline descarte as instruções parcialmente executadas e recomece a partir do novo endereço
fornecido na instrução (ou condição) que gerou o salto.

b. (0,5) Arquiteturas CISC só têm vantagens com relação a arquiteturas RISC

Não, arquiteturas CISC requerem um decodificador (hardware) mais elaborado, necessitam de


microprogramação para execução de instruções complexas, um pipeline não linear, com capacidade de
executar instruções com diferentes comportamentos e modos de endereçamento, entre outros. Enfim,
requerem um circuito eletrônico de arquitetura mais complexa e de maior custo.

c. (0,5) E/S por programa (ou seja, na qual a UCP verifica continuamente o dispositivo) pode ser preferível
em relação à E/S por interrupção em algumas situações, e em outras não.

Sim, em dispositivos mais simples, com limitações de memória e complexidade para o sistema embarcado, o E/S por
programa costuma ser a melhor opção que é mais simples e de baixo custo. Uma E/S por interrupção requer circuitos
adicionais para gerenciar interrupções implicando em acréscimo ao custo do dispositivo e um sistema operacional
mais elaborado

d. (0,5) Se A e B forem representados na forma de inteiros com complemento a 2, e tivermos A > 0 e B > 0,
podemos ter A + B < 0.

Sim, quando o resultado de A + B, ambos positivos, for maior (em valor) que a capacidade de
representação. Essa capacidade de representação leva em conta o número de bits da palavra e o modo de
representação que é complemento a 2.
Exemplo:
 uma palavra de 5 bits, em complemento a 2, tem a capacidade de representação de -16 a +15.
 Tomando A = 9 e B = 8, a resposta obtida de A + B = -15, mas esperávamos 9 + 8 = 17, que
está fora da faixa de representação.
 O motivo para o valor -15 ocorrer, é que temos de considerar sua soma binária. Os correspondentes
binários de 9 + 8 são 01001 + 01000, e sua soma é igual a 10001 que em complemento a dois
resulta em -15

e. (0,5) Se dois sistemas computacionais A e B têm a mesma classificação segundo a taxonomia de Flynn,
então A e B têm similar poder computacional, sendo tal poder computacional medido em número de
operações executadas por segundo.
Não, pois há muitos outros fatores que afetam, bem ou mal, o desempenho do poder computacional,
como clock, arquitetura de memória, desenho do pipeline, comunicação e distribuição de tarefas,
entre outros

Você também pode gostar