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
Download

Aula 2