AULA 5 - FTP da PUC

Propaganda
AULA 5 – Complemento
Visão de uma Arquitetura
Figura 11
O projeto de um computador ou de outro processador digital geralmente começa pela consideração da
arquitetura. Decisões devem ser tomadas a respeito do número de registradores, tipos de registradores, operações
a serem realizadas e a interconexão dos componentes, para permitir o fluxo de dados e informações de controle.
Não existe um procedimento formal que leve à melhor arquitetura possível – as decisões são normalmente
tomadas em função dos resultados de projetos anteriores.
Na arquitetura acima, a memória armazena palavras de doze bits e o OPR armazena códigos de instrução
de quatro bits (com 24 = 16 possíveis códigos de instrução). Obviamente é uma simplificação de modelo, podendo
ser consideradas arquiteturas similares com mais bits e maior complexidade.
Nessa arquitetura existe um contador de programa (PC), um registrador de propósitos gerais (GPR) e um
registrador de operações (OPR), que armazenará a parte da operação da instrução.
Quando uma instrução (que consiste em uma parte referente à operação e uma parte referente ao endereço
do operando) for lida da memória, a instrução será primeiro lida no GPR. Sua parte de operação (de quatro bits)
será então transferida para a OPR e a parte de endereços (oito bits) será transferida para o registrador de endereço
de memória (MAR).
O contador de programa (PC) tem a capacidade de ser incrementado e de receber a parte de endereços do
GPR.
1.
2.
3.
4.
O GPR é capaz de realizar quatro operações:
Pode transferir para si próprio a palavra de memória endereçada. Para isso, basta habilitar o terminal de
controle M → GPR;
Pode transferir para si o conteúdo do acumulador;
Pode transferir para si os oito bits do contador de programa;
Pode ser incrementado.
Para realizar cada microoperação, o controlador deve formar sinais de comando dos terminais de controle
de diversos registradores e da memória em ciclos de relógio apropriados.
Lista de micro-operações
Memória : GPR → M
escreve o conteúdo de GPR na localização de memória
PC: PC + 1 → PC
incrementa o PC
GPR (AD) → PC transfere a parte do endereço do GPR para o PC
MAR
: GPR (AD) → MAR transfere a parte de endereços do GPR para o MAR
OPR
: GPR (OP) → OPR transfere a parte de operação do GPR para o MAR
GPR
: M → GPR
transfere a palavra endereço para o GPR
Acc → GPR
transfere o conteúdo do acumulador para o GPR
PC → GPR (AD) transfere o conteúdo do PC para a parte de endereços
do GPR
GPR + 1 → GPR incrementa GPR
GPR+Acc→ Acc adiciona conteúdo do GPR com o do Acc e deixa
resultado no Acc
GPR + Acc → Acc adiciona conteúdo do GPR com o de Acc e deixa
resultado no Acc
ULA:
Ø → Acc
ACC → Acc
Acc + 1 → Acc
Ø→F
F→F
zera o acumulador
complementa o acumulador
incrementa o acumulador
zera o flip-flop F
complementa F
ROR F Acc
gira o acumulador à direita através de F.
ROL F Acc
Figura 12
gira o acumulador à esquerda através de F.
Figura 13
Instruções:
Após iniciar a operação, o controlador funcionará buscando uma instrução, acrescentando-a, buscando
outra instrução, executando-a e assim por diante.
A seqüência de microinstruções necessárias para realizar a busca (“fetch”) da instrução é a seguinte:
1.
PC
→ MAR
transfere endereço de instrução para o MAR
2.
M
→ GPR
transfere a palavra endereçada (instrução) para o GPR
PC + 1 → PC
e incrementa o PC
3.
GPR (OP) → OPR transfere a parte da operação para o OPR
As instruções da máquina podem ser implementadas diretamente a partir das microinstruções, ou através
de combinações ou seqüências delas.
Instruções elementares: (implementadas diretamente das microinstruções)
Ø
Acc
Acc + 1
Ø
F
ROR
ROL
PC + 1
→
→
→
→
→
F
F
→
Acc
Acc
Acc
F
F
Acc
Acc
PC
zerar o acumulador
complementar o acumulador
incrementar o acumulador
zerar F
complementar F
girar à direita por F
girar à esquerda por F
saltar para a próxima instrução
se F = Ø
terminar
CRA
CTA
ITA
CRF
CTF
ROR
ROL
SFZ
HLT
Outras instruções:
1) ADD <endereço>
Adiciona ao conteúdo do acumulador o operando localizado no endereço específico.
1. GDR (AD) → MAR
2. M → GDR
3. GDR + Acc → Acc
2) ADD I <endereço>
Adiciona ao conteúdo do acumulador o operando apontado pelo endereço especificado
1. GDR (AD) → MAR
2. M → GRR
3. GPR (AD) → MAR
4. M → GPR
5. GPR + Acc → Acc
3) STA <endereço>
Armazena o conteúdo do acumulador no endereço de memória especificado.
1. GPR (AD) → MAR
2. Acc → GPR
3. GPR → M
4) JMP <endereço>
salta para a instrução presente no endereço especificado
1. GPR (AD) → PC
5) JMPI <endereço>
salta para a instrução apontada pelo endereço especificado
1. GPR (AD) → MAR
2. M → GPR
3. GPR (AD) → PC
6) CSR <endereço>
chama a subrotina armazenada a partir do endereço especificado
1. GPR (AD) → MAR
2. GPR (AD) →→ PC
3. PC → M
4.GPR (AD) → PC
5. PC + 1 → PC
7) ISZ <endereço>
incrementa o valor armazenado no endereço especificado e salta para a próxima instrução, se zero.
1.
2.
3.
4.
5.
Outras instruções
CRA
CTA
ITA
CRF
CTF
ROR
ROL
HTL
GRR (AD)
M
GPR + 1
GPR
PC +1
→
→
→
→
→
MAR
GRR
GPR
M
PC (se GPR = 0)
Figura 14
Exemplos de Programação na Arquitetura
Figura 15
Microprogramação
Microprogramação é uma técnica de realizar controle em computadores, e baseia-se na utilização de
microinstruções. Um computador controlado por microprograma pode ser visto como um computador dentro de
outro computador.
As microinstruções (ou micro-operações) são executadas em resposta à sinais aplicados à terminais de
controle dos registradores, ULA e memória. Esses sinais são chamados de sinais de comando. Em qualquer
intervalo de relógio uma ou mais entradas de controle devem ser habilitadas para a execução dos procedimentos
computacionais. Através disso é possível executar seqüências de microinstruções (tais como: (1) GPR
(AD)→MAR, (2) M→GPR, (3) GPR + Acc→Acc), executando, ao final de cada seqüência, uma instrução da
linguagem de máquina (como ADD).
Exemplo de Controlador de Interrupção:
Figura 16
Após iniciar sua operação, um controlador típico repete seqüências de busca-execução de instruções até
encontrar uma instrução de parada (ex.: “Halt”).
No entanto, eventualmente é necessário interromper essa seqüência para fazer com que o controlador
execute uma ou outra seqüência especial de instruções. Isso pode ocorrer porque uma fonte solicita uma
interrupção. Em resposta, o controlador deve atender à interrupção. Obviamente, se existem vários níveis de
interrupção em um sistema computacional, o controlador só irá interromper seu procedimento para atender a
solicitação de maior prioridade.
Formatos de Instrução
Uma instrução em linguagem de máquina possui dois componentes fundamentais: o código da operação e
campos de endereços opcionais. As instruções em linguagem de máquina podem ainda conter modificadores,
específicos de cada arquitetura e fabricante.
O código da operação é tipicamente um valor binário sem sinal que indica a operação que deve ser
executada. O conjunto das operações que podem ser manipuladas diretamente pelo processador é chamado de
conjunto de instruções ou linguagem de máquina. Se as instruções alocam i bits para o código, é possível haver
até 2i instruções para aquela arquitetura em particular.
Os campos de endereço, também chamados operandos, são os endereços da informação sobre o qual o
processador irá executar a operação específica. Os conjuntos de instrução são caracterizados pelo número de
operandos permitidos em cada operação.
Figura 17
Formato de 4 endereços:
O formato de instruções com quatro endereços permite até quatro endereços em cada instrução. O uso
desses endereços é definido pelo fabricante para cada instrução, como por exemplo, especificado:
1. o operador esquerdo de uma operação binária;
2. o operador direito de uma operação binária;
3. o resultado
4. o endereço da próxima instrução.
Ex.: A: = B + C – D
endereço op. code
op. esq.
op. direito
Res.
100
101
B
T
C
D
T
A
ADD
SUB
Prox.
inst.
101
102
O comando acima poderia ser realizado em apenas dois passos.
Apesar de seu poder de representação, o formato de quatro endereços não é utilizado por tornar as
instruções muito grandes. Para suportar 2i instruções diferentes e 2n endereços de memória, o tamanho total de
cada instrução seria de i + 4n.
Formato de 3 endereços
Para reduzir o tamanho das instruções com endereços pode-se eliminar, por exemplo, o endereço da
próxima instrução.
Os endereços descreveriam:
- o operando esquerdo de uma operação binária;
- o operando direito de uma operação binária;
- o resultado
Como o endereço da próxima instrução não é especificado, é necessário convencionar sua localização. A
convenção utilizada para todos os computadores convencionais é executar a instrução presente no endereço
seguinte a menos que seja especificada uma outra instrução.
Essa convenção faz com que os programas sejam armazenados em bloco seqüenciais de memória. Além
disso, já que o endereço da próxima instrução a ser executada não é mais explícito, é necessário incluir um
registrador especial para armazenar essa informação: o contador de programa (PC). É necessário ainda haver
instruções que não restrinjam a execução dos programas sempre as instruções seguintes, implementando as
chamadas “branching instructions”.
Apesar de menores, esse formato de instrução ainda apresenta instruções grandes, de vários bytes, que
devem ser armazenados e buscados na memória.
Formato de dois endereços:
Exemplo de registrador de instruções (IR):
Figura 18
Para reduzir o tamanho das instruções, é possível eliminar mais endereços, como o do resultado. Assim, é
necessário convencionar seu armazenamento em algum local fixo e conhecido, como por exemplo, no mesmo
endereço do primeiro ou segundo operando. Assim, uma instrução do tipo “ADD x,y” pode representar “x:=
x+y”. como é fácil notar, no uso desse formato, é necessário estar atento a esta convenção para não perder
informações.
Formato de um endereço:
Figura 19
Neste formato, só existe um endereço por instrução. É necessário convencionar quais são os endereços de
um possível segundo operando e do resultado, como por exemplo em um registrador de propósitos gerais (ex.:
Acc).
Assim, uma instrução do tipo “ADD x” significa “Acc : = Acc + x”
A vantagem desse formato de instruções é seu tamanho. Com 2i instruções diferentes e espaço endereçável
n
2 , cada instrução ocuparia somente ( i + n) bits.
Exercícios
1. Implemente o comando A: = B + C – D usando instruções hipotéticas (ex.: ADD e SUB) e formatos de 3,
2 e 1 endereços.
2. É possível implementar um computador com formato de Ø endereços? Se sim: como isso poderia ser
implementado?
3. Se um computador utiliza formato de instruções com 2 endereços, tiver 16 Mb de espaço endereçável e
100 instruções diferentes, qual deveria ser o tamanho do seu registrador de instruções?
4. É verdadeira ou falsa a afirmação abaixo? Por quê? Ao final da fase de “fetch”, o PC conterá o endereço
da próxima instrução a ser executada.
5. Reescreva a instrução abaixo em notação prefixa: A : = (( B + C * (C/(D*E))) – 1
6. Uma variação da estrutura de Von Neumann consiste na execução simultânea de uma única instrução em
ULAs distintas. Descreva possíveis explicações para uma arquitetura desse tipo.
Download