Operando?

Propaganda
Aula Expositiva 4
2.4 Processadores
2.4.1 Micro-instruções
2.4.2 Desvios
2.4.3 Desvios Condicionais
2.4.4 Instruções e Programação em Assembler
DCC001 - 2011-2
DCC 001
Programação de Computadores
2o Semestre de 2011
Prof. Osvaldo Carvalho
1
Uma Calculadora
DCC001 - 2011-2
2
Uma Calculadora
DCC001 - 2011-2
3
Calculadora
Fluxos 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 de operandos (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.
2.
3.
DCC001 - 2011-2
Carregar no acumulador o conteúdo da posição
1 da RAM
Somar ao acumulador o conteúdo da posição 2
da RAM
Armazenar o conteúdo do acumulador na
posição 3 da RAM
5
Etapa 1: Carregar
Sinal
ACC_Clear = 1
ACC_Clear = 0
Input = 1
In_Clk = 1
In_Clk = 0
In_Bus = 1
MAR_Clk = 1
MAR_Clk = 0
In_Bus = 0
RAM_Bus = 1
ACC_Clk = 1
ACC_Clk = 0
RAM_Bus = 0
DCC001 - 2011-2
Comentários
Entrada de
operando
Carrega no acumulador o
conteúdo da posição 1 da RAM
6
Etapa 2: Somar
Input = 2
In_Clk = 1
In Clk = 0
In_Bus = 1
MAR_Clk = 1
MAR_Clk = 0
In_Bus = 0
RAM_Bus = 1
ACC_Clk = 1
ACC_Clk = 0
RAM_Bus = 0
DCC001 - 2011-2
Entrada de
operando
Soma ao acumulador o
conteúdo da posição 2 da RAM
7
Etapa 3: Armazenar
Input = 3
In_Clk = 1
In_Clk = 0
In_Bus = 1
MAR_Clk = 1
MAR_Clk = 0
In_Bus = 0
ACC_Bus = 1
RAM_Clk = 1
RAM_Clk = 0
ACC_Bus = 0
DCC001 - 2011-2
Armazena o conteúdo do
acumulador na posição 3 da
RAM
8
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
 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
DCC001 - 2011-2
12
Programa como Codificação dos Sinais de
Controle - 2
 A unidade de controle implementa um
ciclo de leitura em seqüência de microinstruçõ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
Codificação dos Sinais de Controle em Microinstruções
In->Dbus
In_Clk
MAR_Clk
RAM_Bus
RAM_Clk
DR->Bus
DR_Clk
Subtract
Out_Clk
Compare_Clk
ACC->Bus
ACC_Clk
ACC_Clear
Sinais
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
1
0
0
0
0
0
0
0
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
1
0
0
0
Clicks
Equivalentes
Efeito
ACC_Clear = 1
ACC_Clear = 0; MAR_Clk=1;
MAR_Clk = 0; RAM_Bus = 1;
ACC_Clk = 1;
ACC = 0
MAR = Bus
Bus = RAM
ACC = ACC + Bus
Microinstruções
DCC001 - 2011-2
14
Contador de Programa
Soma 1
Registrador
DCC001 - 2011-2
15
Unidade de Controle
Somente Sinais
Contador de Programa
armazena o endereço da
próxima micro-instrução a
ser executada
DCC001 - 2011-2
Memória de
Programa
16
Caixa de Música
DCC001 - 2011-2
17
Operandos
 No uso da calculadora a intervenção do operador se
dá também na entrada de operandos (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 operandos já possam ser especificados no
programa
 Os operandos devem ser fornecidos pela unidade de
controle à (ex-) calculadora nos momentos
adequados
DCC001 - 2011-2
18
Codificação de Operandos em Micro-Instruções
Sinal Adicional
coloca Operando
no Barramento
Bit 23 indica
se a palavra
codifica um
operando
DCC001 - 2011-2
Operando nos 16
bits menos
significativos = 2
19
CPU-0
Micro-Instruções
DCC001 - 2011-2
20
CPU-0: Nosso primeiro processador
DCC001 - 2011-2
21
CPU-0: Nosso primeiro processador
Calculadora
Controle
DCC001 - 2011-2
22
Unidade de Controle da CPU-0
Sinais e Operando
fornece tempos para
atualizações:
t0: PC
t1: mIR
t2: Sinais ou Oper
Micro-instrução
corrente
DCC001 - 2011-2
Sinais
Operando
23
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?



DCC001 - 2011-2
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
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
DCC001 - 2011-2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Problema: o programa
cresce quando o número
de operações cresce!
1
1
1
Soma de 2 parcelas
1
1
1
Oper->Bus
In->Dbus
In_Clk
MAR_Clk
RAM_Bus
RAM_Clk
DR->Bus
DR_Clk
Subtract
Out_Clk
Compare_Clk
ACC->Bus
ACC_Clk
ACC_Clear
Operando?
Oper->Bus
In->Dbus
In_Clk
MAR_Clk
RAM_Bus
RAM_Clk
DR->Bus
DR_Clk
Subtract
Out_Clk
Compare_Clk
ACC->Bus
ACC_Clk
ACC_Clear
Operando?
Dois “programas”
Soma de 5 parcelas
Sinais
Sinais
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
30
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:


DCC001 - 2011-2
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?
31
CPU-1
Micro-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
Bit 23: Desvio?
Bit 22: Operando?
22
21
Micro-instrução
48 37 26 15de
04 3
Sinais para a posição 1
desvio
na memória de programa
2023 19 2218 21
17 16
20 15
19 14
18 13
17 12
16 11
15 10
14 913 812 711 610 59
1
Oper->Dbus
In->Dbus
In_Clk
MAR_Clk
RAM_Dbus
Oper->Dbus
RAM_Clk
In->Dbus
DR->Dbus
In_Clk
DR_Clk
MAR_Clk
Subtract
RAM_Dbus
Out_Clk
RAM_Clk
Compare_Clk
DR->Dbus
ACC->Dbus
DR_Clk
ACC_Clk
Subtract
ACC_Clear
Out_Clk
Operando?
Desvio?
Operando?
Desvio?
Sinais
1
1
1
1
1
1
DCC001 - 2011-2
1
2
Compare_Clk
ACC->Dbus
23
1
1
1
1
34
Unidade de Controle com micro-instrução de
Desvio
DCC001 - 2011-2
35
O Contador de Programa
Endereço
de Desvio
DCC001 - 2011-2
Decisão sobre
o próximo
valor do PC
36
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-2
Micro-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 In
DCC001 - 2011-2
39
Codificação de Desvios Condicionais
23
22
21
20
19 18 17 16 15 14 13 12 11 10
9
8
7
6
5
4
3
2
1
0
Oper->Dbus
In->Dbus
In_Clk
MAR_Clk
RAM_Dbus
RAM_Clk
DR->Dbus
DR_Clk
Subtract
Out_Clk
Compare_Clk
ACC->Dbus
ACC_Clk
ACC_Clear
Igual
Maior
Operando?
Menor
Desvio?
Sinais
Desviar para o
1
1
endereço 4 se
1
1
Bus > ACC
1
1
1
1
1
1
1
1
1
DCC001 - 2011-2
1
1
1
40
CPU-2: Desvios Condicionais
Unidade
de
Controle
DCC001 - 2011-2
Registrador
Compare
41
CPU-2: Unidade de Controle
com Desvio Condicional
DCC001 - 2011-2
Lógica de Decisão:
Condições na micro-instrução
coincidem com o status do
registrador de comparação?
42
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 Pipoca
Instruções e Assembler
DCC001 - 2011-2
44
A CPU Pipoca
Caracterí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 Pipoca
Caracterí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ída

DCC001 - 2011-2
47
Pipoca – Formato de Instrução
15
14 13 12
OpCode
11 10
Mode
9
8
7
6
5
4
3
Operand
2
1
0
 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
DCC001 - 2011-2
OpCode2
Adiciona o
operando a
ACC, deixando
o resultado em
ACC
OpCode10
Descrição
Mnemonic
Instrução ADD
ADD
0
0000
49
Pipoca – Conjunto de Instruções
 ADD
 COMPARE
 SUB
 JMP
 LOAD
 JMPEQ
 STORE
 JMPGT
 INPUT
 JMPLT
 OUTPUT
 HALT
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


DCC001 - 2011-2
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
51
FINISH
X
XEND
SUM
P
DCC001 - 2011-2
0
1
2
3
4
00
01
02
03
04
1
5
05 ADD
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
LOAD
STORE
LOAD
STORE
LOAD
6 06 STORE
7 07 LOAD
8 08 ADD
9 09 STORE
10 0A COMPARE
11 0B JMPLT
12 0C JMP
13 0D OUTPUT
14 0E HALT
15 0F
16 10
17 11
18 12
19 13
20 14
21 15
0
0
0
0
1
Operand
1
1
1
1
1
Mode
Address16
Instruction
Address10
LOOP
Size
Label
Programa SumX: Código Fonte
Comentários
0
SUM
X
P
SUM
Zera o acumulador
Coloca 0 em SUM
Carrega o endereço X no acumulador
Coloca o endereço X em P
Carrega o conteúdo de SUM no acumulador
Soma o conteúdo da posição de memória cujo
2 P
endereço é P ao acumulador
0 SUM
Coloca o resultado na posição SUM
1 P
Carrega o conteúdo de P
0 1
Soma 1
0 P
Coloca o resultado em P
0 XEND Compara XEND com o acumulador
0 FINISH Se for menor, desvia para FINISH
0 LOOP Senão, volta para LOOP
1 SUM
Coloca o resultado na saída
Para.
3142
4542
Números a serem somados
3325
1234
8786
0
0
52
FINISH
X
XEND
SUM
P
DCC001 - 2011-2
0
1
2
3
4
1
5 ADD
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
LOAD
STORE
LOAD
STORE
LOAD
0
0
0
0
1
Operand
1
1
1
1
1
Mode
Instruction
Address10
LOOP
Size
Label
Programa SumX
Instruções e Dados
Comentários
0
SUM
X
P
SUM
Zera o acumulador
Coloca 0 em SUM
Carrega o endereço X no acumulador
Coloca o endereço X em P
Carrega o conteúdo de SUM no acumulador
Soma o conteúdo da posição de memória cujo
2 P
endereço é P ao acumulador
0 SUM
Coloca o resultado na posição SUM
1 P
Carrega o conteúdo de P
0 1
Soma 1
0 P
Coloca o resultado em P
0 XEND Compara XEND com o acumulador
0 FINISH Se for menor, desvia para FINISH
0 LOOP Senão, volta para LOOP
1 SUM
Coloca o resultado na saída
Para.
3142
4542
Números a serem somados
3325
1234
8786
0
0
Instruções
STORE
LOAD
ADD
STORE
COMPARE
JMPLT
JMP
OUTPUT
HALT
Dados
53
FINISH
LOOP
X
XEND
SUM
P
FINISH
DCC001 - 2011-2
2
3
4
02 LOAD
03 STORE
04 LOAD
1
5
05 ADD
0 X
0 P
1 SUM
Carrega o endereço X no acumulador
Coloca o endereço X em P
Carrega o conteúdo de SUM no acumulador
Soma o conteúdo da posição de memória cujo
2 P
endereço é P ao acumulador
0 SUM
Coloca o resultado na posição SUM
1 P
Carrega o conteúdo de P
Comentários
0 1
Soma 1
0 P
Coloca o resultado em P
0 0
XEND Zera
Compara
XEND com o acumulador
o acumulador
FINISH Coloca
Se for menor,
desvia para FINISH
0 SUM
0 em SUM
0 X
LOOP Carrega
Senão, volta
para LOOP
o endereço
X no acumulador
1 P
SUM
Coloca o endereço
resultado X
naem
saída
0
P
Para.
1 SUM
Carrega
o conteúdo de SUM no acumulador
3142
Soma o conteúdo da posição de memória cujo
2 P
4542
endereço é P ao acumulador
Números
serem somados
3325
0 SUM
Coloca o resultado
naa posição
SUM
1234
1 P
Carrega o conteúdo de P
8786
0 1
Soma 1
0
0 P
Coloca o resultado em P
0
0 XEND
Compara XEND com o acumulador
0 FINISH Se for menor, desvia para FINISH
0 LOOP Senão, volta para LOOP
1 SUM
Coloca o resultado na saída
Operand
Instruction
Address16
Mode
Programa SumX: Código Fonte
Uso de Mnemônicos
6 06 STORE
7 07 LOAD
8 08 ADD
9 09 STORE
10
COMPARE
0 0A
00 LOAD
11
0B STORE
JMPLT
1 01
12
0C LOAD
JMP
2 02
13
OUTPUT
3 0D
03 STORE
14
0E LOAD
HALT
4 04
15 0F
5 05 ADD
16 10
17
11 STORE
6 06
18
12 LOAD
7 07
19
13 ADD
8 08
20
14 STORE
9 09
21 0A
15 COMPARE
10
11 0B JMPLT
12 0C JMP
13 0D OUTPUT
Address10
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Size
Label
LOOP
1
1
1
54
1
5
05 ADD
6
7
8
9
10
11
12
13
06
07
08
09
0A
0B
0C
0D
DCC001 - 2011-2
STORE
LOAD
ADD
STORE
COMPARE
JMPLT
JMP
OUTPUT
Operand
04 LOAD
Mode
Address10
Instruction
Size
4
Label
LOOP 1
1
1
1
1
1
1
1
FINISH 1
Address16
Programa SumX
Loop e Finalização
Comentários
1 SUM
Carrega o conteúdo de SUM no acumulador
Soma o conteúdo da posição de memória
2 P
cujo endereço é P ao acumulador
0 SUM
Coloca o resultado na posição SUM
1 P
Carrega o conteúdo de P
0 1
Soma 1
0 P
Coloca o resultado em P
0 XEND Compara XEND com o acumulador
0 FINISH Se for menor, desvia para FINISH
0 LOOP Senão, volta para LOOP
1 SUM
Coloca o resultado na saída
55
Montagem de uma Instrução
Instrução
Códigos
Binário
Hexa
OpCode
Mode
Operand
LOAD
1
SUM
1000
01
0000010100
1000 0100 0001 0100
8414
Vem da tabela de
códigos de instrução
DCC001 - 2011-2
SUM é o nome dado à
posição x14 da memória
56
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,


DCC001 - 2011-2
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.
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
Download