Você está na página 1de 14

NEANDERWIN

O NeanderWin um simulador da mquina Neander, definida no livro do Raul F. Weber


(UFRGS), Fundamentos de Arquitetura de Computadores, Ed. Sagra Luzzatto. A mquina
original foi estendida aqui para incluir algumas instrues para carga de dados imediatos
no acumulador e operaes de entrada e sada de dados para dois dispositivos
mapeados em nosso simulador: um teclado e um visor.
Algumas caractersticas do processador Neander so:

Largura de dados e endereos de 8 bits


Dados representados em complemento a dois
1 acumulador de 8 bits (AC)
1 apontador de instrues de 8 bits (PC)
1 registrador de cdigo de condio com 2 bits: negativo (N) e zero (Z)

O NEANDER s possui um modo de endereamento: o modo direto (muitas vezes


tambm chamado de absoluto). No modo de endereamento direto (Figura 4.1), a palavra
que segue o cdigo da instruo contm, nas instrues de manipulao de dados, o
endereo de memria do operando. Nas instrues de desvio, esse endereo
corresponde posio de memria onde est a prxima instruo a ser executada.
O NEANDERWIN foi estendido para ter mais dois modos de endereamento: imediato e
indireto. Maiores detalhes sero mostrados mais adiante.
1) Listagem geral das instrues
As instrues podem ter um ou dois bytes. Nas instrues com apenas um byte, os 4 bits
mais significativos contm o cdigo da operao. Nas instrues com dois bytes, que no
Neander so aquelas que fazem referncia a um operando na memria, o segundo byte
contm o endereo de memria deste operando.
7

4 3
Cdigo

0
No utilizados

endereo direto

Nota:
Os 4 bits de mais baixa ordem do primeiro byte so reservados para futuras expanses.
Existem tambm dois cdigos que no tm instrues associadas.
'NOP' cdigo 0
O comando NOP usado apenas para gastar tempo.
'STA ender' cdigo 1
O comando STA guarda o acumulador na posio de memria indicada pelo
operando ender.

'LDA ender' cdigo 2


O comando LDA atribui ao acumulador o contedo da posio de memria indicada
pelo operando ender.
'ADD ender' cdigo 3
O comando ADD soma ao acumulador o contedo de uma posio de memria
indicada pelo operando ender.
'OR ender' cdigo 4
O comando OR realiza um "ou" lgico entre o acumulador e o contedo de uma
posio de memria indicada pelo operando ender.
'AND ender' cdigo 5
O comando AND realiza um "e" lgico entre o acumulador e o contedo de uma
posio de memria indicada pelo operando ender.
'NOT' cdigo 6
O comando NOT inverte os bits do acumulador.
'JMP ender' cdigo 8
O comando JMP (jump) desvia a execuo do programa para o endereo indicado
pelo operando ender.
'JN ender' cdigo 9
O comando JN (jump if negative) desvia a execuo do programa para o endereo
indicado pelo operando ender, apenas quando a ltima operao realizada produziu um
valor com o bit 7 ligado (negativo).
'JZ ender' cdigo 10
O comando JZ (jump if zero) desvia a execuo do programa para o endereo
indicado pelo operando ender, apenas quando a ltima operao realizada produziu um
valor zero.
'JNZ ender' cdigo 11
O comando JNZ (jump if not zero) desvia a execuo do programa para o endereo
indicado pelo operando ender, apenas quando a ltima operao realizada produziu um
valor diferente de zero.
'IN ender' cdigo 12
O comando IN (input) traz para o acumulador o valor lido num dispositivo externo
indicado pelo operando ender. No Neanderwin os dispositivos so: chaves (endereo 0) e
o status de "dado disponvel" das chaves (endereo 1).
'OUT ender' cdigo 13
O comando OUT (output) descarrega o contedo do acumulador em um dispositivo
externo indicado pelo operando ender. No Neanderwin o nico dispositivo disponvel
um visor (endereo 0).
'LDI imed' cdigo 14

O comando LDI (load immediate) carrega no acumulador o valor dado pelo operando
imed.
'HLT' cdigo 15
O comando HLT (halt) para a mquina.
Modos de Endereamento:
- imediato
O segundo byte da instruo o operando.
A nica instruo que usa este modo de endereamento a LDI.
- direto
O segundo byte da instruo o endereo de memria do operando.
- indireto
O segundo byte da instruo contm o endereo de memria onde est o endereo do
operando (ou seja, o segundo byte da instruo o endereo do ponteiro para o
operando). Para indicar que um operando indireto, deve-se preced-lo pela letra "@"
(arrba)
2) Comentrios no programa
Os comentrios so comeados por ponto e vrgula, e podem tambm ocorrer no
final das linhas de instrues.
3) Rtulos
Um rtulo um nome dado prxima posio de memria.
O nome seguido por dois pontos.
4) Pseudo Instrues:
ORG ender
A pseudo-instruo ORG (origin) indica ao montador que a prxima instruo ser
colocado na posio ender de memria.
var EQU imed
A pseudo-instruo EQU (equate) atribui um nome (rtulo) a um determinado valor.
Esse comando frequentemente usado para especificar variveis que so
posicionadas em um endereo especfico de memria. Por exemplo para posicionar a
varivel x no endereo 100 use: X EQU 100
END ender
A pseudo-instruo END indica que o programa fonte acabou.
O operando ender usado para pr-carregar o PC com o endereo inicial de
execuo do programa.
DS imed
A pseudo-instruo DS (define storage) reserva um nmero de palavras na memria
definido pelo valor imed.
3

DB imed
A pseudo-instruo DB (define bytes) carrega esta palavra com o valor dado pelo
operando imed.
5) Exemplos de representao de nmeros
Decimal:
30
Binrio:
00110000b
Hexadecimal: 30h
Obs: Nmeros hexadecimais maiores que 7Fh devem ser precedidos por um zero, p. ex.
0F3h

Tabela de Instrues
Cdigo
binrio
0000
0001
0010
0011
0100
0101
0110
1000
1001
1010
1011
1100
1101
1110
1111
Instruo
NOP
STA ender
LDA ender
ADD ender
OR ender
AND ender
NOT
JMP ender
JN ender
JZ ender

Instruo

Descrio

NOP
STA ender
LDA ender
ADD ender
OR ender
AND ender
NOT
JMP ender
JN ender
JZ ender
JNZ ender
IN ender
OUT ender
LDI imed
HLT

nenhuma operao
armazena acumulador (store)
carrega acumulador (load)
Soma
operao lgica ou
operao lgica e
inverte (complementa) acumulador
desvio incondicional (jump)
desvio condicional (jump on negative)
desvio condicional (jump on zero)
desvio condicional (jump on not zero)
operao de entrada no dispositivo ender
operao de sada no dispositivo ender
carrega o valor imediato imed no acumulador
trmino da execuo (halt)

Comentrio
nenhuma operao
MEM(ender) AC
AC MEM(ender)
AC AC + MEM(ender)
AC AC or MEM(ender)
AC AC and MEM(ender)
AC NOT AC
PC ender
if N = 1 then PC ender
if Z = 1 then PC ender
4

JNZ ender
IN ender
OUT ender
LDI imed
HALT

if Z = 0 then PC ender
AC IN (ender)
OUT(ender) AC
AC imed
halt

Cdigos de condio:
N (negativo): sinal do resultado
1 resultado negativo
0 resultado no negativo
Z (zero): indica resultado igual a zero
1 resultado igual a zero
0 resultado diferente de zero
As instrues lgicas e aritmticas (ADD, NOT, AND, OR) e a instruo de transferncia
LDA afetam os cdigos de condio N e Z. As demais instrues (STA, JMP, JN, JZ, JNZ,
IN, OUT, LDI, NOP e HLT) no alteram os cdigos de condio.
Ciclo de busca da instruo:
RI MEM(PC)
PC PC + 1
Seqncia de operaes para execuo da instruo:
Instruo:
NOP

Ciclo
Busca
Execuo

STA

Busca
Execuo

LDA

Busca
Execuo

operaes
RI MEM(PC)
PC PC + 1
nenhuma
RI MEM(PC)
PC PC + 1
ender MEM(PC)
PC PC + 1
MEM(ender) AC
RI MEM(PC)
PC PC + 1
ender MEM(PC)
PC PC + 1
AC MEM(ender)

ADD

Busca
Execuo

OR

Busca
Execuo

AND

Busca
Execuo

NOT

Busca
Execuo

JMP

Busca
Execuo

JN caso N = 1

Busca
Execuo

JN caso N = 0

Busca
Execuo

RI MEM(PC)
PC PC + 1
ender MEM(PC)
PC PC + 1
AC AC + MEM(ender)
RI MEM(PC)
PC PC + 1
ender MEM(PC)
PC PC + 1
AC AC or MEM(ender)
RI MEM(PC)
PC PC + 1
ender MEM(PC)
PC PC + 1
AC AC and MEM(ender)
RI MEM(PC)
PC PC + 1
AC not AC
RI MEM(PC)
PC PC + 1
ender MEM(PC)
PC ender
RI MEM(PC)
PC PC + 1
ender MEM(PC)
PC ender
RI MEM(PC)
PC PC + 1
ender MEM(PC)
PC PC + 1

JZ caso Z = 1

Busca
Execuo

JZ caso Z = 0

Busca
Execuo

JNZ caso Z = 1

Busca
Execuo

JNZ caso Z = 0

Busca
Execuo

IN ender

Busca
Execuo

OU ender

Busca
Execuo

LDI imed

Busca
Execuo

HLT

Busca
Execuo

RI MEM(PC)
PC PC + 1
ender MEM(PC)
PC ender
RI MEM(PC)
PC PC + 1
ender MEM(PC)
PC PC + 1
RI MEM(PC)
PC PC + 1
ender MEM(PC)
PC PC + 1
RI MEM(PC)
PC PC + 1
ender MEM(PC)
PC ender
RI MEM(PC)
PC PC + 1
ender MEM(PC)
IN (ender)
RI MEM(PC)
PC PC + 1
ender MEM(PC)
OUT (ender)
RI MEM(PC)
PC PC + 1
ender MEM(PC)
AC ender
RI MEM(PC)
PC PC + 1
parar o processamento

Seqncias considerando operaes de leitura e escrita na memria


Instruo:
NOP

Ciclo
Busca

Execuo
STA

Busca

Execuo

LDA

Busca

Execuo

ADD

Busca

Execuo

Operaes
REM PC
Read; PC PC + 1
RI RDM
Nenhuma
REM PC
Read; PC PC + 1
RI RDM
REM PC
Read; PC PC + 1
REM RDM
RDM AC
write
REM PC
Read; PC PC + 1
RI RDM
REM PC
Read; PC PC + 1
REM RDM
read
AC RDM; atualiza N e Z
REM PC
Read; PC PC + 1
RI RDM
REM PC
Read; PC PC + 1
REM RDM
read
AC AC + RDM; atualiza N e Z

OR

Busca

Execuo

AND

Busca

Execuo

NOT

Busca

Execuo
JMP

Busca

Execuo
JN caso N = 1

Busca

Execuo

REM PC
Read; PC PC + 1
RI RDM
REM PC
Read; PC PC + 1
REM RDM
read
AC AC or RDM; atualiza N e Z
REM PC
Read; PC PC + 1
RI RDM
REM PC
Read; PC PC + 1
REM RDM
read
AC AC and RDM; atualiza N e Z
REM PC
Read; PC PC + 1
RI RDM
AC not AC
REM PC
Read; PC PC + 1
RI RDM
REM PC
Read;
PC RDM
REM PC
Read; PC PC + 1
RI RDM
REM PC
Read;
PC RDM

JN caso N = 0

Busca

JZ caso Z = 1

Execuo
Busca

Execuo
JZ caso Z = 0

Busca

JNZ caso Z = 1

Execuo
Busca

JNZ caso Z = 0

Execuo
Busca

Execuo
IN

Busca

Execuo

OUT

Busca

Execuo

LDI

Busca

Execuo

REM PC
Read; PC PC + 1
RI RDM
PC PC + 1
REM PC
Read; PC PC + 1
RI RDM
REM PC
Read;
PC RDM
REM PC
Read; PC PC + 1
RI RDM
PC PC + 1
REM PC
Read; PC PC + 1
RI RDM
PC PC + 1
REM PC
Read; PC PC + 1
RI RDM
REM PC
Read;
PC RDM
REM PC
Read; PC PC + 1
RI RDM
REM PC
Read; PC PC + 1
REM RDM
input
AC RDM; atualiza N e Z
REM PC
Read; PC PC + 1
RI RDM
REM PC
Read; PC PC + 1
REM RDM
RDM AC;
output
REM PC
Read; PC PC + 1
RI RDM
REM PC
Read; PC PC + 1
AC RDM; atualiza N e Z
1

HLT

Busca

Execuo

REM PC
Read; PC PC + 1
RI RDM
Parar o processamento

Exemplos de programao
Vamos considerar, como exemplo, um programa que realiza a soma de 3 posies
consecutivas da memria e armazena o resultado numa quarta posio. Inicialmente,
devem ser escolhidas a rea de dados e a rea de programa, ou seja, a localizao das
instrues e dados na memria. No existem critrios para essa escolha, mas deve ser
observado que rea de programa no pode invadir a rea de dados e vice-versa. Ou seja,
para esse programa, foi escolhida uma alocao de memria de tal forma que o programa
ocupe a metade inferior da memria e os dados a metade superior, como segue:
rea de programa
rea de dados

incio do programa posio 0 (0H)


primeira parcela posio 128 (80H)
segunda parcela posio 129 (81H)
terceira parcela posio 130 (82H)
resultado posio 131 (83H)

O programa seria:
Simblico

Comentrios

X EQU
Y EQU
W EQU
Z EQU

; Endereo da varivel X definido como 128


; Endereo da varivel Y definido como 129
; Endereo da varivel W definido como 130
; Endereo da varivel Z definido como 131

ORG
LDA
ADD
ADD
STA
HLT

0
X
Y
W
Z

128
129
130
131

; acumulador A recebe contedo de X


; contedo de A somado ao contedo de Y
; contedo de A somado ao contedo de W
; contedo de A copiado para Z
; processador pra

Esse programa pode ser editado em linguagem de montagem, depurado e executado


usando o simulador/depurador NEANDERWIN, cujos comandos foram apresentados
anteriormente.

Concluso
NEANDER um computador muito simples, desenvolvido apenas para fins didticos.
Processadores modernos so muito mais complexos que NEANDER. Entretanto, mesmo
processadores utilizados nas mais sofisticadas estaes de trabalho so baseados nos
conceitos elementares que voc aprendeu com NEANDER.
O NEANDERWIN estende o conjunto de instrues do NEANDER e oferece uma
interface de programao amigvel, com a entrada do cdigo em representao
simblica, com diversas facilidades para o programador, que tornam muito mais fcil o
uso do processador NEANDER como ferramenta de ensino. Esto disponveis verses
tanto para o sistema operacional Windows e Linux. O cdigo fonte est disponvel
mediante solicitao.
1

Exerccios de programao usando o NEANDERWIN


Os exerccios apresentados aqui so apenas uma amostra do que pode ser programado
com NEANDERWIN. Na definio de novos problemas, o nico cuidado que deve ser
tomado com a memria disponvel para programa e dados, que compreende apenas
256 posies. Exceto onde explicitado, todos os nmeros e endereos so representados
na base decimal.
1. Limpar o acumulador: faa 4 programas diferentes que zerem o acumulador.
2. Somar duas variveis de 8 bits: faa um programa para somar duas variveis
representadas em complemento a dois e verifique se ocorreu overflow. Indique a
ocorrncia de overflow da seguinte maneira:
contedo = 0 quando no ocorreu overflow
contedo = 1 quando ocorreu overflow
3. Subtrair duas variveis: faa um programa para subtrair duas variveis de 8 bits
representadas em complemento de dois. O resultado deve aparecer na posio de
memria consecutiva s ocupadas pelas variveis de entrada.
4. Comparao: determine qual a maior valor de um vetor com 10 elementos de 8
bits cada. Coloque os valores iniciais do vetor com uso das diretivas do montador.

Você também pode gostar