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