ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I
prof. Dr. César Augusto M. Marcon
prof. Dr. Edson Ifarraguirre Moreno
Arquitetura Cleópatra
Bloco de Controle(Instruções e Microinstruções)
2 / 19
Comunicações entre Bloco de Dados e Bloco de Controle
BLOCODE
CONTROLE
BLOCODE
DADOS
µinst IR
IRµinst
ck
ck
reset
ce
rw
dados
endereços MEMÓRIAdados e programa
CPU
ck
Sinais enviados do BD para o BC:- instrução lida da memória- flags de estado
reset
n z c
n z c
v
v
Sinais de controle geradosconforme a instrução e ciclo de máquina
3 / 19
Interface de Entrada e Saída do Bloco de Controle
4 / 19
Máquina de Estados Finita do Bloco de Controle
5 / 19
Estados versus Microinstruções (FETCH 1/3)
MAR (0)
MDR (1)
IR (2)
RS (5)
PC(3)
AC (4)
ULA
0 mux1 sel
escreve na memória
lê da memória
DATAMEM
Codificação de escrita
Codificação de leitura
w
r
ulnz
lcv
CERW
CE RW
NZCV
MAR PC
6 / 19
Estados versus Microinstruções (FETCH 2/3)
MAR (0)
MDR (1)
IR (2)
RS (5)
PC(3)
AC (4)
ULA
0 mux1 sel
escreve na memória
lê da memória
DATAMEM
Codificação de escrita
Codificação de leitura
w
r
ulnz
lcv
CERW
CE RW
MDR M[MAR];PC++
NZCV
7 / 19
Estados versus Microinstruções (FETCH 3/3)
MAR (0)
MDR (1)
IR (2)
RS (5)
PC(3)
AC (4)
ULA
0 mux1 sel
escreve na memória
lê da memória
DATAMEM
Codificação de escrita
Codificação de leitura
w
r
ulnz
lcv
CERW
CE RW
IR MDR
NZCV
8 / 19
Exercícios
Microinstruções Instruções
LDA #3CH
ADD VAR
1. Complete a tabela com as microinstruções correspondentes a cada instrução, sendo 3Ch uma constante em hexadecimal e VAR uma variável de memória
9 / 19
Resposta de Exercícios
Microinstruções Instruções
MAR PC
LDA #3CH
MDR M[MAR], PC++IR MDRMAR PCMDR M[MAR], PC++AC MDR, LNZMAR PC
ADD VAR
MDR M[MAR], PC++IR MDRMAR PCMDR M[MAR], PC++MAR MDRMDR M[MAR]AC AC + MDR, LNZ, LCV
1. Complete a tabela com as microinstruções correspondentes a cada instrução, sendo 3Ch uma constante em hexadecimal e VAR uma variável de memória
10 / 19
Exercícios
Microinstruções Instruções
MAR PCMDR M[MAR], PC++IR MDRAC <- NOT AC, LNZMAR PCMDR M[MAR], PC++IR MDRMAR PCMDR M[MAR], PC++MAR MDRMDR M[MAR]MAR MDRMDR M[MAR]AC AC OR MDR, LNZ, LCV
2. Dado o conjunto de microinstruções abaixo, associe a instrução correspondente à direita. Caso a instrução tenha operando e este seja uma constante, coloque o valor 33h, caso o operando seja uma variável coloque o label vv
11 / 19
Resposta de Exercícios
Microinstruções Instruções
MAR PC
NOTMDR M[MAR], PC++IR MDRAC <- NOT AC, LNZMAR PC
OR VV,I
MDR M[MAR], PC++IR MDRMAR PCMDR M[MAR], PC++MAR MDRMDR M[MAR]MAR MDRMDR M[MAR]AC AC OR MDR, LNZ, LCV
2. Dado o conjunto de microinstruções abaixo, associe a instrução correspondente à direita. Caso a instrução tenha operando e este seja uma constante, coloque o valor 33h, caso o operando seja uma variável coloque o label vv
12 / 19
Exercícios
3. Dado o programa ao lado (já com o código objeto) e a tabela de instruções/microinstruções, preencha os registradores e flags e a área de dados da Cleópatra
CK MAR MDR IR PC AC RS N Z C V Microinstruções Instruções1 MAR PC
LDA #5BH
2 MDR M[MAR], PC PC+13 IR MDR4 MAR PC5 MDR M[MAR], PC PC+16 AC MDR, LNZ7 MAR PC
ADD 75H,I
8 MDR M[MAR], PC PC+19 IR MDR10 MAR PC11 MDR M[MAR], PC PC+112 MAR MDR13 MDR M[MAR]14 MAR MDR15 MDR M[MAR]16 AC AC + MDR, LNZ, LCV17 MAR PC
JV 1,R
18 MDR M[MAR], PC PC+119 IR MDR20 MAR PC21 MDR M[MAR], PC PC+122 PC PC + MDR 23 MAR PC
HLT24 MDR M[MAR], PC PC+125 IR MDR
Área de programa Área de dados00: 40 5B LDA #5BH02: 58 75 ADD A,I04: EC 01 JV 1,R06: 00 NOT07: F0 HLT
.org #75HA: DB #BB: DB 78H
75:76:
13 / 19
Resposta de Exercícios
CK MAR MDR IR PC AC RS N Z C V Microinstruções Instruções1 00 00 00 00 00 00 0 0 0 0 MAR PC
LDA #5BH
2 40 01 MDR M[MAR], PC PC+13 40 IR MDR4 01 MAR PC5 5B 02 MDR M[MAR], PC PC+16 5B AC MDR, LNZ7 02 MAR PC
ADD 75H,I
8 58 03 MDR M[MAR], PC PC+19 58 IR MDR10 03 MAR PC11 75 04 MDR M[MAR], PC PC+112 75 MAR MDR13 76 MDR M[MAR]14 76 MAR MDR15 78 MDR M[MAR]16 D3 1 1 AC AC + MDR, LNZ, LCV17 04 MAR PC
JV 1,R
18 EC 05 MDR M[MAR], PC PC+119 EC IR MDR20 05 MAR PC21 01 06 MDR M[MAR], PC PC+122 07 PC PC + MDR 23 07 MAR PC
HLT24 F0 08 MDR M[MAR], PC PC+125 F0 IR MDR
Área de programa Área de dados00: 40 5B LDA #5BH02: 58 75 ADD A,I04: EC 01 JV 1,R06: 00 NOT07: F0 HLT
.org #75HA: DB #BB: DB 78H
75: 7676: 78
3. Dado o programa ao lado (já com o código objeto) e a tabela de instruções/microinstruções, preencha os registradores e flags e a área de dados da Cleópatra
14 / 19
Exercícios
4. Qual seria o tempo de execução do programa apresentado no exercício anterior (em segundo), se a Cleópatra tivesse uma freqüência de operação de 10MHz?
15 / 19
Resposta de Exercícios
4. Qual seria o tempo de execução do programa apresentado no exercício anterior (em segundo), se a Cleópatra tivesse uma freqüência de operação de 10MHz?
f = 10 MHz --> T = 0,1us --> tempo de execução = 25 * 0,1us = 2,5us
16 / 19
Exercícios
5. Faça uma função que descreve o tempo de operação do programa em função da variável n: f(n) = k1 n + k2
.codelda n
Enquanto:add #-4jz Fimlda nadd #3sta p,Ilda padd #1sta plda nadd #1sta njmp Enquanto
Fim:hlt
.endcode
.datan: db #0p: db #vetvet: db #0, #0, #0, #0
.enddata
#define TAM_VET 4int n = 0;int vet[TAM_VET] = {0, 0, 0, 0};
main(){
while(n < TAM_VET){
vet[n] = n + 3;n++;
}}
17 / 19
Exercícios
5. Dado o programa em linguagem C apresentado abaixo, faça:
a. A compilação deste para o assembly da arquitetura Cleópatra
b. A codificação do assembly para a linguagem de máquina em hexadecimal, tanto para a área de dados, quanto para a área de código
c. Uma fórmula que caracterize o tempo de execução do programa em função das variáveis de controle de laços
d. A estimativa de qual deve ser a freqüência de operação do relógio para que este programa consiga ser executado em um tempo praticamente igual a 1us
e. A tradução das cinco primeiras instruções assembly para o microprograma (conjunto de microinstruções) correspondente
f. A associação das cinco microinstruções com suas respectivas microoperações
g. O preenchimento de todos os registradores e flip-flops devido a primeira passagem de cada uma das cinco microinstruções
#define TAM 10int vetA[TAM];
void main(){
for(int i=0; i < TAM - 1; i++)
{for(int k=i; k <
TAM-1; k++){
if(vetA[i] > vetA[k]){
int aux = vetA[i];
vetA[i] = vetA[k];
vetA[k] = aux;}
}}
}
18 / 19
EXTRAS
19 / 19
Máquina de Estados Finita (parcial e em blocos)
20 / 19