Processador MAC-1
Arquitectura
1
Processador MAC-1

Desenvolvido por Andrew Tanenbaum para fins
didácticos


Arquitectura simples, útil para perceber uma série de
conceitos que também são válidos em processadores
mais complexos
Processador virtual

Não existe implementação comercial em hardware

Existem simuladores (máquinas virtuais) que
permitem executar programas para este processador
2
Processador MAC-1

Principais características:


Possui 12 linhas para endereçar a memória

Espaço de endereçamento = 212 = 4K endereços

Palavras de 16 bits
Um datapath de 16 bits

16 registos para uso interno

2 registos para comunicação com o exterior (memória)

Uma ALU e um bloco de deslocamento

Instruções de 16 bits

Unidade de controlo multi-ciclo microprogramada
3
Arquitectura MAC-1
RC
RB RA
4
4
4
LE
PC
AC
LAR
SP
BUS B
MAR
IR
BUS A
MDR
(...)
0
SA
Mux-A
F
H 2
Dados
1
LDR
N
Z
Endereços
WR
RD
ALU
2
Deslocamento
BUS C
4
Arquitectura MAC-1
 Principais
registos
 AC
(Acumulador)
Guarda o resultado das operações
 PC
(Program Counter)
Guarda o endereço da próxima instrução a ser
executada
 IR
(Instruction Register)
Guarda a instrução que vai ser executada
 SP
(Stack Pointer)
Guarda o endereço do topo da pilha
5
Arquitectura MAC-1
 Registos
de comunicação com o exterior
 MDR
(Memory Data Register)
Guarda os dados recebidos / a enviar
LDR – Controlo de carregamento do BUS C
 RD / WR – Carregamento / Output enable para o
exterior (também são ligados à memória)

 MAR
(Memory Adress Register)
Guarda endereços

LAR – Controlo de carregamento do BUS B
6
Unidade funcional MAC-1

ALU



2 variáveis de controlo – F1 e F0
2 flags (ou bits de estado)

F1
F0
A+B
0
0
A&B
0
1

N – indica se o resultado é negativo
A
1
0

Z – indica se o resultado é zero
~A
1
1
Operação
H1
H0
A
0
0
A >> 1
0
1
A << 1
1
0
---
1
1
Deslocamento

Operação
2 variáveis de controlo – H1 e H0
Permite deslocar para esquerda
ou para a direita
7
Organização da memória no MAC-1

bits para endereçamento
ou seja, 4K=4096 endereços
 Dividido
em:
 Programa
Memória
Programa
 12
0
1
2
...
Instruções (código-máquina)
 Variáveis globais, constantes

(ou Stack)
Dados temporários
 Variáveis locais

Pilha
 Pilha
Escrita de caracteres no écran
 Leitura de caracteres do teclado

I/O
 I/O
...
4094
4095
8
Fetch e execução de instruções

O programa encontra-se carregado em memória

O processador acede à memória para ler cada
instrução

O endereço da instrução a aceder encontra-se num
registo especial – o Program Counter (PC)

A leitura da instrução designa-se fetch (busca)

Durante a fase de fetch, enquanto se acede à
memória o PC é incrementado, ou seja, PC←PC+1


Isto para PC ficar “preparado” para a próxima instrução
Depois de realizar o fetch, o processador passa à
execução dessa instrução
9
Fetch e execução de instruções
Processador MAC-1
EXECUÇÃO
Palavra de
Unidade
controlo
de Controlo
Datapath
Estado
Endereço de
instrução (PC)
FETCH
End. Din
R/W
Instrução
Dout
Memória
10
Palavras de controlo no MAC-1
31
S
A
0
C
N
D
F
L L
R W L
D A
D R E
R R
H
RC
RC
RB
RA
MADDR
RB RA
4
4
4
LE
PC
AC
LAR
SP
BUS B
MAR
IR
BUS A
MDR
(...)
0
SA
Mux-A
F
H 2
Dados
1
LDR
N
Z
Endereços
WR
RD
ALU
2
Deslocamento
BUS C
11
Processador MAC-1
Linguagem assembly
12
Assembly MAC-1

Endereçamento imediato

Carregamento de constantes que são dadas pela
própria instrução
Mnemónica
Descrição
Significado
loco c
AC ← c
Load constant
c é um valor inteiro entre 0 e 4095 (12 bits)
Formato da instrução
0
1
1
Opcode
(4 bits)
1
c
c
c
c
c
c
c
c
c
c
c
c
Constante a carregar
(12 bits)
13
Assembly MAC-1

Endereçamento directo

Usado para aceder a variáveis globais ou a valores
constantes guardados na memória

Operações I/O (leitura e escrita de caracteres)
Mnemónica
Descrição
Significado
lodd p
AC ← M[p]
Load direct
stod p
M[p] ← AC
Store direct
addd p
AC ← AC + M[p]
Add direct
subd p
AC ← AC – M[p]
Subtract direct
p é a posição de memória que se pretende aceder.
Pode ser um valor inteiro entre 0 e 4095 (12 bits).
14
Assembly MAC-1
Exemplo – endereçamento directo
// Código em java
public class exemplo
{
// Má programação, serve apenas para explicar o
// endereçamento directo...
public static int x = 10;
public static int y = 15;
public static void main(String[] args)
{
x = x + y;
}
}
15
Assembly MAC-1
Exemplo – endereçamento directo
Registos
# Código MAC-1
jump main
x: 10
y: 15
main:
lodd x
addd y
stod x
halt
Memória
PC
3
7
6
5
4
0
1
0
AC
10
25
0
x: 1
10
25
y: 2
15
jump 3
main: 3
lodd 1
4
addd 2
5
stod 1
6
halt
7
...
16
Assembly MAC-1

Instruções de salto

Diz-se que ocorre um salto quando a próxima
instrução a executar não é a que se encontra na
posição de memória seguinte


Ou seja, não é a instrução que se encontra na posição PC+1
Fazendo uma analogia com a programação:
...
if (x >= 0)
Se x for menor que 0,
“salta” para aqui
x = 1;
Se x for maior ou
igual a 0, não “salta”
y = x
...
17
Assembly MAC-1

Instruções de salto

Implementação de condições if…else

Envolvidas em ciclos (for, while)
Mnemónica
Descrição
Significado
jump p
PC ← p
Unconditional jump
jpos p
if (AC ≥ 0) PC ← p
Jump if positive or zero
jneg p
if (AC < 0) PC ← p
Jump if negative
jzer p
if (AC == 0) PC ← p
Jump if zero
jnze p
if (AC != 0) PC ← p
Jump if nonzero
p é o endereço para o qual o programa salta em caso de salto
Pode ser qualquer valor inteiro entre 0 e 4095 (12 bits)
18
Assembly MAC-1
 Implementação
// Em Java:
de condições if…else
# Em MAC-1:
...
...
if (x >= 0)
y = x;
else
lodd x
if:
jneg else
stod y
y = 0;
jump cont
...
else:
loco 0
stod y
cont:
...
19
Assembly MAC-1
 Implementação
 Ciclo
while
de ciclos
# Em MAC-1:
...
// Em Java:
ciclo: lodd i
...
while (i < c)
subd c
{
jpos sai
... // xpto
...
}
...
# xpto
jump ciclo
sai:
...
20
Assembly MAC-1
 Ciclo
for
# Em MAC-1:
...
// Em Java:
...
for (i=0; i!=c; i++)
{
loco 0
#
stod i
# i = 0
ciclo: lodd i
subd c
... // xpto
jzer sai
}
...
...
# xpto
loco 1
#
addd i
#
stod i
# i=1+i
jump ciclo
sai:
...
21
Download

em formato ppt