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: