Processador MAC-1
Arquitectura
1
Processador MAC-1
Desenvolvido por Andrew Tanenbaum para fins
didácticos
Arquitectura muito 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
Endereços
Dados
0 Mux 1
SA
LDR
N
Z
F
H 2
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
Unidade de controlo MAC-1
O programa encontra-se carregado em memória
A unidade de controlo acede à memória para ler cada
instrução
O endereço da instrução encontra-se num registo
especial – o Program Counter (PC)
A leitura da instrução designa-se fetch (busca)
Durante o fetch, enquanto se acede à memória o PC
é incrementado, ou seja, PC ← PC + 1
Isto para ficar “preparado” para a próxima instrução
Depois do fetch procede-se então à execução da
instrução
9
Unidade de controlo MAC-1
Unidade multi-ciclo ou microprogramada
Um ciclo para realizar o fetch…
… e n de ciclos para executar a instrução
Em cada um dos n ciclos de execução aplica-se uma
palavra de controlo ao datapath
Algumas instruções são simples
sequência de 1 ou 2 palavras de controlo
Outras podem ser mais complicadas
sequência mais longa de palavras de controlo para executar a
instrução
10
MAC-1 – processamento 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
11
Palavras de controlo no MAC-1
31
S
A
0
C
N
D
F
H
L L
R W L
D A
D R E
R R
RC
RC
RB
RA
ADDR
RB RA
4
4
4
LE
PC
AC
LAR
SP
BUS B
MAR
IR
BUS A
(...)
MDR
Endereços
Dados
0 Mux 1
SA
LDR
N
Z
F
H 2
WR
RD
ALU
2
Deslocamento
BUS C
12
Processador MAC-1
Linguagem assembly
13
Assembly MAC-1
Endereçamento imediato
Carregamento de constantes
Mnemónica
Descrição
Significado
LOCO c
AC ← c
Load constant
c é qualquer valor inteiro entre 0 e 4095 (12 bits)
0
1
1
Opcode
(4 bits)
1
c
c
c
c
c
c
c
c
c
c
c
c
Constante a carregar
(12 bits)
14
Assembly MAC-1
Endereçamento directo
Usado para aceder a variáveis globais
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)
15
Assembly MAC-1
Exemplo – endereçamento directo
// Código em java
public class Exemplo
{
// Má programação, necessária 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;
}
}
16
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
jump 3
AC
10
25
0
1
10
25
2
15
3
lodd 1
4
addd 2
5
stod 1
6
halt
7
...
17
Assembly MAC-1
Instruções de salto
Diz-se que há um salto quando a próxima instrução a
executar não é a seguinte
Ou seja, não é a instrução que se encontra na posição PC+1
Fazendo uma analogia com a programação:
Se x for menor que
0, salta para aqui
if (x >= 0)
x = 1;
else
x = -1;
y = x;
18
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 x
PC ← x
Unconditional jump
JPOS x
if (AC ≥ 0) PC ← x
Jump if positive or zero
JNEG x
if (AC < 0) PC ← x
Jump if negative
JZER x
if (AC == 0) PC ← x
Jump if zero
JNZE x
if (AC != 0) PC ← x
Jump if nonzero
x é o endereço para o qual o programa salta em caso de salto
Pode ser qualquer valor inteiro entre 0 e 4095 (12 bits)
19
Assembly MAC-1
Exemplo – utilização de saltos em condições
// Em Java :
# 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:
...
20