Você está na página 1de 23

Processador Neander

1
Introdução
 Processador didático extremamente simples
 Autores
 Raul Weber (UFRGS) e Taisy Weber (UFRGS)
 Simulador
 NeanderWin (free)
 http://www.dcc.ufrj.br/~gabriel/neanderwin.zip
 Artigo sobre o simulador
 http://dcc.ufrj.br/~gabriel/WEAC2006.pdf
 Livro de referência
 “Fundamentos de arquitetura
de computadores”
 Raul Fernando Weber
 Série de livros didáticos da
UFRGS

2
Introdução
 Características gerais
 Barramentos de endereços/dados de 8 bits
 Endereça até 256 (28) posições de memória (dados e programa)
 Cada endereço corresponde a um byte da memória (byte addressing)
 Modelo de Von Neumann (espaço de endereçamento único)
 Registradores
 Propósito geral
 1 acumulador (AC) (8 bits) 8

 Arquitetura baseada em acumulador 8

 Específicos
 1 apontador de programa (PC) (8 bits)
 1 registrador de instruções (IR) (8 bits)
 Códigos de condição (flags)
 N: negativo (1 bit)
 Z: zero (1 bit)

3
Conjunto de instruções (ISA)
 11 instruções
 end: endereço de memória

4
Conjunto de instruções (ISA)
 11 instruções Acesso à memória

 end: endereço de memória

5
Conjunto de instruções (ISA)
 11 instruções Lógicas/aritméticas

 end: endereço de memória

6
Conjunto de instruções (ISA)
 11 instruções Desvio/Salto

 end: endereço de memória

7
Conjunto de instruções (ISA)
 Ações efetuadas por cada instrução
 MEM: memória
 AC: acumulador

Característica de
arquitetura
baseada em
acumulador.
Acumulador é
operando
implícito

8
Conjunto de instruções (ISA)
 Formato das instruções
 O Neander possui instruções de um ou dois bytes (ou
seja, ocupam uma ou duas posições de memória)

8 bits

7 4 3 0
• Instruções de 1 byte
– NOT, NOP e HLT Código Don’t care

8 bits

• Instruções de 2 bytes 7 4 3 0

– STA, LDA, ADD, OR, Código Don’t care Byte 1


AND, JMP, JN e JZ
Endereço Byte 2

9
Conjunto de instruções (ISA)
 Formato das instruções
 O Neander possui instruções de um ou dois bytes (ou
seja, ocupam uma ou duas posições de memória)

MEMÓRIA
Exemplo:
Montador
LDA 127 (Assembler) 0
ADD 128
1
NOT
HLT 2
3
4
5
6
7

10
Conjunto de instruções (ISA)
 Formato das instruções
 O Neander possui instruções de um ou dois bytes (ou
seja, ocupam uma ou duas posições de memória)

MEMÓRIA
Exemplo:
Montador
LDA 127 (Assembler) 0 0010xxxx
ADD 128 LDA 127
1 01111111
NOT
HLT 2 0011xxxx
ADD 128
3 10000000
4 0110xxxx NOT
5 1111xxxx HLT O programa
6 ocupa 6 bytes
na memória
7

11
Conjunto de instruções (ISA)
 Modos de endereçamento
 Dão um significado para os parâmetros presentes nas instruções
(e.g. endereços, registradores, constantes)
 Neander suporta somente modo direto (absoluto)
 Instruções: LDA, STA, ADD, OR e AND
 Endereço que segue a instrução aponta diretamente a posição de
memória a ser acessada (leitura/escrita)
MEMÓRIA
Exemplo:
LDA 6 0 LDA
1 6
2
AC ← MEM(6) 3
Endereço de acesso
4 (onde está o dado que
5 deve ser lido pela
AC ← 100 instrução)
6 100
Conjunto de instruções (ISA)
 Modos de endereçamento
 Instruções de desvio: JMP, JN e JZ
 Endereço que segue a instrução aponta diretamente o
endereço da próxima instrução a ser executada

MEMÓRIA
Exemplo: 0 JMP
JMP 5
1 5
LDA 45
NOT 2 LDA
STA 32 3 45
HLT
4 NOT
5 STA
6 32
7 HLT
Conjunto de instruções (ISA)
 Modos de endereçamento
 Instruções de desvio: JMP, JN e JZ
 Endereço que segue a instrução aponta diretamente o
endereço da próxima instrução a ser executada

MEMÓRIA
Exemplo: 0 JMP
Montador Execução:
JMP 5
(Assembler) 1 5
LDA 45 JMP 5
NOT 2 LDA STA 32
STA 32 HLT
3 45
HLT
4 NOT
5 STA O programa
ocupa 8 bytes
6 32
na memória
7 HLT
Conjunto de instruções (ISA)
 Códigos de condição (flags)
 O Neander possui flip-flops para armazenar os códigos
de condição N e Z gerados pela ULA, os quais são
utilizados pelas instruções JZ e JN
 Estes flip-flops são atualizados somente pela execução
das instruções lógicas/aritméticas (ADD, NOT, AND e
OR) e a instrução de acesso à memória LDA
 As demais instruções do ISA não alteram estes flip-flops
 As instruções de salto condicional JN e JZ dependem do
valor dos flags N e Z, respectivamente
 JN: jump if N = 1
 JZ: jump if Z = 1
 Caso a condição de salto seja falsa (N=0 ou Z=0), a
próxima instrução a ser executada é aquela imediatamente
após a instrução de salto (JN ou JZ)
Conjunto de instruções (ISA)
 Códigos de condição (flags)
 Instrução de desvio condicional JN

Exemplo:
JN 5 MEMÓRIA Execução se N = 1:
LDA 45 JN 5
0 JN
NOT STA 32
STA 32 1 5 HLT
Execução se N = 0:
HLT 2 LDA
JN 5
LDA 45 3 45
NOT
4 NOT
STA 32
HLT 5 STA
6 32
7 HLT
Programação assembly
 A linguagem assembly do processador Neander
é baseada no seu ISA
 NOP, STA, LDA, ADD, OR, AND, NOT, JMP, JN, JZ,
HLT
 Linguagens assembly são sempre case
insensitive
 ADD = Add = add
 A tradução do programa assembly em código
binário (linguagem de máquina) é feita pelo
montador (assembler)
 O simulador NeanderWin realiza a montagem e
a simulação de programas assembly
Programação assembly
 Exemplo 1: Versão 1
 Programa que soma o conteúdo de 3 posições de
memórias consecutivas (128, 129 e 130) e armazena
o resultado na posição seguinte (131)

LDA 128 ; Acumulador (AC) recebe conteúdo do endereço 128


ADD 129 ; Conteúdo do AC é somado ao conteúdo do endereço 129
ADD 130 ; Conteúdo do AC é somado ao conteúdo do endereço 130
STA 131 ; Valor do AC é armazenado no endereço 131
HLT ; Pára o processador

Comentários sintáticos (inútil)


Programação assembly
 Exemplo 1: Versão 1
 Programa que soma o conteúdo de 3 posições de
memórias consecutivas (128, 129 e 130) e armazena
o resultado na posição seguinte (131)

LDA 128 ; AC ← MEM(128)


ADD 129 ; AC ← AC + MEM(129)
ADD 130 ; AC ← AC + MEM(130)
STA 131 ; MEM(131) ← AC
HLT ; Pára o processador
Comentários sintáticos são
inuteis porque são sempre
iguais, independente do da
finalidade do programa
Comentários sintáticos (inútil)
Programação assembly
 Exemplo 1: Versão 1
 Programa que soma o conteúdo de 3 posições de
memórias consecutivas (128, 129 e 130) e armazena
o resultado na posição seguinte (131)

LDA 128 ; Lê o primeiro valor


ADD 129 ; Soma o primeiro valor com o segundo valor
ADD 130 ; Soma os três valores
STA 131 ; Armazena o resultado do somatório
HLT ; Pára o processador

Comentários semânticos
Programação assembly
 Exemplo 1: Versão 1
 Gerar código hexadecimal relativo ao programa abaixo
 Considerar don’t care como 0s

LDA 128
ADD 129
ADD 130
STA 131
HLT
Programação assembly
 Exemplo 1: Versão 1
 Gerar código hexadecimal relativo ao programa abaixo
 Considerar don’t care como 0s
MEMÓRIA
0 00100000
LDA 128 20h 80h (LDA 128)
1 10000000
ADD 129
ADD 130 2 00110000
30h 81h (ADD 129)
STA 131 3 10000001
HLT
4 00110000
30h 82h (ADD 130)
5 10000010
6 00010000
10h 83h (STA 131)
7 10000011
8 11110000 F0h (HLT)
Programação assembly
 Exemplo 1: Versão 1
 NeanderWin

Você também pode gostar