dcc001 - 2011-21 aula expositiva 4 2.4 processadores 2.4.1 micro-instruções 2.4.2 desvios 2.4.3...
TRANSCRIPT
DCC001 - 2011-2 1
Aula Expositiva 4
2.4 Processadores2.4.1 Micro-instruções2.4.2 Desvios2.4.3 Desvios Condicionais2.4.4 Instruções e Programação em Assembler
DCC 001Programação de Computadores
2o Semestre de 2011Prof. Osvaldo Carvalho
Uma Calculadora
DCC001 - 2011-2 2
Uma Calculadora
DCC001 - 2011-2 3
CalculadoraFluxos de Dados
As rotas de dados da calculadora permitem controlar diversos fluxos de dados, envolvendo a memória RAM, as entradas e saídas, o acumulador e os registradores de dados e de endereços
O controle de fluxos é feito pelo usuário Logisim, que se encarrega de mudar de 0 para 1 ou de 1 para 0 os sinais de controle
de posse de barramentos e de cópia de registradores, entrar com valores literais (endereços, valores a serem
somados ou armazenados, …) no registrador In na sequência adequada ao efeito desejado
DCC001 - 2011-2 4
Um Fluxo na Calculadora
Somar os conteúdos das posições 1 e 2 da memória, e colocar o resultado na posição 3
Etapas:1. Carregar no acumulador o conteúdo da
posição 1 da RAM2. Somar ao acumulador o conteúdo da
posição 2 da RAM3. Armazenar o conteúdo do acumulador na
posição 3 da RAMDCC001 - 2011-2 5
Sinal ComentáriosACC_Clear = 1ACC_Clear = 0Input = 1In_Clk = 1In_Clk = 0In_Bus = 1MAR_Clk = 1MAR_Clk = 0In_Bus = 0RAM_Bus = 1ACC_Clk = 1ACC_Clk = 0RAM_Bus = 0
Carrega no acumulador o conteúdo da posição 1 da RAM
Etapa 1: Carregar
DCC001 - 2011-2 6
Entrada de literal
Input = 2In_Clk = 1In Clk = 0In_Bus = 1MAR_Clk = 1MAR_Clk = 0In_Bus = 0RAM_Bus = 1ACC_Clk = 1ACC_Clk = 0RAM_Bus = 0
Soma ao acumulador o conteúdo da posição 2 da RAM
Etapa 2: Somar
DCC001 - 2011-2 7
Entrada de literal
Etapa 3: Armazenar
DCC001 - 2011-2 8
Input = 3In_Clk = 1In_Clk = 0In_Bus = 1MAR_Clk = 1MAR_Clk = 0In_Bus = 0ACC_Bus = 1RAM_Clk = 1RAM_Clk = 0ACC_Bus = 0
Armazena o conteúdo do acumulador na posição 3 da
RAM
Entrada de literal
Programa Armazenado
DCC001 - 2011-2 9
Processador
Processador: circuito de comportamento flexível, comandado por um programa
O programa é escrito por um ser humano, que deseja resolver um problema de transformação de informação
A troca de programa não deve envolver modificações no circuito
DCC001 - 2011-2 10
Da Calculadora ao Processador
O programa em seu formato final deve ser também informação codificada em bits
Para ser executado, o programa deve estar carregado em alguma memória
Uma unidade de controle deve ser adicionada à calculadora
Os sinais de controle (tomadas de barramentos, clocks de registradores, ...) devem ser emitidos pela unidade de controle de forma a obter a computação determinada pelo programa
DCC001 - 2011-2 11
Programa como Codificação dos Sinais de Controle - 1
DCC001 - 2011-2 12
O programa fica armazenado como uma sequência de palavras em uma memória
Por razões que veremos mais tarde, chamamos cada palavra destes programas de micro-instrução
A cada bit da micro-instrução corresponde um sinal
Programa como Codificação dos Sinais de Controle - 2
A unidade de controle implementa um ciclo de leitura em seqüência de micro-instruções da memória de programa
Os bits de cada palavra lida são encaminhados para as saídas da unidade de controle, que estão ligadas aos pontos de controle da (ex-) calculadora
DCC001 - 2011-2 13
23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
In_b
usIn
_Clk
MAR
_Clk
RAM
_Bus
RAM
_Clk
DR_
Bus
DR_
Clk
Subt
ract
Out
_Clk
Com
pare
_Clk
ACC_
Bus
ACC_
Clk
ACC_
Clea
r
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ACC_Clear = 1 ACC = 01 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 ACC_Clear = 0; In_Bus = 1 Bus = In2 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 MAR_Clk = 1 MAR = Bus3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 In_Bus = 0; MAR_Clk = 0; DR_Bus = 1 Bus = DR4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 RAM_Clk = 1 RAM = Bus
Ende
reço
Micro-instrução
Sinais
Clicks Equivalentes Efeito
Codificação dos Sinais de Controle em Micro-instruções
DCC001 - 2011-2 14
Micro-instruções
Contador de Programa
DCC001 - 2011-2 15
Soma 1
Registrador
Unidade de ControleSomente Sinais
DCC001 - 2011-2 16
Contador de Programa armazena o endereço
da próxima micro-instrução a ser
executada
Memória de Programa
Caixa de Música
DCC001 - 2011-2 17
Valores Literais
No uso da calculadora a intervenção do operador se dá também na entrada de valores literais (p. ex. um endereço de palavra a ser carregada, ou um valor a ser adicionado ao acumulador)
Para eliminar esta necessidade de intervenção humana, uma unidade de controle deve permitir que estes valores já possam ser especificados no programa
Os literais devem ser fornecidos pela unidade de controle à (ex) calculadora nos momentos adequados
Por fornecer entenda-se: colocar no barramento
DCC001 - 2011-2 18
Codificação de Operandos em Micro-Instruções
DCC001 - 2011-2 19
Literal nos 16 bits menos
significativos = 2
Sinal Adicionalcoloca Literal
no Barramento
Bit 23 indica se a
palavra codifica
um literal
CPU-0Micro-Instruções
DCC001 - 2011-2 20
CPU-0: Nosso primeiro processador
DCC001 - 2011-2 21
CPU-0: Nosso primeiro processador
DCC001 - 2011-2 22
Calculadora
Controle
Unidade de Controle da CPU-0Sinais e Literais
DCC001 - 2011-2 23
fornece tempos para atualizações:t0: PCt1: mIRt2: Sinais ou Literal
Micro-instrução corrente
Saída de Sinais
Saída de Literal
Carga de um Programa
São programas chamados “loaders”, que lêm programas de discos ou de outra mídia, e os carregam na memória
Sim, mas quem carrega o loader? Em computadores atuais, um loader primitivo fica
gravado em uma memória ROM Este loader carrega outro loader mais sofisticado,
que carrega outro mais sofisticado ainda, que carrega o sistema operacional
Em computadores antigos, loaders eram carregados palavra por palavra, através do painel do computador
DCC001 - 2011-2 24
Painel de um PDP11/70, de 1975
DCC001 - 2011-2 25
Logisim e Memórias
No Logisim você pode: Escrever diretamente valores para
posições de memória Ler de um arquivo um mapa da
memória. Os valores de cada palavra da memória ficam escritos em hexadecimal no arquivo
Nós vamos fazer uso destas possibilidades para carregar programas e para colocar valores em memórias
DCC001 - 2011-2 26
Arquivo e Memória Logisim
DCC001 - 2011-2 27
Passos para a Programação da CPU-0
Em uma tabela com 24 posições, se bit 23 = 0, cada um dos outros bits deve ser igual a
1 se desejarmos ligar o sinal de controle correspondente
bit 23 = 1, os 16 bits menos significativos codificam um operando
Depois, cada micro-instrução (cada linha da tabela) é codificada em hexadecimal
O código em hexadecimal é transferido para um arquivo
No site vocês encontrarão uma planilha muito útil para isso
DCC001 - 2011-2 28
Mais um Programa
Queremos agora somar os conteúdos das posições 1, 2, 3, 4 e 5 da memória, colocando o resultado na posição 6
Basta acrescentar ao programa mais passos de somas ao acumulador
DCC001 - 2011-2 29
Dois “programas”
DCC001 - 2011-2 30
Op
er->
Bu
s
In->
Db
us
In_C
lk
MA
R_C
lk
RA
M_B
us
RA
M_C
lk
DR
->B
us
DR
_Clk
Sub
trac
t
Ou
t_C
lk
Co
mp
are_
Clk
AC
C->
Bu
s
AC
C_C
lk
AC
C_C
lear
11 1
11 1
11 1
1 111 1
11 1
1 1 111 1
11 1
1 111 1
11 1
1 1 111 1
11 1
1 1 111 1
11 1
Sinais
Operando?
Op
er->
Bu
s
In->
Db
us
In_C
lk
MA
R_C
lk
RA
M_B
us
RA
M_C
lk
DR
->B
us
DR
_Clk
Sub
trac
t
Ou
t_C
lk
Co
mp
are_
Clk
AC
C->
Bu
s
AC
C_C
lk
AC
C_C
lear
11 1
11 1
11 1
1 111 1
11 1
1 1 111 1
11 1
Sinais
Operando?
Soma de 2 parcelas Soma de 5 parcelas
Problema: o programa cresce quando o número
de operações cresce!
Balanço – CPU-0
Sabíamos que podíamos realizar computações com a calculadora, aplicando manualmente os sinais de controle, e entrando também manualmente com operandos
Mostramos que é possível automatizar essas operações, com o uso de uma unidade de controle impulsionada por um clock
Problema: O programa cresce de tamanho com o número de
operações que realiza Qual seria o tamanho de um programa que some um
milhão de parcelas?DCC001 - 2011-2 31
CPU-1Micro-Instruções de Desvio
DCC001 - 2011-2 32
CPU-1: Loops
Para conseguir escrever programas cujo tamanho não cresça com o número de operações que realiza, precisamos alterar o nosso modelo de execução seqüencial de micro-instruções
Vamos introduzir uma micro-instrução especial que desvia o fluxo de execução para um endereço designado na memória de programa
Usando essa instrução de desvio, vamos construir um programa que repetidamente soma 1 ao acumulador
DCC001 - 2011-2 33
Formato de Micro-instruções contemplando Desvios
DCC001 - 2011-2 34
Micro-instrução de desvio para a posição
4 na memória de programa
Bit 23: Desvio?Bit 22: Literal?
Unidade de Controle com micro-instrução de Desvio
DCC001 - 2011-2 35
O Contador de Programa
DCC001 - 2011-2 36
Decisão sobre o próximo
valor do PC
Endereço de
Desvio
CPU-1: Balanço
Conseguimos construir programas que prescrevem a repetição de ações pela (ex-) calculadora
Mas como fazer para interromper as repetições? Afinal, um loop precisa parar
DCC001 - 2011-2 37
CPU-2Micro-instruções de Desvio Condicional
DCC001 - 2011-2 38
CPU-2: Desvios Condicionais
Precisamos de micro-instruções de desvio condicional
O resultado de comparações é usado para decidir se um desvio é realizado ou não
Vamos desenvolver um programa que, como antes, adiciona 1 ao acumulador repetidamente, mas somente enquanto o valor do acumulador não supera um valor colocado pelo usuário na entrada InDCC001 - 2011-2 39
Codificação de Desvios Condicionais
DCC001 - 2011-2 40
Desviar para o endereço 10 se Bus > ACC
CPU-2: Desvios Condicionais
DCC001 - 2011-2 41
Unidade de
Controle
Registrador Compare
CPU-2: Unidade de Controlecom Desvio Condicional
DCC001 - 2011-2 42
Lógica de Decisão:Condições na micro-instrução coincidem com o status do registrador de comparação?
CPU-2: Balanço
Conseguimos implantar desvios condicionais, que nos permitem prescrever loops
A forma de se programar, lidando diretamente com sinais, torna difícil a descrição de algoritmos mais ambiciosos
Precisamos melhorar a vida do programador
DCC001 - 2011-2 43
A CPU PipocaInstruções e Assembler
DCC001 - 2011-2 44
A CPU PipocaCaracterísticas - 1
Programas são formados por instruções
A execução de cada instrução é feita pela execução de várias micro-instruções
Operandos ficam codificados nas instruções
Uma única memória RAM abriga dados e programa
DCC001 - 2011-2 45
A CPU PipocaCaracterísticas - 2
O conjunto de micro-instruções é fixo, e fica gravado em uma memória ROM
O processador executa um ciclo de leitura e execução de instruções
A programação pode ser feita em linguagem de montagem (assembler), o que, relativamente à programação por sinais de controle, é um grande avanço
DCC001 - 2011-2 46
Novos Registradores
O ciclo de instrução exige: PC – Program Counter
contém o endereço da instrução a ser executada
IR – Instruction Register contém a instrução em execução
Sinc Entrada e Sinc Saída para sincronização de entrada e
saídaDCC001 - 2011-2 47
Pipoca – Formato de Instrução
Cada instrução ocupa 16 bits, sendo 4 bits para o código da instrução 2 bits para o modo de endereçamento, que
indica se o operando é o que está codificado na instrução, ou se é o conteúdo da posição de memória cujo endereço está na instrução, ou outras alternativas de indireção
10 bits para o operando, cuja interpretação depende do modo de endereçamento
DCC001 - 2011-2 48
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0OpCode Mode Operand
Instrução ADD
DCC001 - 2011-2 49
Descrição
Mn
emo
nic
Op
Co
de1
0
Op
Co
de2
Adiciona o operando a ACC, deixando o resultado em ACC
ADD 0 0000
Pipoca – Conjunto de Instruções
ADDSUBLOADSTORE INPUTOUTPUT
COMPARE JMP JMPEQ JMPGT JMPLTHALT
DCC001 - 2011-2 50
Programação em Assembler
Nenhum ser humano com saúde mental consegue fazer um programa diretamente em binário
O processo de programação consiste em preencher uma tabela usando mnemônicos
das instruções, dando nomes a posições de memória, sendo assim mais compreensível para humanos, e
depois, cuidadosamente, substituir estes mnemônicos e nomes de posições de memória pelos códigos binários correspondentes – processo que chamamos de montagem do programa
DCC001 - 2011-2 51
Programa SumX: Código Fonte
DCC001 - 2011-2 52
Lab
el
Size
Ad
dre
ss1
0
Ad
dre
ss1
6
Inst
ructi
on
Mo
de
Op
eran
d
Comentários
1 0 00 LOAD 0 0 Zera o acumulador1 1 01 STORE 0 SUM Coloca 0 em SUM1 2 02 LOAD 0 X Carrega o endereço X no acumulador1 3 03 STORE 0 P Coloca o endereço X em P
LOOP 1 4 04 LOAD 1 SUM Carrega o conteúdo de SUM no acumulador
1 5 05 ADD 2 PSoma o conteúdo da posição de memória cujo endereço é P ao acumulador
1 6 06 STORE 0 SUM Coloca o resultado na posição SUM1 7 07 LOAD 1 P Carrega o conteúdo de P 1 8 08 ADD 0 1 Soma 11 9 09 STORE 0 P Coloca o resultado em P1 10 0A COMPARE 0 XEND Compara XEND com o acumulador1 11 0B JMPLT 0 FINISH Se for menor, desvia para FINISH1 12 0C JMP 0 LOOP Senão, volta para LOOP
FINISH 1 13 0D OUTPUT 1 SUM Coloca o resultado na saída1 14 0E HALT Para.
X 1 15 0F 31421 16 10 45421 17 11 33251 18 12 1234
XEND 1 19 13 8786SUM 1 20 14 0
P 1 21 15 0
Números a serem somados
Programa SumXInstruções e Dados
DCC001 - 2011-2 53
Lab
el
Size
Ad
dre
ss1
0
Inst
ructi
on
Mo
de
Op
eran
d
Comentários
1 0 LOAD 0 0 Zera o acumulador1 1 STORE 0 SUM Coloca 0 em SUM1 2 LOAD 0 X Carrega o endereço X no acumulador1 3 STORE 0 P Coloca o endereço X em P
LOOP 1 4 LOAD 1 SUM Carrega o conteúdo de SUM no acumulador
1 5 ADD 2 PSoma o conteúdo da posição de memória cujo endereço é P ao acumulador
1 6 STORE 0 SUM Coloca o resultado na posição SUM1 7 LOAD 1 P Carrega o conteúdo de P 1 8 ADD 0 1 Soma 11 9 STORE 0 P Coloca o resultado em P1 10 COMPARE 0 XEND Compara XEND com o acumulador1 11 JMPLT 0 FINISH Se for menor, desvia para FINISH1 12 JMP 0 LOOP Senão, volta para LOOP
FINISH 1 13 OUTPUT 1 SUM Coloca o resultado na saída1 14 HALT Para.
X 1 15 31421 16 45421 17 33251 18 1234
XEND 1 19 8786SUM 1 20 0
P 1 21 0
Números a serem somados
Instruções
Dados
Programa SumX: Código FonteUso de Mnemônicos
DCC001 - 2011-2 54
Lab
el
Size
Ad
dre
ss1
0
Ad
dre
ss1
6
Inst
ructi
on
Mo
de
Op
eran
d
Comentários
1 0 00 LOAD 0 0 Zera o acumulador1 1 01 STORE 0 SUM Coloca 0 em SUM1 2 02 LOAD 0 X Carrega o endereço X no acumulador1 3 03 STORE 0 P Coloca o endereço X em P
1 5 05 ADD 2 P
Lab
el
Size
Ad
dre
ss10
Ad
dre
ss16
Inst
ructi
on
Mo
de
Op
eran
d
Comentários
1 5 05 ADD 2 P
1 14 0E HALT Para.X 1 15 0F 3142
1 16 10 45421 17 11 33251 18 12 1234
XEND 1 19 13 8786SUM 1 20 14 0
P 1 21 15 0
Números a serem somados
Programa SumXLoop e Finalização
DCC001 - 2011-2 55
LOOP 1 4 04 LOAD 1 SUM Carrega o conteúdo de SUM no acumulador
1 5 05 ADD 2 PSoma o conteúdo da posição de memória cujo endereço é P ao acumulador
1 6 06 STORE 0 SUM Coloca o resultado na posição SUM1 7 07 LOAD 1 P Carrega o conteúdo de P 1 8 08 ADD 0 1 Soma 11 9 09 STORE 0 P Coloca o resultado em P1 10 0A COMPARE 0 XEND Compara XEND com o acumulador1 11 0B JMPLT 0 FINISH Se for menor, desvia para FINISH1 12 0C JMP 0 LOOP Senão, volta para LOOP
FINISH 1 13 0D OUTPUT 1 SUM Coloca o resultado na saída
Lab
el
Size
Ad
dre
ss1
0
Ad
dre
ss1
6
Inst
ructi
on
Mo
de
Op
eran
d
Comentários
Montagem de uma Instrução
DCC001 - 2011-2 56
SUM é o nome dado à posição x14 da memória
Vem da tabela de códigos de instrução
OpCode Mode OperandInstrução LOAD 1 SUMCódigos 1000 01 0000010100BinárioHexa
1000 0100 0001 01008414
Programas Montadores - 1
A tradução da tabela-programa para binário é uma tarefa insana, com fortes exigências de verificação
Mas essa tarefa só foi feita manualmente pelos pioneiros da computação
Cedo se percebeu que computadores são uma excelente ferramenta para ... programar computadores!
DCC001 - 2011-2 57
Programas Montadores
Montadores ou assemblers são programas que lêm tabelas-programas, e geram arquivos com imagens binárias a serem carregadas na memória, substituindo os mnemônicos pelos bits adequados.
A planilha Pipoca.xls foi utilizada como montador para os programas exemplo
DCC001 - 2011-2 58
Resumo – 1
Um processador básico possui memória, registradores, unidade lógico-aritmética, e uma unidade de controle
O processamento é feito por deslocamentos de dados entre memória e registradores, e transformações de dados realizadas pela ULA
DCC001 - 2011-2 59
Resumo – 2
A unidade de controle segue um programa armazenado em uma memória, emitindo sinais de controle (posse de
barramentos, cópias de entradas de registradores) que comandam os deslocamentos de informação no processador, e
fornecendo operandos como endereços ou valores numéricos.
DCC001 - 2011-2 60
Resumo – 3
Um programa é escrito – e lido – por humanos executado por um processador
Um programa tem formatos apropriados para a escrita por um programador a execução por um processador
A transformação de um formato em outro é normalmente feita por … um programa
DCC001 - 2011-2 61