Buscar

282675428-Org-Computadores-Atividade-Estruturada-HIROCHE-MENDES

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Continue navegando


Prévia do material em texto

UNIVERSIDADE ESTÁCIO DE SÁ
GRADUAÇÃO TECNOLOGICA
ANÁLISE E DESENVOLVIMENTO DE SISTEMAS
ATIVIDADES ESTRUTURADAS ORGANIZAÇÃO DE COMPUTADORES
Aluno: 
Hiroche Mendes dos Anjos – MAT: 201301105988
Matéria e Turma: CCT0006-3015
ATIVIDADES ESTRUTURADAS
ATIVIDADES ESTRUTURADAS
UNIVERSIDADE ESTÁCIO DE SÁ
ORGANIZAÇÃO DE COMPUTADORES
RIO DE JANEIRO – RJ
PROF.: LÁZARO
ATIVIDADE ESTRUTURADA 1
1) Pesquisar as características do processador Neander-X e responda as seguintes questões: 
a) Quantos bits são utilizados para representar uma instrução?
São utilizados 08 bits.
b) Quantos bits são utilizados para representar um endereço?
São utilizados 08 bits.
c) Como são representados os números inteiros negativos?
Os números negativos são representados como N(negativo),1- resultado negativo, 0- resultado não é negativo.
d) Quantas instruções podem existir?
Podem existir 15 instruções.
e) Qual o tamanho máximo de memória endereçável?
O Neander usa uma memória de 256 posições (endereços) x 8 bits para endereçar (= largura de endereço de 08 bits),logo, ele consegue acessar qualquer endereço do intervalo:
          - 00000000 a 11111111 (em binário)
          - 0 a 255 (em decimal)
          - 0 M a   FFH ( em hexadecimal).
Com isso temos, a seguinte divisão de memória
          - Área programada – posição 0M até 7FH
          - Área de dados – posição 80H até FFH.
f) Quais são os registradores disponíveis?
Os registrados disponíveis são: 1 registrador de estado com 2 códigos de condição:negativo(N) e zero (Z).
g) Qual o formato de uma instrução?
Os formatos são: uma linha pode conter alguns dos seguintes elementos: um rótulo, um operador ou uma pseudo-instrução, um operando opcional e comentários. São permitidas linhas vazias.
• Instruções com 1 byte (NOP,NOT) 
• Instruções com 2 byte (STA,LDA,ADD,OR,AND,JMP,JN,JZ)
2) Pesquisar a função dos simuladores e comparar o simulador NeanderWin (simulador do processador Neander-X) com outro a sua escolha.
Função dos simuladores
Buscar um melhor entendimento sobre o funcionamento dos processadores de forma bem simples para possibilitar a implementação de rotinas aritméticas simples (adição e subtração) e a programação de rotinas relativamente complexas (multiplicação e divisão). 
 
Facilitar ao máximo as atividades didáticas do professor e o apoio mais completo possível para as dificuldades comuns do aluno.
Sendo criado um ambiente integrado para desenvolvimento, que executa em Windows e Linux incluindo:
# Editor de textos;
# Montador (assembler);
# Simulador da arquitetura;
# Visualizador da memória simulada;
# Ferramenta de apoio ao aprendizado de instruções;
# Utilitário para conversões de bases;
# Simulador de visor painel de chaves;
# Gerador /carregador de imagem da memória simulada.
Com isso os alunos têm diversas experiências práticas como os simuladores, buscando nesse processo muito mais que apresentar conceito teórico e nomenclatura, mas conduzir o aluno a uma visão abrangente e em pequena medida, criticar sobre a estrutura e o conjunto de instruções, que permita gerar a curiosidade para estudos futuros mais aprofundados.
Comparação do Simulador Neanderwin e o Simulador Ramses.
Neanderwin
Apresentação
 O NeanderWin é um simulador da máquina Neander. A máquina original foi estendida nesse simulador para incluir algumas instruções para carga de dados imediatos no acumulador e operações de entrada e saída de dados para dois dispositivos mapeados em nosso simulador: um teclado e um visor.
 Algumas características do processador Neander são:
· Largura de dados e endereços de 8 bits;
· Dados representados em complemento a dois;
· Acumulador de 8 bits (AC);
· Apontador de instruções de 8 bits (PC);
· Registrador de código de condição com 2 bits: negativo (N) e zero (Z).
    O NEANDER é um computador muito simples, desenvolvido apenas para fins didáticos. Processadores modernos são muito mais complexos que NEANDER. Entretanto, mesmo processadores utilizados nas mais sofisticadas estações de trabalho são baseados nos conceitos elementares que se aprender com o NEANDER.
  O NEANDERWIN estende o conjunto de instruções do NEANDER e oferece uma interface de programação amigável, com a entrada do código em representação simbólica, com diversas facilidades para o programador, que tornam muito mais fácil  o uso do processador NEANDER como ferramenta de ensino. Estão disponíveis versões tanto para o sistema operacional Windows e Linux. O código fonte está disponível mediante solicitação.
        O NEANDER só possui um modo de endereçamento: o modo direto (muitas vezes também chamado de absoluto). No modo de endereçamento direto, a palavra que segue o código da instrução contém, nas instruções de manipulação de dados, o endereço de memória do operando. Nas instruções de desvio, esse endereço corresponde à posição de memória onde está a próxima instrução a ser executada.
 O NEANDERWIN foi estendido para ter mais dois modos de endereçamento: imediato e indireto. 
Diagrama em Blocos
       A seguir apresentamos o diagrama em blocos do processador NEANDER:
 
Listagem geral das instruções
        As instruções podem ter um ou dois bytes. Nas instruções com apenas um byte, os 4 bits mais significativos contém o código da operação. Nas instruções com dois bytes, que no Neander são aquelas que fazem referência a um operando na memória, o segundo byte contém o endereço de memória deste operando.
	7                                       4
	  3                                    0
	Código
	Não utilizados
	endereço direto
	Nota:  Os 4 bits de mais baixa ordem do primeiro byte são reservados para futuras expansões. Existem também dois códigos que não têm instruções associadas.
	Código binário
	Instrução
	Descrição
	0000
	NOP
	nenhuma operação
	0001
	STA ender
	armazena acumulador (store)
	0010
	LDA ender
	carrega acumulador (load)
	0011
	ADD ender
	Soma
	0100
	OR ender
	operação lógica “ou”
	0101
	AND ender
	operação lógica “e”
	0110
	NOT
	inverte (complementa) acumulador
	1000
	JMP ender
	desvio incondicional (jump)
	1001
	JN ender
	desvio condicional (jump on negative)
	1010
	JZ ender
	desvio condicional (jump on zero)
	1011
	JNZ ender
	desvio condicional (jump on not zero)
	1100
	IN ender
	operação  de entrada no dispositivo “ender”
	1101
	OUT ender
	operação de saída no dispositivo “ender”
	1110
	LDI imed
	carrega o valor imediato imed no acumulador
	1111
	HLT
	término da execução (halt)
'NOP' código 0
        O comando NOP não realiza nenhuma operação.  É  usado  apenas para  gastar  tempo.
'STA ender' código 1
        O comando STA guarda o acumulador na posição de memória indicada pelo operando ender.
'LDA ender' código 2
        O comando LDA atribui ao acumulador o conteúdo da posição de memória indicada pelo operando ender.
'ADD ender' código 3
        O comando ADD soma ao acumulador o conteúdo de uma posição de memória indicada pelo operando ender.
'OR ender'  código 4
        O comando OR realiza um "ou" lógico entre o acumulador e o conteúdo de uma posição de memória indicada pelo operando ender.
'AND ender' código 5
        O comando AND realiza um "e" lógico entre o acumulador e o conteúdo de uma posição de memória indicada pelo operando ender.
'NOT' código 6
        O comando NOT inverte os bits do acumulador.
'JMP ender' código 8
        O comando JMP (jump) desvia a execução do programa para o endereço indicado pelo operando ender.
'JN ender'  código 9
        O comando JN (jump if negative) desvia a execução do programa para o endereço indicado pelo operando ender, apenas quando a última operação realizada produziu um valor com o bit 7 ligado (negativo).
'JZ ender'  código 10
        O comando JZ (jump if zero) desvia a execução do programa para o endereço indicado pelo operando ender, apenas quando a última operação realizada produziu um valor zero.
'JNZ ender'  código 11
        O comando JNZ (jump if not zero) desvia a execuçãodo programa para o endereço indicado pelo operando ender, apenas quando a última operação realizada produziu um valor diferente de zero.
'IN ender'  código 12
        O comando IN (input) traz para o acumulador o valor lido num dispositivo externo indicado pelo operando ender.  No Neanderwin os dispositivos são: chaves (endereço 0) e o  status de "dado disponível" das chaves (endereço 1).
'OUT ender' código 13
        O comando OUT (output) descarrega o conteúdo do acumulador em um dispositivo externo indicado pelo operando ender.  No Neanderwin o único dispositivo disponível é um visor  (endereço 0).
'LDI imed' código 14
        O comando LDI (load immediate) carrega no acumulador o valor dado pelo operando imed.
'HLT' código 15
        O comando HLT (halt) para a máquina.
Modos de Endereçamento:
- imediato
     O segundo byte da instrução é o operando.
     A única instrução que usa este modo de endereçamento é a LDI.
- direto
     O segundo byte da instrução é o endereço de memória do operando.
- indireto
     O segundo byte da instrução contém o endereço de memória onde está o endereço do operando (ou seja, o segundo byte da instrução é o endereço do ponteiro para o operando). Para indicar que um operando é indireto, deve-se precedê-lo pela letra "@" (arrôba) – Veja na figura 01.
Figura 01
Comentários no programa:
        Os comentários são começados por ponto e vírgula, e podem também ocorrer no final das linhas de instruções.
Pseudo Instruções
ORG ender
        A pseudo-instrução ORG (origin) indica ao montador que  a próxima instrução será colocado na posição ender de memória.
var EQU imed
        A pseudo-instrução EQU (equate) atribui um nome (rótulo) a um determinado valor.
        Esse comando é frequentemente usado para especificar variáveis que são posicionadas em um endereço específico de memória.  Por exemplo para posicionar a variável x no endereço 100 use:  X EQU 100
END ender
        A pseudo-instrução END indica que o programa fonte acabou.
        O operando ender é usado para pré-carregar o PC com o endereço inicial de execução do programa.
DS imed
        A pseudo-instrução DS (define storage) reserva um número de palavras na memória definido pelo valor imed.
DB imed
        A pseudo-instrução DB (define bytes) carrega esta palavra com o valor dado pelo operando imed.                   
Exemplos de programação
        Vamos considerar, como exemplo, um programa que realiza a soma de 3 posições consecutivas da memória e armazena o resultado numa quarta posição. Inicialmente, devem ser escolhidas a área de dados e a área de programa, ou seja, a localização das instruções e dados na memória. Não existem critérios para essa escolha, mas deve ser observado que área de programa não pode invadir a área de dados e vice-versa. Ou seja, para esse programa, foi escolhida uma alocação de memória de tal forma que o programa ocupe a metade inferior da memória e os dados a metade superior, como segue:
Área de programa início do programa posição 0 (0H)
Área de dados primeira parcela posição 128 (80H)
Segunda parcela posição 129 (81H)
Terceira parcela posição 130 (82H)
Resultado posição 131 (83H)
O programa possível seria:
	Simbólico
	Comentários
	X EQU 128  
Y EQU 129 
W EQU 130
Z EQU 131
	; Endereço da variável X     definido como 128
; Endereço da variável Y definido como 129
; Endereço da variável W definido como 130
; Endereço da variável Z definido como 131
	ORG 0
LDA X
ADD Y
ADD W
STA Z
HLT
	
; acumulador A recebe conteúdo de X
; conteúdo de A é somado ao conteúdo de Y
; conteúdo de A é somado ao conteúdo de W
; conteúdo de A é copiado para Z
; processador pára
 Esse programa pode ser editado em linguagem de montagem, depurado e executado usando o simulador/depurador NEANDERWIN.
Ramses 
Características Básicas:
– Largura de Dados de 8 bits : O tamanho dos dados transmitidos no Barramento é 8 bits (256 variações);
– Endereços de 8 bits: A arquitetura permitira referenciar ate 256 posições na memória;
– Dados Representados em Complemento de 2 o que permite a sejam atribuídos números negativos.;
– 2(dois) Registradores de Uso geral com tamanho de 8 bits.
- Registrador A .Código 00. 
- Registrador B .Código 01.
– 1(um) Registrador de Índice X de 8 bits. Código 10.
– 1(um) Apontador de programa de 8 bits. PC. Marcando a próxima instrução a ser executada pelo processador.
– 1(um) Registrador de Estado com 3(três) estados possíveis:
N - Negativo.
Z - Zero.
C - Carry.
– Modos de Endereçamento:
- Direto
- Indireto
- Imediato
- Indexado
Endereçamento Direto (Absoluto):
Endereçamento Indireto:
. Endereçamento Imediato:
. Endereçamento Indexado:
FORMATO DAS INTRUÇÕES:
	Código
Hexadecimal
	Código
Decimal
	Instrução 
	 Operação
	00
	00
	NOP 
	---
	16
	10
	STR r end 
	Men(end):=r 
	32
	20
	LDR r end 
	r:=Men(end) 
	48
	30
	 ADD r end
	r:=Mem(end)+r
	64
	40
	 OR r end
	r:=Mem(end) or r
	80
	50
	 AND r end
	 r:=Mem(end) and r
	96
	60
	 NOT r
	r:=NOT(r)
	112
	70
	SUB r end 
	r:=r-Men(end)
	128
	80
	JMP end 
	PC:=end 
	144
	90
	JN end
	Se N=1 PC:=end 
	160
	A0
	JZ end
	Se Z=1 PC:=end 
	176
	B0
	 JC end
	Se C=1 PC:=end 
	192
	C0
	 JSR end
	Mem(end):=PC , PC:=end+1 
	208
	D0
	 NEG r
	r:= - r
	224
	E0
	SHR r 
	r:= r / 2
	240
	F0
	HLT 
	--- 
COMENTÁRIOS :
NOP : Nunhuma Operação .
STR r end : Armazena no Endereço 'end' o conteudo do resgistrador 'r'.
LDR r end : Carrega o conteudo do endereço 'end' no Registrador 'r'.
ADD r end : Soma o valor no que está no endereço 'end' ao que está no Registrador 'r', armazenando o resultado em 'r'.
OR r end : Realiza um "or" Bit a Bit entre o valor de 'end' e o valor de r, armazenado o resultado em r.
AND r end : Realiza um "and" Bit a Bit entre o valor de 'end' e o valor de r, armazenado o resultado em r.
NOT r : Realiza uma inversão binária do valor de r.
SUB r end  : Subtrai o valor contido em end do registrador r.
JMP end : executa apartir da instrução que esta em 'end'.
JN end : Caso o Valor do estado N for igual a 1', executa apartir da instrução que esta em 'end'.
JZ end : Caso o Valor do estado Z for igual a 1', executa apartir da instrução que esta em 'end'.
NEG r : Atribui a r o valor do seu simétrico.
SHR r : Atribui a r o valor da sua metade ou desloca seus bits para a direita.
HLT : Fim do Programa. 
TABELA DE ENDEREÇAMENTO:
	Código
	Tipo de Endereçamento
	Mnemônico
	00
	Direto
	N
	01
	Indireto
	n,I
	10
	Imediato
	#n
	11
	Indexado
	n,X
Endereçamento Direto : É dado o endereço na memória do qual o valor será utilizado.
Ex : ADD A 115
Somará o valor contido no endereço 115 ao valor do restrador A.
Endereçamento Indireto  : É dado o 'Alias'(Apelido, Codinome) do endereço na memória do qual o valor será utilizado.
Ex : ADD A 115,I
Somará 115 ao valor do restrador A.
Endereçamento Imediato  : É informado diretamente o valor que será utilizado.
Ex : ADD A #115
Somará 115 ao valor do restrador A.
Endereçamento Indexado  : É dado uma sentença que irá indicar a posição na memória a ser utilizada.
Ex : ADD A 115,X
Somará o valor contido no endereço 115 mais o valor do registrador x ao valor do registrador A.
Modo de endereçamento
 TABELA DE REGISTRADORES:
	Codigo
	Registrador
	Descrição
	00
	RA
	Registrador Geral
	01
	RB
	Registrador Geral
	10
	RX
	Registrador de Índice
	11
	---
	Nenhum Registrador Selecionado
 
Simulador NeanderWin
Foi criado com intenções didáticas, extremamente simples. Os processadores modernos são muito mais complexos que o Neander, mas estes processadores utilizados nas mais modernas máquinas de trabalho são baseados nos conceitos elementares do Neander.
Nota: O NEANDER é um computador muito simples sendo utilizado apenas para estudos devido a sua limitação.
Comparação entre os dois processadores:
Neander
– Instruções: 11*n + 8
– Leituras: 27*n + 18
– Escritas: 4*n   
Ramses
– Instruções: 5*n + 6
– Leituras: 10*n + 13
– Escritas: 1
Para n=30:
– Instruções - Neander 338 x Ramses 156
– Acessos - Neander 951 x Ramses 314
Referênciashttp://www.ulbra.inf.br/joomla/images/documentos/TCCs/2011_01/TCCII_CC_FrancisSherer.pdf
http://www.inf.pucrs.br/flash/orgarq/aulas/ramses/Ramses-Instrucoes.ppt‎
http://equipe.nce.ufrj.br/gabriel/estacio/Neander3.pdf
ATIVIDADE ESTRUTURADA 2
Aprendizagem do NeanderWin: Criação e Execução de Programas
a ) Executar o download do simulador
Referência: http://www.dcc.ufrj.br/~gabriel/neander.php 
b ) Identificar as partes do simulador descrevendo um breve roteiro de como gerar e executar um programa. 
Na Figura 01 abaixo mostramos a aparência da tela principal do sistema NeanderWin. Na parte superior estão o menu geral de operação (Arquivo, Editar, etc...) e diversos botões usados em conjunto com o editor de textos, que seguem o estilo usual de programas.
Figura 01 - Tela principal do NeanderWin
1) EDITOR DE TEXTOS: à esquerda, onde os códigos dos programas são escritos.
2) PAINEL: onde são mostrados os dispositivos de entrada e saída. Simulados com oito chaves e um visor em formato hexadecimal (16). Com alguns botões que controlam a execução desse simulador.
3) INSTRUÇÕES E REGISTRADORES: Praticamente todas as funções são exibidas nesta “caixa” da tela.
4) VISUALIZADOR DE MEMÓRIA: localizado à direita, mostra os valores armazenados nas posições da memória.
Mais abaixo, está o painel do simulador, em que são mostrados os dois dispositivos de entrada e saída (8 chaves e um visor em formato hexadecimal), e diversos botões para controle de execução.
Imediatamente abaixo, à esquerda, está o editor de textos, no qual o programa do aluno é digitado ou criado interativamente através de uma função para criação tutorada de programas (menu tutor de programação).
À direita desta área se situam os verificadores dos registros e “flags” principais da CPU (ACC, PC, Zero e Negativo), e abaixo o visualizador da memória, com controles para alteração de conteúdo.
Uma vez criado o programa ele será compilado, o que provoca o aparecimento de uma janela “pop-up” com a listagem, num formato similar à maioria dos montadores profissionais, em que também são indicados nos eventuais erros de compilação.
O programa compilado se reflete na alteração da memória, que é imediatamente exibida no painel correspondente. É possível copiar o conteúdo desta janela para a área de transferência, para colar em algum editor (como o Word ou Bloco de Notas) possibilitando eventuais embelezamentos.
	
c) Listar as instruções disponíveis com o respectivo formato e descrição:
'NOP' código 0
 O comando NOP é usado apenas para gastar tempo.
'STA ender' código 1
 O comando STA guarda o acumulador na posição de memória indicada pelo operando ender.
'LDA ender' código 2
 O comando LDA atribui ao acumulador o conteúdo da posição de memória indicada pelo operando ender.
'ADD ender' código 3
 O comando ADD soma ao acumulador o conteúdo de uma posição de memória indicada pelo operando ender.
'OR ender' código 4
 O comando OR realiza um "ou" lógico entre o acumulador e o conteúdo de uma posição de memória indicada pelo operando ender.
'AND ender' código 5
 O comando AND realiza um "e" lógico entre o acumulador e o conteúdo de uma posição de memória indicada pelo operando ender.
'NOT' código 6
 O comando NOT inverte os bits do acumulador.
'JMP ender' código 8
 O comando JMP (jump) desvia a execução do programa para o endereço indicado pelo operando ender.
'JN ender' código 9
 O comando JN (jump if negative) desvia a execução do programa para o endereço indicado pelo operando ender, apenas quando a última operação realizada produziu um valor com o bit 7 ligado (negativo).
'JZ ender' código 10
 O comando JZ (jump if zero) desvia a execução do programa para o endereço indicado pelo operando ender, apenas quando a última operação realizada produziu um valor zero.
'JNZ ender' código 11
 O comando JNZ (jump if not zero) desvia a execução do programa para o endereço indicado pelo operando ender, apenas quando a última operação realizada produziu um valor diferente de zero.
'IN ender' código 12
 O comando IN (input) traz para o acumulador o valor lido num dispositivo externo indicado pelo operando ender. No Neanderwin os dispositivos são: chaves (endereço 0) e o status de "dado disponível" das chaves (endereço 1).
'OUT ender' código 13
 O comando OUT (output) descarrega o conteúdo do acumulador em um dispositivo externo indicado pelo operando “ender”. No Neanderwin o único dispositivo disponível é um visor (endereço 0).
'LDI imed' código 14
 O comando LDI (load immediate) carrega no acumulador o valor dado pelo operando imed.
'HLT' código 15
 O comando HLT (halt) para a máquina.
Elabore um programa que execute a soma de duas variáveis de 8 bits representadas em complemento a dois. 
Considere as posições (em decimal) a seguir: 
Inicio do programa: 0 
Inicio da área de dados: 128 
Posição da 1ª variável: 128 
Posição da 2ª variável: 129 
Posição do resultado: 130 
PRODUTO/RESULTADO: 
O resultado desta atividade será um relatório que descreva todo o processo além do programa requisitado e o respectivo resultado através de um “print” da tela do simulador.
Programa:
;---------------------------------------------------
; Programa:
; Autor:
; Data:
;---------------------------------------------------
ORG 0
X EQU 128
Y EQU 129
W EQU 130
;carrega primeiro operador em comp de 2
LDI 02
OUT 00
STA X
;carrega segundo o operador em comp de 2
LDI 03
OUT 00
STA Y
;efetua a soma entre 2 operadores e guarda no terceiro
LDA X
ADD Y
STA W
OUT 00
HLT
Na Figura 2, vemos a execução do programa e a simulação realização. Foi realizada uma soma 32+5=37. 
Figura 2 - Tela principal do NeanderWin com exemplo feito
Na parte esquerda, vemos a execução do programa 
Simbólico	 Comentários
X EQU 128 Endereço da variável X definido como 128
Y EQU 129 Endereço da variável Y definido como 129
W EQU 130 Endereço da variável W definido como 130
	
ORG 0
LDA X Acumulador A recebe conteúdo de X
ADD Y Conteúdo de A é somado ao conteúdo de Y
STA W Conteúdo de A é copiado para W
HLT	 Processador pára
Solução:
X=32
Y=5
W=37(resposta)
Identificação das partes do simulador Neander
Na janela Programa:
 A seta ao lado da coluna de endereços indica o endereço da instrução que será executada (PC). Observe que, por padrão o programa começa no endereço 0.
 No canto inferior direito há uma pequena caixa de texto onde deverá ser inserido o código numérico em decimal da instrução que irá ocupar o endereço apontado pela seta verde (PC). Por exemplo, no nosso programa, seria a instrução “LDA 128”. Logo se preenche 32 (código da instrução LDA).
No canto inferior esquerdo, em vermelho, há uma caixa de texto denominada BP. Nesta caixa é permitida a você a inserção de um endereço de memória (instrução, 0 a 127) onde ocorrerá um breakpoint durante a execução do programa.
Na janela Dados:
 Corresponde aos endereços de memória situados entre [128..255] e é destinado ao preenchimento de valores nos endereços das variáveis e das constantes do programa na área de dados da memória do Neander. O preenchimento é feito através da caixa de texto no canto inferior direito da janela “Dados”.
Na janela Neander:
 Nesta janela são mostrados os valores (conteúdo dos registradores PC e AC), os bits N e Z, sob a forma de apagado (0) e aceso (1). Na caixa denominada “Execução” o número de execuções e instruções do programa carregado é exibido. Na caixa “Instrução” um decodificador para as instruções mostra o valor numérico dos 16 bits dessa instrução (8bits+8bits) e o seu significado no código. A exibição pode ser feita em decimal [0..9] ou hexadecimal [0..F].
 O simulador permite também que um arquivo seja salvo no formato. MEM (exclusivo dele) ou no formato texto.TXT. Porém, aabertura (carregamento) de um arquivo salvo só é possível no formato. MEM.
Lista das instruções do Neander
NOP 00 – Nenhuma operação.
STA 16 end – Armazena acumulador (store).
LDA 32 end – Carrega acumulador (load).
ADD 48 end – Soma.
OR 64 end – “ou” Lógico.
AND 80 end – “e” Lógico.
NOT 96 – inverte (complementa) acumulador.
JMP 128 end – desvio incondicional (jump).
JN 144 end – desvio condicional (jump on negative).
JZ 160 end – desvio condicional (jump on zero).
HLT 240 – término de execução (halt).
 
ATIVIDADE ESTRUTURADA 
Análise Comparativa: Neander-X com um Processador Comercial 
O Neander-X não é utilizado comercialmente. Escreva um relatório que compare o Neander a um processador comercial (você pode escolher!) demonstrando o porquê deste processador ser apenas acadêmico.
RESPOSTA:
Realizar um comparativo dos processadores educativos com os comerciais beira um abismo tecnológico enorme, pois estes possuem características e processamento muitas vezes superiores. 
O NEANDER é um computador muito simples, desenvolvido apenas para fins didáticos. Processadores modernos são muito mais complexos que NEANDER. Entretanto, mesmo processadores utilizados nas mais sofisticadas estações de trabalho são baseados nos conceitos elementares que se aprende com o NEANDER.
Tomamos como exemplo, microprocessadores da linha da Intel – codinome Gulftown – um projeto da linha de processadores de Multi-Core (vários núcleos de processadores) e o Geração 4 - Processador Core i7. Vamos descrever todas as características de funcionamento e as novidades desenvolvidas e compará-la com o processador NeanderX na conclusão.
Faremos um breve detalhamento sobre sua tecnologia e suas característica e capacidades.
Introdução ao processador Intel Core - Gulftown
O microprocessador Gulftown da Intel é um processador hexa-core, da família Westmere. Liga-se num socket LGA1366 e possui 12 Mio de memória cache L3[1]. O primeiro Gulftown é o Core i7 980X[1] a 3.33 GHz. Sendo um processador ideal para fins comerciais, assim desempenhando varias funções ao mesmo tempo, dando aos usuários a total flexibilidade de suas atividades.
Construídos com um processo de 32nm (geração Westmere), os processadores “Gulftown” são processadores de 6 núcleos de processamento que integram tecnologia HyperThreading (algo esquecida com o lançamento dos Core 2 Duo – 6 cores, 12 threads) e com velocidades de 2,4GHz.
Como os mais recentes processadores da Intel no mercado, este processador terá também o Turbo Boost que aumenta automaticamente o desempenho (ou seja, aumenta a velocidade do processador) em conformidade com a necessidade de processamento.
Terá também 6x256KB de Cache L2 e 12MB de Cache L3, controlo integrado de memória DDR3 em triple channel, sendo compatíveis com as atuais plataformas com o chipset X58 e o socket LGA-1366, já utilizadas pelos “Bloomfield” Core i7. O processador tem um UDP de 130 Watts.
Agora, vamos fazer um descritivo sobre família de processadores Core i7. Faremos um breve detalhamento sobre sua tecnologia e suas característica e capacidades.
Introdução ao processador Intel Core i7
	
	
	
	
	
	
	
	
	
	
	
	
O chip Intel Core i7 é o mais novo rebento de uma família de “gênios” da computação. O primeiro da linhagem foi o 4004, chip lançado em 1971 e usado numa das primeiras calculadoras eletrônicas. O 8008, de 1974, estrearam num computador. Depois veio o Intel 8080, empregado num PC da IBM em 1982. Ainda nos “sobrenomes” de números, houve o 80286, depois o 80386 e o 80486. O “sobrenome” do Core i7 é Nehalem (o nome dado à arquitetura do chip).
Apesar de serem todos da família Intel, os chips são muito diferentes de uma geração para outra. A capacidade de processamento do Core i7 é tremendamente maior. Enquanto o 8080 tinha 6.000 transistores, o Core i7 tem 731milhões deles.
Em relação aos chips atuais, o Core i7 tem a vantagem de suportar três canais de memória. Isso gera um ganho de desempenho de 50% em relação à arquitetura com dois canais. 
Cada núcleo de um i7 pode cuidar de duas tarefas (threads) ao mesmo tempo. Como ele tem quatro núcleos, o sistema operacional pensa que está trabalhando com oito núcleos.
Vamos explicar como funciona a arquitetura Nehalem, que permite ao Core i7 ter tanta capacidade de processamento. 
A arquitetura Nehalem
A arquitetura Nehalem, a base da família de processadores Core i7, é considerada pela Intel um dos maiores avanços dos últimos anos e faz parte da filosofia “tick-tock” da fabricante. Explicando: o “tick” foi a mudança do processo de fabricação de 65nm (nanômetros) para 45nm. A primeira família dessa geração foi chamada de Penryn. O “tock” é a Nehalem – o redesenho interno do chip. O próximo “tick” é uma nova redução no tamanho dos transistores, que terão 32nm. 
Mas o que a torna tão especial, a ponto de arrancar suspiros dos apaixonados por tecnologia e até dos usuários mais fanáticos por desempenho?
	
Divulgação © Intel
Processador Intel Core i7
	
Antes de mergulhar nesse mar de bits, é importante entender um conceito fundamental. Quase todo processador pré-Nehalem possui um sistema de comunicação chamado FSB (Front Side Bus), ou barramento. Ele trabalha em uma frequência, medida em Mhz. Quando a CPU faz um pedido à memória via FSB, primeiro a requisição chega ao chamado North Bridge, um controlador próximo ao chip que faz a tradução do pedido para a memória. Depois o Bridge devolve a resposta, também decifrada, para o processador. Esse processo leva tempo (depende da freqüência de operação do FSB) e tornou-se um gargalo com a evolução das memórias, cada vez mais velozes.
Um dos maiores pulos do gato da nova arquitetura foi trazer o controlador da memória, o tal North Bridge, para dentro do chip. A concorrente AMD já havia feito isso em sua linha A64, mas cometeu alguns erros de design fatais. A Intel aprimorou o conceito e aposentou o FSB. Os Core i7 têm dois barramentos: um para ligar o processador à RAM e outro de entrada/saída, que faz a comunicação com os outros dispositivos do micro. Assim, o desempenho melhora por dois motivos. Primeiro, porque agora há caminhos independentes para o tráfego de dados. Depois, porque o acesso à memória ficou mais veloz, pois o chip não é mais obrigado a conversar antes com um controlador externo, o North Bridge.
O novo barramento se chama QuickPath Interconnect (QPI) e oferece dois caminhos (transmissão e recepção dos dados) para o chip se comunicar com outros dispositivos ou processadores – no caso de servidores com mais de um i7 instalado. 
O controlador integrado suporta três canais de memória. Cada canal pode ser formado por um, dois ou três pentes de memória RAM no padrão DDR3, o único aceito. Em resumo, isso gera um ganho de desempenho de 50% em relação à arquitetura com dois canais (dois ou quatro pentes), como é hoje. A expectativa é que muitas placas-mãe para i7 tenham seis bancos (slots), ou seja, três canais. Com isso, um consumidor extremamente exigente poderá ter uma máquina com incríveis 12GB de memória (6 pentes de 2GB). O ideal é instalar três ou seis pentes no PC, para gerar o máximo de desempenho.
O desenho interno do processador também mudou. Os Core i7 são “single die” (blocos únicos). Dentro de cada bloco, ficam os quatro núcleos (cores), o controlador da RAM e a cache – uma memória de altíssimo desempenho junto aos núcleos. Há três níveis de cache. O L1 é separado para cada núcleo – 32KB para dados e 32KB para instruções, ou 256KB ao todo (64KB vezes 4). No nível seguinte (L2), há mais 256KB por núcleo, totalizando 1MB (1024KB). Por fim, o L3 de 8MB é compartilhado por todos.
Essa hierarquia de memórias cache serve para agilizar o trabalho dos núcleos. As instruções mais urgentes vão para a L1. A L3 serve como uma cópia de segurança da L2, replicando os dados desta. Assim, se um núcleo precisa da mesma informação que outro, ele busca nessa biblioteca pública em vez de perder tempo fuçando na prateleira particular de outro core.Outro recurso interessante é o “Turbo Boost”. Ele permite que cada núcleo ativo aumente sua freqüência de operação, em incrementos de 133Mhz por vez, até atingir o limite térmico e elétrico determinado. Isso funciona tanto para colocar o processador a todo vapor, como para ele economizar energia quando não há muito trabalho. A idéia é que as versões do i7 para notebooks sejam capazes de zerar o consumo dos núcleos desocupados.
Cada núcleo de um i7 pode cuidar de duas tarefas (threads) ao mesmo tempo. Assim, o sistema operacional pensa que está trabalhando com oito núcleos. Isso é especialmente útil com aplicativos desenvolvidos para dividir as tarefas entre eles. 
Por fim, mudanças no modo como os núcleos tratam as instruções (as ordens dos aplicativos) permitem que os Core i7 processem, na maior parte do tempo, cinco comandos por ciclo, em vez de quatro dos antecessores.
CONCLUSÃO
A quantidade limitada de instruções do Neander exige que se utilizem muito mais linhas de comando para a execução de programas, requerendo também uma quantidade maior de acessos (leituras e escritas). Isso faz com que processamentos no Neander demorem muito mais que em outros processadores comerciais, o que praticamente inviabiliza processamentos mais elaborados. Este é o motivo do Neander não ser utilizado comercialmente. Porém, devido a ele atender a todas as funções básicas para o “entendimento” de um processamento, a ser gratuito e a ser de fácil acesso, ele é bastante utilizado no mundo acadêmico.
Referências
http://www.intel.com/portugues/products/processor/corei7/index.htm
endereço
memória
operando
instrução
 
endereço
memória
operando
instrução
_998085899.doc
endereço
memória
operando
instrução
_998086794.doc
endereço
memória
operando
instrução
 
endereço
 
memória
 
operando
 
instrução
 
endereço
 
endereço
memória
operando
instrução
endereço
operando
memória
instrução
 
operando
memória
instrução
_998086233.doc
operando
memória
instrução
_998086747.doc
operando
memória
instrução
deslocamento
memória
operando
instrução
endereço
Reg. X
+
 
deslocamento
memória
operando
instrução
endereço
Reg. X
+
_998086944.doc
deslocamento
memória
operando
instrução
endereço
Reg. X
+
endereço
memória
operando
instrução
endereço
memória
operando
instrução
endereço
memória
operando
endereço
memória
operando