Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
5
Conjunto de instruções (ISA)
11 instruções Lógicas/aritméticas
6
Conjunto de instruções (ISA)
11 instruções Desvio/Salto
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
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)
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