Você está na página 1de 4

1.

Funções principais do CPU:

a. Fetch – Busca as instruções do programa;

b. Decode – Descodifica cada uma das instruções buscadas;

c. Efectuar a sequência indicada das operações nos dados


correctos.

2. O que o CPU deverá fazer se uma interrupção ocorre?

a. Pára o ciclo fetc-decode-execute, para poder processar/tratar a


interrupção;

Como o CPU detecta uma interrupção?

• CPU termina o ciclo fetch-decode-execute da instrução


corrente e verifica, no inicio de todo ciclo, se fora gerado
alguma interrupção.

Como é manuseada a interrupção?

1. O sistema suspende qualquer que seja o processo a ser


executado, gravando o estado corrente do programa e
informações das variáveis.

2. O ID do dispositivo ou o número pedido da interrupção do


despositivo, é desde então usado como um índice na tabela
do vector de interupção (interrupt vector table), onde é
guardado numa memóri a muito pequena.

3. O endereço da rotina do serviço de interrupção (conhecido


como address vector) é recuperado e posto no PC.

4. Efectua o trabalho específico para tal interrupção.

5. Restaura os valores gravados do estado do programa


quando encontrada a interrupção e retorna ao ciclo fetch-
decode-execute.

O que acontece quando termina o processamento da


interrupção?

• Restaura os valores gravados do estado


do programa quando encontrada a
interrupção e retorna ao ciclo fetch-
decode-execute.

Intervalos:
Maior Ordem – Os bits mais significativos determinam o banco de memória
(0-7).

8=23 – primeiros 3 bits.

Os restantes determinam a posição em cada banco de


memória (0-3).

Se os valores vão até 32, então 32=25 – 5 bits para o nr.

Ex: O Eh=14 – Encontra-se no banco 3, posição 2.

01110=Eh

011b=3 decimal e 10b=2 decimal.

Menor Ordem - Os bits menos significativos determinam o banco de


memória (0-7).

Os restantes determinam a posição em cada banco de


memória (0-3).

Ex: O Eh=14 – Encontra-se no banco 6, posição 1.

01110=Eh

110b=6 decimal e 01b=1 decimal.

Quantos chips de memória de 256Kx8 RAM serão precisos para


fazer uma memória de 2Mx16?

- 2M=2x220=221 – 221 palavras.

- 256K=28x210=218 – 218 Palavras

- 221/218=23=8 (Chips de memória) ou 21-18=3 à 23=8 (Chips de


memória).

Quantos chips de memória de 512Kx8 RAM serão precisos para


fazer uma memória de 16Mx16?

- 16M= 24 x 220 = 224 – 224 palavras.

- 512K= 29 x 2 10 = 219 – 219 Palavras

- 224/219 = 25 = 32 (Chips de memória) ou 24-19=5 à 25=32 (Chips de


memória).

- Fetch-Decode-Execute

Fetch - Primeiros temos que “trazer” (fetch) a instrução da memória


para o IR;
Decode - Uma vez no IR, a instrução é descodificada (decoded)
para sabermos o que e necessário fazer a seguir;
Se envolve um valor (operando) que está na memória, este é lido e
guardado no MBR;
Execute - Tudo no lugar só nos falta executar (execute) a instrução.

Endereçamento Imediato: Neste endereçamento o valor numérico do endereço da


instrução será o valor guardado em AC.
Ex: Se a instrução for Load 008, seu endereço será 008 e o seu valor numérico 8 no
qual se manterá no AC.

Endereçamento Directo: O valor a ser referenciado é obtido através da especificação


do endereço da memória directamente na instrução.
Ex: Na instrução Load 008, o valor que passará para o AC será o que estiver nesse
mesmo endereço.

Endereçamento de registo: é usado o registo ao invés de memória, para especificar


o operando. É similar ao endereçamento directo, mas no campo de endereço contém
a referência do registo. O conteúdo desse registo são usados como o operando.
Ex: Se a instrução for Load R1, então o valor que passará para o AC estará contido
nesse mesmo registo.

Endereçamento Indirecto: Os bits no campo do endereço especifica o endereço de


memória que vai ser usado como um indicador. O endereço efectivo do operando é
encontrado indo para esse endereço de memória.
Ex: Se a instrução for Load 008, e supondo que dentro desse endereço (008) temos
um valor A20h, então a o endereço a trazer o valor será A20h, e o valor contido nesse
endereço é o que vai para o AC.

Endereçamento Indirecto de registo: Funciona da mesma maneira que o


endereçamento indirecto, mas ao invés de usar memória usa registos para o indicador
de dados.
Ex: Se a instrução for Load R1, e dentro do registo R1 conter um valor, esse valor será
o endereço do valor a entrar no AC.

Endereçamento Indexado: Se o operando X da instrução Load X, assumindo que o


Registo R1 é uma registo indexado, e carrega o valor 1, então, o endereço efectivo do
operando será X+1.

Endereçamento Baseado: é similar ao endereçamento indexado, exceptuado o uso


de endereço de registo baseado ao invés de registo indexado. O registo baseado
guarda o endereço baseado, onde o campo de endereço representa o deslocamento
apartir dessa base.

Endereçamento de pilha: Neste endereçamento, o operando encontra-se dentro da


pilha.

Pipelining

Supondo que temos um k-stage pipeline:

tp – Tempo de ciclos do relógio (tempo por stage);


n – Número de instruções por processar;
T1 – Task 1
Time required in cycles, without a pipeline.

(n-1) – The remaining tasks.


(n-1)tp – The remaining tasks from the pipeline 1 per cycle.

Para completar n tasks usando um k-stage pipeline é requer:

Ou

Speedup que obtemos usando o pipeline:

Se n aproxima o infinito, então (k+n-1) aprxima-se a n: