SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
Simulador Funcional
Johnnatan Messias P. Afonso 1
, Jeferson Lopes Dias Moreli2
1
Departamento de Computac¸˜ao - Instituto de Ciˆencias Exatas e Biol´ogicas
Universidade Federal de Ouro Preto (UFOP) CEP: 35400-000 – Ouro Preto – MG – Brasil
johnnatan20@gmail.com, jefersonvni@hotmail.com
Resumo. Este trabalho consiste na criac¸˜ao de um simulador funcional onde
cada instruc¸˜ao executada demora quatro ciclos para completar. Estes ciclos
s˜ao denominados: IF, ID, EX/MEM e WB.
• IF (instruction fetch): a pr´oxima instruc¸˜ao a ser executada ´e buscada
na mem´oria e armazenada no registrador de instruc¸˜oes (IR);
• ID (instruction decode): a instruc¸˜ao sendo executada ´e decodificada e
os operandos s˜ao buscados no banco de registradores;
• EX/MEM (execute and memory): a instruc¸˜ao ´e executada e as condic¸˜oes
dos resultados s˜ao ”setados” (condition codes) para operac¸˜oes de ALU.
Loads, stores, o c´alculo do enderec¸o efetivo e a resoluc¸˜ao de branches
s˜ao feitos tamb´em nesse ciclo;
• WB (write back): os resultados s˜ao escritos no banco de registradores.
Considere que o termino do load acontece neste passo.
O processador tem 8 registradores de uso geral de 16 bits de largura. Considere
as letras A, B,C, ..., H. A mem´oria ´e divida em dois vetores. Um contem os
dados, o outro o c´odigo de instruc¸˜oes de acesso `a mem´oria que salvam e buscam
os dados na mem´oria de dados (memDados)
Uma descric¸˜ao funcional divide o processador nos blocos que existir˜ao em uma
implementac¸˜ao real. Portanto, o processador dever´a conter quatro rotinas prin-
cipais, uma para cada etapa do ciclo a ser executado em cada instruc¸˜ao.
Instruc¸˜oes
Figure 1. Instruc¸ ˜oes
Considere que em LABEL se encontra o n´umero linha da mem´oria de c´odigo.
1. Decis˜oes de implementac¸˜ao
Para a implementac¸˜ao desse trabalho foram tomadas v´arias decis˜oes para obter maior
clareza do c´odigo como, por exemplo, a func¸˜ao posicao. Atrav´es dessa func¸˜ao obtemos
a posic¸˜ao do vetor do banco de registradores que queremos acessar. Ainda, na estrutura
TInstucao utilizamos uma flag para que possamos saber em qual registrador armazenar
o resultado de sa´ıda. Os Define’s no arquivo STDAFX.h facilitou a implementac¸˜ao
do trabalho, uma vez que os label’s ficaram mais pr´oximos do objetivo. Com relac¸˜ao
`a alocac¸˜ao da mem´oria de c´odigo fizemos em O(n). Na sec¸˜ao 7.6 isto ´e explicado e
ilustrado.
2. Tutorial de como usar o simulador
Para este simulador deve-se criar um arquivo instrucao.txt contendo as instruc¸˜oes a
serem executadas pelo programa, vale lembrar que o simulador cont´em 8 registradores
e 8 posic¸˜oes na mem´oria de dados. Ap´os o termino das instruc¸˜oes o usu´ario dever´a in-
cluir a instruc¸˜ao HALT para que o simulador encerre a execuc¸˜ao.
Caso haja algum erro nas etapas das instruc¸˜oes o usu´ario ser´a alertado com uma
mensagem na tela.
O resultado ser´a gerado e impresso na tela do usu´ario e ainda gravado no arquivo
saida.txt.
Todas as instruc¸˜oes que o simulador executa est´a na Figura 1.
Requisitor: Como esse simulador foi desenvolvido no Microsoft Visual Studio
2010 Ultimate pode ser que o usu´ario tenha que ter o .NetFramework − 4 para executar
o programa.
Para exemplo de entrada de instruc¸˜ao vide Figura 2
Figure 2. Exemplo de Entrada de Instruc¸ ˜oes
3. Desenho esquem´atico da implementac¸˜ao
Para esse simulador vide datapath na figura 3
Figure 3. Datapath
4. Estruturas utilizadas para representac¸˜ao do hardware
• Mem´oria: para a representac¸˜ao das mem´orias de c´odigo e dados utilizamos a es-
trutura TMem. Vide Figura 4
Figure 4. Representac¸ ˜ao da Mem´oria
• Processador: a representac¸˜ao do processador utilizamos a estrutura TInstrucao.
Vide Figura 5
Figure 5. Representac¸ ˜ao do Processador
5. Descric¸˜ao dos m´odulos utilizados
S˜ao eles:
• Banco de Registradores: Representado com um vetor de inteiro com 8 posic¸˜oes,
isto ´e, registradores de A,B,...H.
• opCode: Necess´ario para saber qual o tipo da instruc¸˜ao a ser eexecutada, ex.:
SOMA, SUB, CARR, ARMA, etc.
• flag: Vari´avel utilizada para saber a posic¸˜ao registrador principal ou da mem´oria de
dados, ou seja, em qual registrador ou mem´oria de dados o dado ser´a armazenado.
• offSet: Utilizada para as instruc¸˜oes ARMA e SALV, no c´alculo do enderec¸o da
mem´oria de dados.
Vide Figura 6
Figure 6. M´odulos
6. Testes
Os testes gerados teve como base a identificac¸˜ao de erro que cada func¸˜ao poderia gerar.
• SOMA: Vide Figuras 9, 10
• SUB: Vide Figuras 9, 10
• SLT: Vide Figuras 7, 8
• CARR: Vide Figuras 7, 8
• SALV: Vide Figuras 7, 8
• DSIG: Vide Figuras 7, 8
• SALT: Vide Figuras 7, 8, 10
• ARMA: Vide Figuras 7, 8, 9, 10
• HALT: Vide Figuras 7, 8, 9, 10
• Outros Testes: Para a realizac¸˜ao de testes mais complexos criamos um conjunto
de instruc¸˜oes que utiliza as func¸˜oes acima:
Figure 7. Teste 1
Figure 8. Teste 2
Figure 9. Teste 3
Figure 10. Teste 4
Testes de programas fornecidos na especificac¸˜ao do trabalho:
• Teste a: Teste=2*aux Figura 11
Figure 11. Teste a
• Teste b: while(i==0) i++ Figura 12
Figure 12. Teste b
• Teste c: if(j¡0) m=j-i Figura 13
Figure 13. Teste c
• Teste d: O programa de busca compara em SLT o elemento do registrador H com
o elemento do registrador F, verificando se o conte´udo de F ´e menor que o de H,
caso isso seja verdade, o registrador A recebe 0, para uma futura comparac¸˜ao em
DSIG, com o registrador G que esta com o valor 1, como essa comparac¸˜ao n˜ao ´e
verdadeira, ele executa SALV que salva o valor de F, na memDados no enderec¸o
(OFFSet, que nesse caso ´e 0, + G). Figura 14
Figure 14. Teste d
7. Listagem do c´odigo fonte do simulador
Vide abaixo o c´odigo fonte do programa bem como um resumo de cada func¸˜ao:
7.1. STDAFX.h
Todas as bibliotecas e os DEFINE utilizados para a confecc¸˜ao do trabalho encontram-se
no arquivo STDAFX.h
# include <s t d i o . h>
# include <t c h a r . h>
# include ” TInstrucao . h”
5 # include <s t d l i b . h>
# include <s t r i n g . h>
# define l i n h a 100
# define coluna 30
10
# define TRUE 1
# define FALSE 0
# define IF 0
15 # define ID 1
# define EX 2
# define WB 3
# define FIM 4
20 # define opSOMA 0
# define opSUB 1
# define opSLT 2
# define opCARR 3
# define opSALV 4
25 # define opDSIG 5
# define opSALT 6
# define opARMA 7
# define opHALT 8
30 # define SAIR −2
# define posA 0
# define posB 1
# define posC 2
35 # define posD 3
# define posE 4
# define posF 5
# define posG 6
# define posH 7
40
# define TipoR 0
# define TipoIncon 1
# define TipoCond 2
# define TipoLW 3
45 # define TipoSW 4
# define TipoHALT 5
Listing 1. STDAFX.h
7.2. Assinaturas e Estrutura
Para este trabalho pr´atico utilizei duas estruturas:
• TInstrucao que contem as vari´aveis opCode das instruc¸˜oes, o registrador Reg[8],
offSet e uma flag para saber em qual registrador dever´a ser armazenada o dado.
• TMem: Estrutura da mem´oria do simulador, cont´em a Mem´oria de Dados
memDados e a Mem´oria de C´odigo memCod.
No c´odigo 2 as estruturas e as assinaturas das func¸˜oes:
# include ” s t d a f x . h”
typedef s t r u c t {
5 i n t opCode ;
i n t o f f S e t ;
i n t Reg [ 8 ] ;
i n t f l a g ;
10 } T I n s t r u c a o ;
typedef s t r u c t {
i n t ∗ memDados ;
char ∗∗ memCod ;
15 }TMem;
i n t posicao ( char∗ tok ) ;
i n t startMem (TMem∗ mem) ;
20
void s t a r t V a r i a v e i s ( T I n s t r u c a o ∗ i n s t ) ;
i n t geraMemCod (TMem∗ mem) ;
25 void b u s c a I n s t r u c a o ( char ∗∗ memCod , char∗ RI , i n t ∗ PC) ;
i n t d e c o d i f i c a I n s t r u c a o ( T I n s t r u c a o ∗ i n s t , char∗ RI , i n t ∗ temp ) ;
i n t e x e c u t a I n s t r u c a o ( i n t ∗ temp , i n t ∗ opCode , i n t ∗ s a i d a ) ;
30
i n t f i n a l I n s t r u c a o ( T I n s t r u c a o ∗ i n s t , i n t ∗ saida , i n t ∗ PC , i n t ∗ memDados
) ;
void imprimir ( i n t ∗ Reg , i n t ∗ memDados , i n t ∗ aux , char∗ RI , FILE∗ arqS ) ;
Listing 2. TInstrucao.h
7.3. Func¸˜ao Posicao
Essa func¸˜ao ´e respons´avel por retornar o valor em inteiro da posic¸˜ao de um registrador.
Obs.: Recebe um caractere e retorna a posic¸˜ao. Ex.: Para acessar o registrador A a posic¸˜ao
do vetor de registradores a ser acessada ser´a Reg[posic¸˜ao(’A’)] .
i n t posicao ( char∗ tok ) {
i n t pos ;
switch (∗ tok ) {
5 case ’A ’ :
pos = posA ;
break ;
case ’B ’ :
pos = posB ;
10 break ;
case ’C’ :
pos = posC ;
break ;
case ’D’ :
15 pos = posD ;
break ;
case ’E ’ :
pos = posE ;
break ;
20 case ’F ’ :
pos = posF ;
break ;
case ’G’ :
pos = posG ;
25 break ;
case ’H’ :
pos = posH ;
break ;
}
30 return pos ;
}
Listing 3. Func¸ ˜ao Posicao
7.4. Func¸˜ao startMem
Func¸˜ao respons´avel por alocar a estrutura de mem´oria.
Obs.: Para melhorar, mesmo que pouco, o desempenho do c´odigo aloquei a mem-
Cod com ordem de complexidade O (n)
i n t startMem (TMem∗ mem) {
i n t i ;
/ / n de l i n h a s
mem−>memCod = ( char ∗∗) c a l l o c ( linha , s i z e o f ( char ∗) ) ;
5
i f (mem−>memCod == NULL) {
p r i n t f ( ”Erro ao alocar a memCodn” ) ;
return FALSE ;
}
10 / / n l i n h a s ∗ n colunas
mem−>memCod[ 0 ] = ( char ∗) c a l l o c ( l i n h a ∗ coluna , s i z e o f ( char ) ) ;
i f (mem−>memCod[ 0 ] == NULL) {
p r i n t f ( ”Erro ao alocar a memCodn” ) ;
15 return FALSE ;
}
/ / Redireciona os p o n t e i r o s
for ( i =1; i<l i n h a ; i ++){
mem−>memCod[ i ] = &(mem−>memCod [ 0 ] [ i ∗ coluna ] ) ;
20 }
mem−>memDados = ( i n t ∗) c a l l o c (8 , s i z e o f ( i n t ) ) ;
i f (mem−>memDados == NULL) {
25 p r i n t f ( ”Erro ao alocar a memDadosn” ) ;
return FALSE ;
}
return TRUE;
}
Listing 4. Func¸ ˜ao startMem
A figura 15 ilustra como os ponteiros da memCod foram organizados:
Figure 15. Alocac¸ ˜ao Matriz
7.5. Func¸˜ao startVariaveis
Respons´avel por inicializar as vari´aveis da estrutura TInstrucao
void s t a r t V a r i a v e i s ( T I n s t r u c a o ∗ i n s t ) {
i n t i ;
i n s t −>o f f S e t = −1;
i n s t −>opCode = −1;
5 for ( i =0; i <8; i ++)
i n s t −>Reg [ i ] = 0;
i n s t −>f l a g = −1;
}
Listing 5. Func¸ ˜ao startVariaveis
7.6. Func¸˜ao geraMemCod
Esta func¸˜ao inicializa a memCod, armazenando em cada posic¸˜ao uma instruc¸˜ao obtida
atrav´es da leitura do arquivo instrucao.txt
i n t geraMemCod (TMem∗ mem) {
FILE ∗ arqE = fopen ( ” i n s t r u c a o . t x t ” ,”r” ) ;
char ∗ tok , ∗ buf ;
i n t tam = 0;
5 buf = ( char ∗) malloc (31∗ s i z e o f ( char ) ) ;
i f ( arqE == NULL) {
p r i n t f ( ”Erro ao a b r i r o arquivo de entrada n” ) ;
return FALSE ;
}
10 e l s e {
i f ( ! startMem (mem) ) {
p r i n t f ( ”Erro ao i n i c i a r a memn” ) ;
return FALSE ;
15 }
while ( ! f e o f ( arqE ) ) {
buf = f g e t s ( buf , BUFSIZ , arqE ) ;
i f ( buf == NULL)
20 continue ;
s t r c p y (mem−>memCod[ tam ++] , buf ) ;
}
}
f r e e ( buf ) ;
25 f c l o s e ( arqE ) ;
return tam ;
}
Listing 6. Func¸ ˜ao geraMemCod
7.7. Func¸˜ao buscaInstrucao
Busca a pr´oxima instruc¸˜ao, incrementando o PC em uma unidade.
void b u s c a I n s t r u c a o ( char ∗∗ memCod , char∗ RI , i n t ∗ PC) {
s t r c p y ( RI , memCod[ ( ∗ PC) ] ) ;
(∗PC) ++;
}
Listing 7. Func¸ ˜ao buscaInstrucao
7.8. Func¸˜ao decodificaInstrucao
Uma das principais func¸˜ao deste projeto ´e a func¸˜ao de decodificac¸˜ao, que identifica a
instruc¸˜ao executada, buscando os respectivos operandos no banco de registradores.
Vide c´odigo 8:
i n t d e c o d i f i c a I n s t r u c a o ( T I n s t r u c a o ∗ i n s t , char∗ RI , i n t ∗ temp ) {
char∗ tok , ∗RIAux ;
i n t tipo , ∗aux , i ;
RIAux = ( char ∗) malloc ( coluna ∗ s i z e o f ( char ) ) ;
5 s t r c p y ( RIAux , RI ) ;
i n s t −>opCode = −1;
i n s t −>f l a g = −1;
tok = s t r t o k ( RIAux , ” ” ) ;
i f ( strcmp ( tok , ”SOMA” ) ==0){
10 i n s t −>opCode = opSOMA;
t i p o = TipoR ;
}
e l s e i f ( strcmp ( tok , ”SUB” ) ==0){
i n s t −>opCode = opSUB ;
15 t i p o = TipoR ;
}
e l s e i f ( strcmp ( tok , ”SLT” ) ==0){
i n s t −>opCode = opSLT ;
t i p o = TipoR ;
20 }
e l s e i f ( strcmp ( tok , ”CARR” ) ==0){
i n s t −>opCode = opCARR;
t i p o = TipoLW ;
}
25 e l s e i f ( strcmp ( tok , ”SALV” ) ==0){
i n s t −>opCode = opSALV ;
t i p o = TipoSW ;
}
e l s e i f ( strcmp ( tok , ”DSIG” ) ==0){
30 i n s t −>opCode = opDSIG ;
t i p o = TipoCond ;
}
e l s e i f ( strcmp ( tok , ”SALT” ) ==0){
i n s t −>opCode = opSALT ;
35 t i p o = TipoIncon ;
}
e l s e i f ( strcmp ( tok , ”ARMA” ) ==0){
i n s t −>opCode = opARMA;
t i p o = TipoLW ;
40 }
e l s e i f ( s t r s t r ( tok , ”HALT” ) ) {
i n s t −>opCode = opHALT ;
t i p o = TipoHALT ;
}
45 e l s e {
p r i n t f ( ”Erro : opCode nao encontrado nn” ) ;
return FALSE ;
}
switch ( t i p o ) {
50 case TipoR :
{
tok = s t r t o k (NULL, ” ,” ) ;
i n s t −>f l a g = posicao (& tok [ 0 ] ) ; / / R1
tok = s t r t o k (NULL, ” ,” ) ;
55 temp [ 0 ] = i n s t −>Reg [ posicao (& tok [ 0 ] ) ] ; / / R2
tok = s t r t o k (NULL, ” ,” ) ;
temp [ 1 ] = i n s t −>Reg [ posicao (& tok [ 0 ] ) ] ; / / R3
break ;
}
60 case TipoIncon :
{
tok = s t r t o k (NULL, ” ,” ) ;
temp [ 0 ] = a t o i ( tok ) ; / / LABEL
break ;
65 }
case TipoCond :
{
tok = s t r t o k (NULL, ” ,” ) ;
temp [ 0 ] = i n s t −>Reg [ posicao (& tok [ 0 ] ) ] ; / / R1
70 tok = s t r t o k (NULL, ” ,” ) ;
temp [ 1 ] = i n s t −>Reg [ posicao (& tok [ 0 ] ) ] ; / / R2
tok = s t r t o k (NULL, ” ,” ) ;
temp [ 2 ] = a t o i ( tok ) ; / / LABEL
break ;
75 }
case TipoLW :
{
i f ( i n s t −>opCode == opARMA) {
tok = s t r t o k (NULL, ” ,” ) ;
80 i n s t −>f l a g = posicao (& tok [ 0 ] ) ; / / R1
tok = s t r t o k (NULL, ” ,” ) ;
temp [ 0 ] = a t o i ( tok ) ; / /NUMBER
}
e l s e {
85 / / CARR
tok = s t r t o k (NULL, ” ,” ) ;
i n s t −>f l a g = posicao (& tok [ 0 ] ) ; / / R1
tok = s t r t o k (NULL, ” ( ” ) ;
temp [ 0 ] = a t o i ( tok ) ; / / OFFSET
90 tok = s t r t o k (NULL, ” ) ” ) ;
temp [ 1 ] = i n s t −>Reg [ posicao (& tok [ 0 ] ) ] ; / / R2
}
break ;
}
95 case TipoSW :
{
/ / memDados[OFFSET + R2] = R1
tok = s t r t o k (NULL, ” ,” ) ;
i n s t −>f l a g = posicao (& tok [ 0 ] ) ; / / Posic¸ ˜ao do R1
100 tok = s t r t o k (NULL, ” ( ” ) ;
temp [ 0 ] = a t o i ( tok ) ; / / OFFSET
tok = s t r t o k (NULL, ” ) ” ) ;
temp [ 1 ] = i n s t −>Reg [ posicao (& tok [ 0 ] ) ] ; / / R2
break ;
105 }
case TipoHALT :
{
temp [ 0 ] = SAIR ;
break ;
110 }
default :
p r i n t f ( ”Erro na d e c o d i f i c a c a o n” ) ;
return FALSE ;
break ;
115 }
f r e e ( RIAux ) ;
return TRUE;
}
Listing 8. Func¸ ˜ao decodificaInstrucao
7.9. Func¸˜ao executaInstrucao
Essa func¸˜ao recebe as vari´aveis tempor´arias e o opCode e executa a instruc¸˜ao, retornando
o resultado na vari´avel sa´ıda.
i n t e x e c u t a I n s t r u c a o ( i n t ∗ temp , i n t ∗ opCode , i n t ∗ s a i d a ) {
∗ s a i d a = −1;
switch (∗ opCode ) {
case opSOMA:
5 {
∗ s a i d a = temp [ 0 ] + temp [ 1 ] ;
break ;
}
case opSUB :
10 {
∗ s a i d a = temp [ 0 ] − temp [ 1 ] ;
break ;
}
case opSLT :
15 {
i f ( temp [0] < temp [ 1 ] )
∗ s a i d a = 0;
e l s e
∗ s a i d a = 1;
20 break ;
}
case opCARR:
{
∗ s a i d a = temp [ 0 ] + temp [ 1 ] ;
25 break ;
}
case opSALV :
{
∗ s a i d a = temp [ 0 ] + temp [ 1 ] ;
30 break ;
}
case opDSIG :
{
i f ( temp [ 0 ] == temp [ 1 ] )
35 ∗ s a i d a = temp [ 2 ] ;
e l s e
∗ s a i d a = −1;
break ;
}
40 case opSALT :
{
∗ s a i d a = temp [ 0 ] ;
break ;
}
45 case opARMA:
{
∗ s a i d a = temp [ 0 ] ;
break ;
}
50 case opHALT :
{
∗ s a i d a = temp [ 0 ] ; / / −2 = s a i r do programa
break ;
}
55 default :
{
p r i n t f ( ”Erro ao Executar n” ) ;
return FALSE ;
}
60 }
return TRUE;
}
Listing 9. Func¸ ˜ao executaInstrucao
7.10. Func¸˜ao finalInstrucao
Ap´os obter a pr´oxima instruc¸˜ao, identific´a-la e execut´a-la, nos resta escrever no banco de
registradores o resultado obtido das etapas anteriores.
i n t f i n a l I n s t r u c a o ( T I n s t r u c a o ∗ i n s t , i n t ∗ saida , i n t ∗ PC , i n t ∗ memDados
) {
switch ( i n s t −>opCode ) {
case opSOMA:
5 {
i n s t −>Reg [ i n s t −>f l a g ] = ∗ s a i d a ;
break ;
}
case opSUB :
10 {
i n s t −>Reg [ i n s t −>f l a g ] = ∗ s a i d a ;
break ;
}
case opSLT :
15 {
i n s t −>Reg [ i n s t −>f l a g ] = ∗ s a i d a ;
break ;
}
case opDSIG :
20 {
i f (∗ s a i d a != −1)
∗PC = ∗ s a i d a ;
break ;
}
25 case opARMA:
{
i n s t −>Reg [ i n s t −>f l a g ] = ∗ s a i d a ;
break ;
}
30 case opSALT :
{
∗PC = ∗ s a i d a ;
break ;
}
35 case opSALV :
{
memDados[∗ s a i d a ] = i n s t −>Reg [ i n s t −>f l a g ] ; / / memDados[OFFSET + R2
] = R1
break ;
}
40 case opCARR:
{
i n s t −>Reg [ i n s t −>f l a g ] = memDados[∗ s a i d a ] ; / / R1 = memDados[OFFSET
+ R2]
break ;
}
45 case opHALT :
{
return FALSE ;
}
}
50 return TRUE;
}
Listing 10. Func¸ ˜ao finalInstrucao
7.11. Func¸˜ao imprimir
A func¸˜ao imprimir imprime na tela e salva no arquivo.txt os status de cada etapa do
simulador.
void imprimir ( i n t ∗ Reg , i n t ∗ memDados , i n t ∗ aux , char∗ RI , FILE∗ arqS ) {
i n t i ;
char∗ tok , ∗RIAux ;
RIAux = ( char ∗) malloc ( coluna ∗ s i z e o f ( char ) ) ;
5 s t r c p y ( RIAux , RI ) ;
tok = s t r t o k ( RIAux , ” ” ) ;
switch ( aux [ 0 ] ) {
case IF :
p r i n t f ( ” Ciclo IFnn” ) ;
10 p r i n t f ( ”REGISTRADORES Flags nn” ) ;
p r i n t f ( ”A= %dn” , Reg [ posA ] ) ;
p r i n t f ( ”B= %dn” , Reg [ posB ] ) ;
p r i n t f ( ”C= %dn” , Reg [ posC ] ) ;
p r i n t f ( ”D= %dn” , Reg [ posD ] ) ;
15 p r i n t f ( ”E= %dn” , Reg [ posE ] ) ;
p r i n t f ( ”F= %dn” , Reg [ posF ] ) ;
p r i n t f ( ”G= %dn” , Reg [ posG ] ) ;
p r i n t f ( ”H= %dnn” , Reg [ posH ] ) ;
20 p r i n t f ( ”PC= %dn” , aux [ 1 ] ) ;
p r i n t f ( ”IR = %s n” , RI ) ;
p r i n t f ( ” I n s t r u c a o i d e n t i f i c a d a = ?n” ) ;
p r i n t f ( ” I n s t r u c a o executada = ?n” ) ;
25
p r i n t f ( ”−−−−−−−−−−−−−−−−−−nnn” ) ;
f p r i n t f ( arqS , ” Ciclo IFnn” ) ;
f p r i n t f ( arqS , ”REGISTRADORES Flags nn” ) ;
30 f p r i n t f ( arqS , ”A= %dn” , Reg [ posA ] ) ;
f p r i n t f ( arqS , ”B= %dn” , Reg [ posB ] ) ;
f p r i n t f ( arqS , ”C= %dn” , Reg [ posC ] ) ;
f p r i n t f ( arqS , ”D= %dn” , Reg [ posD ] ) ;
f p r i n t f ( arqS , ”E= %dn” , Reg [ posE ] ) ;
35 f p r i n t f ( arqS , ”F= %dn” , Reg [ posF ] ) ;
f p r i n t f ( arqS , ”G= %dn” , Reg [ posG ] ) ;
f p r i n t f ( arqS , ”H= %dnn” , Reg [ posH ] ) ;
f p r i n t f ( arqS , ”PC= %dn” , aux [ 1 ] ) ;
40
f p r i n t f ( arqS , ”IR = %s n” , RI ) ;
f p r i n t f ( arqS , ” I n s t r u c a o i d e n t i f i c a d a = ?n” ) ;
f p r i n t f ( arqS , ” I n s t r u c a o executada = ?n” ) ;
45 f p r i n t f ( arqS , ”−−−−−−−−−−−−−−−−−−nnn” ) ;
break ;
case ID :
p r i n t f ( ” Ciclo IDnn” ) ;
p r i n t f ( ”REGISTRADORES Flags nn” ) ;
50 p r i n t f ( ”A= %dn” , Reg [ posA ] ) ;
p r i n t f ( ”B= %dn” , Reg [ posB ] ) ;
p r i n t f ( ”C= %dn” , Reg [ posC ] ) ;
p r i n t f ( ”D= %dn” , Reg [ posD ] ) ;
p r i n t f ( ”E= %dn” , Reg [ posE ] ) ;
55 p r i n t f ( ”F= %dn” , Reg [ posF ] ) ;
p r i n t f ( ”G= %dn” , Reg [ posG ] ) ;
p r i n t f ( ”H= %dnn” , Reg [ posH ] ) ;
p r i n t f ( ”PC= %dn” , aux [ 1 ] ) ;
60
p r i n t f ( ”IR = %s n” , RI ) ;
p r i n t f ( ” I n s t r u c a o i d e n t i f i c a d a = %s n” , tok ) ;
p r i n t f ( ” I n s t r u c a o executada = ?n” ) ;
65 p r i n t f ( ”−−−−−−−−−−−−−−−−−−nnn” ) ;
f p r i n t f ( arqS , ” Ciclo IDnn” ) ;
f p r i n t f ( arqS , ”REGISTRADORES Flags nn” ) ;
f p r i n t f ( arqS , ”A= %dn” , Reg [ posA ] ) ;
70 f p r i n t f ( arqS , ”B= %dn” , Reg [ posB ] ) ;
f p r i n t f ( arqS , ”C= %dn” , Reg [ posC ] ) ;
f p r i n t f ( arqS , ”D= %dn” , Reg [ posD ] ) ;
f p r i n t f ( arqS , ”E= %dn” , Reg [ posE ] ) ;
f p r i n t f ( arqS , ”F= %dn” , Reg [ posF ] ) ;
75 f p r i n t f ( arqS , ”G= %dn” , Reg [ posG ] ) ;
f p r i n t f ( arqS , ”H= %dnn” , Reg [ posH ] ) ;
f p r i n t f ( arqS , ”PC= %dn” , aux [ 1 ] ) ;
80 f p r i n t f ( arqS , ”IR = %s n” , RI ) ;
f p r i n t f ( arqS , ” I n s t r u c a o i d e n t i f i c a d a = %s n” , tok ) ;
f p r i n t f ( arqS , ” I n s t r u c a o executada = ?n” ) ;
f p r i n t f ( arqS , ”−−−−−−−−−−−−−−−−−−nnn” ) ;
85 break ;
case EX:
p r i n t f ( ” Ciclo EXnn” ) ;
p r i n t f ( ”REGISTRADORES Flags nn” ) ;
p r i n t f ( ”A= %dn” , Reg [ posA ] ) ;
90 p r i n t f ( ”B= %dn” , Reg [ posB ] ) ;
p r i n t f ( ”C= %dn” , Reg [ posC ] ) ;
p r i n t f ( ”D= %dn” , Reg [ posD ] ) ;
p r i n t f ( ”E= %dn” , Reg [ posE ] ) ;
p r i n t f ( ”F= %dn” , Reg [ posF ] ) ;
95 p r i n t f ( ”G= %dn” , Reg [ posG ] ) ;
p r i n t f ( ”H= %dnn” , Reg [ posH ] ) ;
p r i n t f ( ”PC= %dn” , aux [ 1 ] ) ;
100 p r i n t f ( ”IR = %s n” , RI ) ;
p r i n t f ( ” I n s t r u c a o i d e n t i f i c a d a = %s n” , tok ) ;
p r i n t f ( ” I n s t r u c a o executada = %s n” , tok ) ;
p r i n t f ( ”−−−−−−−−−−−−−−−−−−nnn” ) ;
105
f p r i n t f ( arqS , ” Ciclo EXnn” ) ;
f p r i n t f ( arqS , ”REGISTRADORES Flags nn” ) ;
f p r i n t f ( arqS , ”A= %dn” , Reg [ posA ] ) ;
f p r i n t f ( arqS , ”B= %dn” , Reg [ posB ] ) ;
110 f p r i n t f ( arqS , ”C= %dn” , Reg [ posC ] ) ;
f p r i n t f ( arqS , ”D= %dn” , Reg [ posD ] ) ;
f p r i n t f ( arqS , ”E= %dn” , Reg [ posE ] ) ;
f p r i n t f ( arqS , ”F= %dn” , Reg [ posF ] ) ;
f p r i n t f ( arqS , ”G= %dn” , Reg [ posG ] ) ;
115 f p r i n t f ( arqS , ”H= %dnn” , Reg [ posH ] ) ;
f p r i n t f ( arqS , ”PC= %dn” , aux [ 1 ] ) ;
f p r i n t f ( arqS , ”IR = %s n” , RI ) ;
120 f p r i n t f ( arqS , ” I n s t r u c a o i d e n t i f i c a d a = %s n” , tok ) ;
f p r i n t f ( arqS , ” I n s t r u c a o executada = %s n” , tok ) ;
f p r i n t f ( arqS , ”−−−−−−−−−−−−−−−−−−nnn” ) ;
break ;
125 case WB:
p r i n t f ( ” Ciclo WBnn” ) ;
p r i n t f ( ”REGISTRADORES Flags nn” ) ;
p r i n t f ( ”A= %dn” , Reg [ posA ] ) ;
p r i n t f ( ”B= %dn” , Reg [ posB ] ) ;
130 p r i n t f ( ”C= %dn” , Reg [ posC ] ) ;
p r i n t f ( ”D= %dn” , Reg [ posD ] ) ;
p r i n t f ( ”E= %dn” , Reg [ posE ] ) ;
p r i n t f ( ”F= %dn” , Reg [ posF ] ) ;
p r i n t f ( ”G= %dn” , Reg [ posG ] ) ;
135 p r i n t f ( ”H= %dnn” , Reg [ posH ] ) ;
p r i n t f ( ”PC= %dn” , aux [ 1 ] ) ;
p r i n t f ( ”IR = %s” , RI ) ;
140 p r i n t f ( ” I n s t r u c a o i d e n t i f i c a d a = %s n” , tok ) ;
p r i n t f ( ” I n s t r u c a o executada = %s n” , tok ) ;
p r i n t f ( ”−−−−−−−−−−−−−−−−−−nnn” ) ;
145 f p r i n t f ( arqS , ” Ciclo WBnn” ) ;
f p r i n t f ( arqS , ”REGISTRADORES Flags nn” ) ;
f p r i n t f ( arqS , ”A= %dn” , Reg [ posA ] ) ;
f p r i n t f ( arqS , ”B= %dn” , Reg [ posB ] ) ;
f p r i n t f ( arqS , ”C= %dn” , Reg [ posC ] ) ;
150 f p r i n t f ( arqS , ”D= %dn” , Reg [ posD ] ) ;
f p r i n t f ( arqS , ”E= %dn” , Reg [ posE ] ) ;
f p r i n t f ( arqS , ”F= %dn” , Reg [ posF ] ) ;
f p r i n t f ( arqS , ”G= %dn” , Reg [ posG ] ) ;
f p r i n t f ( arqS , ”H= %dnn” , Reg [ posH ] ) ;
155
f p r i n t f ( arqS , ”PC= %dn” , aux [ 1 ] ) ;
f p r i n t f ( arqS , ”IR = %s” , RI ) ;
f p r i n t f ( arqS , ” I n s t r u c a o i d e n t i f i c a d a = %s n” , tok ) ;
160 f p r i n t f ( arqS , ” I n s t r u c a o executada = %s n” , tok ) ;
f p r i n t f ( arqS , ”−−−−−−−−−−−−−−−−−−nnn” ) ;
break ;
case FIM :
165 p r i n t f ( ”FINAL DA EXECUCAO DA INSTRUCAO . CONTEUDO DA MEMORIA
DE DADOS: nn” ) ;
f p r i n t f ( arqS , ”FINAL DA EXECUCAO DA INSTRUCAO . CONTEUDO DA MEMORIA
DE DADOS: nn” ) ;
for ( i =0; i <8; i ++){
p r i n t f ( ”MEMDADOS[%d]= %dn” , i , memDados [ i ] ) ;
f p r i n t f ( arqS , ”MEMDADOS[%d]= %dn” , i , memDados [ i ] ) ;
170 }
p r i n t f ( ”−−−−−−−−−−−−−−−−−−nnn” ) ;
f p r i n t f ( arqS , ”−−−−−−−−−−−−−−−−−−nnn” ) ;
break ;
}
175 f r e e ( RIAux ) ;
}
Listing 11. Func¸ ˜ao imprimir
7.12. Func¸˜ao main
Func¸˜ao principal respos´avel por chamar as demais func¸˜oes para a execuc¸˜ao do programa.
# include ” s t d a f x . h”
i n t tmain ( i n t argc , TCHAR∗ argv [ ] )
{
TMem mem;
5 T I n s t r u c a o i n s t ;
char∗ RI ;
i n t tam , PC = 0 , ∗aux , ∗Reg , ∗temp , saida , f i n a l i z a r ; / / aux [0] = f l a g
da i n s t r u c¸ ˜a o
/ / aux [1] = PC
temp = ( i n t ∗) malloc (3∗ s i z e o f ( i n t ) ) ;
10 FILE ∗ arqS ;
arqS = fopen ( ” saida . t x t ” ,”w” ) ;
aux = ( i n t ∗) c a l l o c (3 , s i z e o f ( i n t ) ) ;
Reg = ( i n t ∗) c a l l o c (8 , s i z e o f ( i n t ) ) ;
RI = ( char ∗) c a l l o c ( coluna , s i z e o f ( char ) ) ;
15 temp = ( i n t ∗) malloc (3∗ s i z e o f ( i n t ) ) ;
f i n a l i z a r = 1;
s t a r t V a r i a v e i s (& i n s t ) ;
tam = geraMemCod(&mem) ;
while ( 1 ) {
20 b u s c a I n s t r u c a o (mem. memCod , RI ,&PC) ;
aux [ 0 ] = IF ; aux [ 1 ] = PC ;
imprimir ( i n s t . Reg ,mem. memDados , aux , RI , arqS ) ;
i f ( d e c o d i f i c a I n s t r u c a o (& i n s t , RI , temp ) ) {
aux [ 0 ] = ID ;
25 imprimir ( i n s t . Reg ,mem. memDados , aux , RI , arqS ) ;
}
e l s e
break ;
i f ( e x e c u t a I n s t r u c a o ( temp ,& i n s t . opCode ,& s a i d a ) ) {
30 aux [ 0 ] = EX;
imprimir ( i n s t . Reg ,mem. memDados , aux , RI , arqS ) ;
}
e l s e
break ;
35 i f ( ! f i n a l I n s t r u c a o (& i n s t ,& saida ,&PC ,mem. memDados ) ) {
aux [ 0 ] = WB;
imprimir ( i n s t . Reg ,mem. memDados , aux , RI , arqS ) ;
aux [ 0 ] = FIM ;
imprimir ( i n s t . Reg ,mem. memDados , aux , RI , arqS ) ;
40 break ;
}
e l s e {
aux [ 0 ] = WB;
imprimir ( i n s t . Reg ,mem. memDados , aux , RI , arqS ) ;
45 aux [ 0 ] = FIM ;
imprimir ( i n s t . Reg ,mem. memDados , aux , RI , arqS ) ;
}
}
p r i n t f ( ”%dn” , tam ) ;
50 f r e e ( temp ) ;
f r e e ( aux ) ;
f r e e ( Reg ) ;
f r e e ( RI ) ;
f c l o s e ( arqS ) ;
55 system ( ”pause” ) ;
return 0;
}
Listing 12. Func¸ ˜ao main

Contenu connexe

Tendances

Tutorial aed iii 008 - algoritmo de ordenação heapsort
Tutorial aed iii   008 - algoritmo de ordenação heapsortTutorial aed iii   008 - algoritmo de ordenação heapsort
Tutorial aed iii 008 - algoritmo de ordenação heapsortFlávio Freitas
 
Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04thomasdacosta
 
04 tese de church-turing
04 tese de church-turing04 tese de church-turing
04 tese de church-turingYuri Passos
 
Conhecendo ou relembrando C
Conhecendo ou relembrando CConhecendo ou relembrando C
Conhecendo ou relembrando CVinícius Hax
 
Javascript Avançado
Javascript AvançadoJavascript Avançado
Javascript AvançadoBruno Tavares
 
Java script para adultos
Java script para adultosJava script para adultos
Java script para adultosDiego Honorio
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesElaine Cecília Gatto
 
Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03thomasdacosta
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04thomasdacosta
 
Aula 2 - Programação 1
Aula 2 - Programação 1Aula 2 - Programação 1
Aula 2 - Programação 1Isaac Barros
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao cprofwtelles
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Karoline Tavares
 
Aula 1 - Programação 1
Aula 1 - Programação 1Aula 1 - Programação 1
Aula 1 - Programação 1Isaac Barros
 

Tendances (20)

Tutorial aed iii 008 - algoritmo de ordenação heapsort
Tutorial aed iii   008 - algoritmo de ordenação heapsortTutorial aed iii   008 - algoritmo de ordenação heapsort
Tutorial aed iii 008 - algoritmo de ordenação heapsort
 
Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04
 
04 tese de church-turing
04 tese de church-turing04 tese de church-turing
04 tese de church-turing
 
Linguagem C - Strings
Linguagem C - StringsLinguagem C - Strings
Linguagem C - Strings
 
Conhecendo ou relembrando C
Conhecendo ou relembrando CConhecendo ou relembrando C
Conhecendo ou relembrando C
 
Javascript Avançado
Javascript AvançadoJavascript Avançado
Javascript Avançado
 
Cool 3 assembly para linux
Cool 3   assembly para linuxCool 3   assembly para linux
Cool 3 assembly para linux
 
Java script para adultos
Java script para adultosJava script para adultos
Java script para adultos
 
Pilhas e Filas
Pilhas e FilasPilhas e Filas
Pilhas e Filas
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e Funções
 
Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04
 
Aula 2 - Programação 1
Aula 2 - Programação 1Aula 2 - Programação 1
Aula 2 - Programação 1
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Linguagem C 09 Ponteiros
Linguagem C 09 PonteirosLinguagem C 09 Ponteiros
Linguagem C 09 Ponteiros
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros
 
Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 
Ponteiros de Função
Ponteiros de FunçãoPonteiros de Função
Ponteiros de Função
 
Aula 1 - Programação 1
Aula 1 - Programação 1Aula 1 - Programação 1
Aula 1 - Programação 1
 

En vedette

Monografia: Framework Para Sistemas de Navegação de Veículos Aéreos Não Tripu...
Monografia: Framework Para Sistemas de Navegação de Veículos Aéreos Não Tripu...Monografia: Framework Para Sistemas de Navegação de Veículos Aéreos Não Tripu...
Monografia: Framework Para Sistemas de Navegação de Veículos Aéreos Não Tripu...Johnnatan Messias
 
Cálculo Numérico: Interpolação Polinomial com Bubble Sort
Cálculo Numérico: Interpolação Polinomial com Bubble SortCálculo Numérico: Interpolação Polinomial com Bubble Sort
Cálculo Numérico: Interpolação Polinomial com Bubble SortJohnnatan Messias
 
Twitter and Youtube Collector
Twitter and Youtube CollectorTwitter and Youtube Collector
Twitter and Youtube CollectorJohnnatan Messias
 
Análise de Disco, I/O e Processamento
Análise de Disco, I/O e ProcessamentoAnálise de Disco, I/O e Processamento
Análise de Disco, I/O e ProcessamentoJohnnatan Messias
 
Análise de Algoritmos de Ordenação Interna
Análise de Algoritmos de Ordenação InternaAnálise de Algoritmos de Ordenação Interna
Análise de Algoritmos de Ordenação InternaJohnnatan Messias
 
Cálculo Numérico: Integração Numérica com Bubble Sort
Cálculo Numérico: Integração Numérica com Bubble SortCálculo Numérico: Integração Numérica com Bubble Sort
Cálculo Numérico: Integração Numérica com Bubble SortJohnnatan Messias
 
Avaliação de Usabilidade, Comunicabilidade e Acessibilidade - Quadro de Avisos
Avaliação de Usabilidade, Comunicabilidade e Acessibilidade - Quadro de AvisosAvaliação de Usabilidade, Comunicabilidade e Acessibilidade - Quadro de Avisos
Avaliação de Usabilidade, Comunicabilidade e Acessibilidade - Quadro de AvisosJohnnatan Messias
 
AI - Backtracking vs Depth-First Search (DFS)
AI - Backtracking vs Depth-First Search (DFS)AI - Backtracking vs Depth-First Search (DFS)
AI - Backtracking vs Depth-First Search (DFS)Johnnatan Messias
 
Caminhos Mínimos: Dijkstra e Floyd-Warshall
Caminhos Mínimos: Dijkstra e Floyd-WarshallCaminhos Mínimos: Dijkstra e Floyd-Warshall
Caminhos Mínimos: Dijkstra e Floyd-WarshallJohnnatan Messias
 

En vedette (12)

MyShell
MyShellMyShell
MyShell
 
Monografia: Framework Para Sistemas de Navegação de Veículos Aéreos Não Tripu...
Monografia: Framework Para Sistemas de Navegação de Veículos Aéreos Não Tripu...Monografia: Framework Para Sistemas de Navegação de Veículos Aéreos Não Tripu...
Monografia: Framework Para Sistemas de Navegação de Veículos Aéreos Não Tripu...
 
Cálculo Numérico: Interpolação Polinomial com Bubble Sort
Cálculo Numérico: Interpolação Polinomial com Bubble SortCálculo Numérico: Interpolação Polinomial com Bubble Sort
Cálculo Numérico: Interpolação Polinomial com Bubble Sort
 
Quadro de Avisos - IHC
Quadro de Avisos - IHCQuadro de Avisos - IHC
Quadro de Avisos - IHC
 
MyShell - English
MyShell - EnglishMyShell - English
MyShell - English
 
Twitter and Youtube Collector
Twitter and Youtube CollectorTwitter and Youtube Collector
Twitter and Youtube Collector
 
Análise de Disco, I/O e Processamento
Análise de Disco, I/O e ProcessamentoAnálise de Disco, I/O e Processamento
Análise de Disco, I/O e Processamento
 
Análise de Algoritmos de Ordenação Interna
Análise de Algoritmos de Ordenação InternaAnálise de Algoritmos de Ordenação Interna
Análise de Algoritmos de Ordenação Interna
 
Cálculo Numérico: Integração Numérica com Bubble Sort
Cálculo Numérico: Integração Numérica com Bubble SortCálculo Numérico: Integração Numérica com Bubble Sort
Cálculo Numérico: Integração Numérica com Bubble Sort
 
Avaliação de Usabilidade, Comunicabilidade e Acessibilidade - Quadro de Avisos
Avaliação de Usabilidade, Comunicabilidade e Acessibilidade - Quadro de AvisosAvaliação de Usabilidade, Comunicabilidade e Acessibilidade - Quadro de Avisos
Avaliação de Usabilidade, Comunicabilidade e Acessibilidade - Quadro de Avisos
 
AI - Backtracking vs Depth-First Search (DFS)
AI - Backtracking vs Depth-First Search (DFS)AI - Backtracking vs Depth-First Search (DFS)
AI - Backtracking vs Depth-First Search (DFS)
 
Caminhos Mínimos: Dijkstra e Floyd-Warshall
Caminhos Mínimos: Dijkstra e Floyd-WarshallCaminhos Mínimos: Dijkstra e Floyd-Warshall
Caminhos Mínimos: Dijkstra e Floyd-Warshall
 

Similaire à Simulador Funcional

Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem Capolllorj
 
Curso De Algoritmo Aula 7
Curso De Algoritmo   Aula 7Curso De Algoritmo   Aula 7
Curso De Algoritmo Aula 7Felipe Santos
 
Comandos de Controle de Programa em C
Comandos de Controle de Programa em CComandos de Controle de Programa em C
Comandos de Controle de Programa em CElaine Cecília Gatto
 
Interrupts and the timer
Interrupts and the timerInterrupts and the timer
Interrupts and the timerMayara Mônica
 
Estrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesEstrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesLeinylson Fontinele
 
Alocação dinâmica em C
Alocação dinâmica em CAlocação dinâmica em C
Alocação dinâmica em CBruno Oliveira
 
Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Thaci Santos
 
Estrdado materia-06-alocacao-de-memoria1
Estrdado materia-06-alocacao-de-memoria1Estrdado materia-06-alocacao-de-memoria1
Estrdado materia-06-alocacao-de-memoria1Ensdo
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmosjormad
 
095 A 134 Material Auxiliar Para Curso AvançAdo I Msp430
095 A 134   Material Auxiliar Para Curso AvançAdo I Msp430095 A 134   Material Auxiliar Para Curso AvançAdo I Msp430
095 A 134 Material Auxiliar Para Curso AvançAdo I Msp430Texas Instruments
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Marco Mendes
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem CVê Rodrigues
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxClaudia Ferlin
 

Similaire à Simulador Funcional (20)

Aula1
Aula1Aula1
Aula1
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Curso De Algoritmo Aula 7
Curso De Algoritmo   Aula 7Curso De Algoritmo   Aula 7
Curso De Algoritmo Aula 7
 
Comandos de Controle de Programa em C
Comandos de Controle de Programa em CComandos de Controle de Programa em C
Comandos de Controle de Programa em C
 
Interrupts and the timer
Interrupts and the timerInterrupts and the timer
Interrupts and the timer
 
Estrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesEstrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e Funções
 
Ed1
Ed1Ed1
Ed1
 
Introducao Google GO
Introducao Google GOIntroducao Google GO
Introducao Google GO
 
Alocação dinâmica em C
Alocação dinâmica em CAlocação dinâmica em C
Alocação dinâmica em C
 
Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.
 
Algoritmo0
Algoritmo0Algoritmo0
Algoritmo0
 
Aula 3-lógica.pptx
Aula 3-lógica.pptxAula 3-lógica.pptx
Aula 3-lógica.pptx
 
Estrdado materia-06-alocacao-de-memoria1
Estrdado materia-06-alocacao-de-memoria1Estrdado materia-06-alocacao-de-memoria1
Estrdado materia-06-alocacao-de-memoria1
 
05-ModeloDeVonNeumann.pdf
05-ModeloDeVonNeumann.pdf05-ModeloDeVonNeumann.pdf
05-ModeloDeVonNeumann.pdf
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Função malloc
Função mallocFunção malloc
Função malloc
 
095 A 134 Material Auxiliar Para Curso AvançAdo I Msp430
095 A 134   Material Auxiliar Para Curso AvançAdo I Msp430095 A 134   Material Auxiliar Para Curso AvançAdo I Msp430
095 A 134 Material Auxiliar Para Curso AvançAdo I Msp430
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptx
 

Dernier

Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfFrancisco Márcio Bezerra Oliveira
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfHELENO FAVACHO
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Ilda Bicacro
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaHELENO FAVACHO
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...Rosalina Simão Nunes
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfRavenaSales1
 
Apresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptxApresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptxLusGlissonGud
 
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxedelon1
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médiorosenilrucks
 
atividades_reforço_4°ano_231206_132728.pdf
atividades_reforço_4°ano_231206_132728.pdfatividades_reforço_4°ano_231206_132728.pdf
atividades_reforço_4°ano_231206_132728.pdfLuizaAbaAba
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMHELENO FAVACHO
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAHELENO FAVACHO
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteVanessaCavalcante37
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéisines09cachapa
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfHELENO FAVACHO
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdfLeloIurk1
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptssuser2b53fe
 

Dernier (20)

Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
 
Apresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptxApresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptx
 
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
 
atividades_reforço_4°ano_231206_132728.pdf
atividades_reforço_4°ano_231206_132728.pdfatividades_reforço_4°ano_231206_132728.pdf
atividades_reforço_4°ano_231206_132728.pdf
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéis
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 

Simulador Funcional

  • 1. Simulador Funcional Johnnatan Messias P. Afonso 1 , Jeferson Lopes Dias Moreli2 1 Departamento de Computac¸˜ao - Instituto de Ciˆencias Exatas e Biol´ogicas Universidade Federal de Ouro Preto (UFOP) CEP: 35400-000 – Ouro Preto – MG – Brasil johnnatan20@gmail.com, jefersonvni@hotmail.com Resumo. Este trabalho consiste na criac¸˜ao de um simulador funcional onde cada instruc¸˜ao executada demora quatro ciclos para completar. Estes ciclos s˜ao denominados: IF, ID, EX/MEM e WB. • IF (instruction fetch): a pr´oxima instruc¸˜ao a ser executada ´e buscada na mem´oria e armazenada no registrador de instruc¸˜oes (IR); • ID (instruction decode): a instruc¸˜ao sendo executada ´e decodificada e os operandos s˜ao buscados no banco de registradores; • EX/MEM (execute and memory): a instruc¸˜ao ´e executada e as condic¸˜oes dos resultados s˜ao ”setados” (condition codes) para operac¸˜oes de ALU. Loads, stores, o c´alculo do enderec¸o efetivo e a resoluc¸˜ao de branches s˜ao feitos tamb´em nesse ciclo; • WB (write back): os resultados s˜ao escritos no banco de registradores. Considere que o termino do load acontece neste passo. O processador tem 8 registradores de uso geral de 16 bits de largura. Considere as letras A, B,C, ..., H. A mem´oria ´e divida em dois vetores. Um contem os dados, o outro o c´odigo de instruc¸˜oes de acesso `a mem´oria que salvam e buscam os dados na mem´oria de dados (memDados) Uma descric¸˜ao funcional divide o processador nos blocos que existir˜ao em uma implementac¸˜ao real. Portanto, o processador dever´a conter quatro rotinas prin- cipais, uma para cada etapa do ciclo a ser executado em cada instruc¸˜ao. Instruc¸˜oes Figure 1. Instruc¸ ˜oes Considere que em LABEL se encontra o n´umero linha da mem´oria de c´odigo.
  • 2. 1. Decis˜oes de implementac¸˜ao Para a implementac¸˜ao desse trabalho foram tomadas v´arias decis˜oes para obter maior clareza do c´odigo como, por exemplo, a func¸˜ao posicao. Atrav´es dessa func¸˜ao obtemos a posic¸˜ao do vetor do banco de registradores que queremos acessar. Ainda, na estrutura TInstucao utilizamos uma flag para que possamos saber em qual registrador armazenar o resultado de sa´ıda. Os Define’s no arquivo STDAFX.h facilitou a implementac¸˜ao do trabalho, uma vez que os label’s ficaram mais pr´oximos do objetivo. Com relac¸˜ao `a alocac¸˜ao da mem´oria de c´odigo fizemos em O(n). Na sec¸˜ao 7.6 isto ´e explicado e ilustrado. 2. Tutorial de como usar o simulador Para este simulador deve-se criar um arquivo instrucao.txt contendo as instruc¸˜oes a serem executadas pelo programa, vale lembrar que o simulador cont´em 8 registradores e 8 posic¸˜oes na mem´oria de dados. Ap´os o termino das instruc¸˜oes o usu´ario dever´a in- cluir a instruc¸˜ao HALT para que o simulador encerre a execuc¸˜ao. Caso haja algum erro nas etapas das instruc¸˜oes o usu´ario ser´a alertado com uma mensagem na tela. O resultado ser´a gerado e impresso na tela do usu´ario e ainda gravado no arquivo saida.txt. Todas as instruc¸˜oes que o simulador executa est´a na Figura 1. Requisitor: Como esse simulador foi desenvolvido no Microsoft Visual Studio 2010 Ultimate pode ser que o usu´ario tenha que ter o .NetFramework − 4 para executar o programa. Para exemplo de entrada de instruc¸˜ao vide Figura 2 Figure 2. Exemplo de Entrada de Instruc¸ ˜oes 3. Desenho esquem´atico da implementac¸˜ao Para esse simulador vide datapath na figura 3
  • 3. Figure 3. Datapath 4. Estruturas utilizadas para representac¸˜ao do hardware • Mem´oria: para a representac¸˜ao das mem´orias de c´odigo e dados utilizamos a es- trutura TMem. Vide Figura 4
  • 4. Figure 4. Representac¸ ˜ao da Mem´oria • Processador: a representac¸˜ao do processador utilizamos a estrutura TInstrucao. Vide Figura 5 Figure 5. Representac¸ ˜ao do Processador 5. Descric¸˜ao dos m´odulos utilizados S˜ao eles: • Banco de Registradores: Representado com um vetor de inteiro com 8 posic¸˜oes, isto ´e, registradores de A,B,...H. • opCode: Necess´ario para saber qual o tipo da instruc¸˜ao a ser eexecutada, ex.: SOMA, SUB, CARR, ARMA, etc. • flag: Vari´avel utilizada para saber a posic¸˜ao registrador principal ou da mem´oria de dados, ou seja, em qual registrador ou mem´oria de dados o dado ser´a armazenado.
  • 5. • offSet: Utilizada para as instruc¸˜oes ARMA e SALV, no c´alculo do enderec¸o da mem´oria de dados. Vide Figura 6 Figure 6. M´odulos 6. Testes Os testes gerados teve como base a identificac¸˜ao de erro que cada func¸˜ao poderia gerar. • SOMA: Vide Figuras 9, 10 • SUB: Vide Figuras 9, 10 • SLT: Vide Figuras 7, 8 • CARR: Vide Figuras 7, 8 • SALV: Vide Figuras 7, 8 • DSIG: Vide Figuras 7, 8 • SALT: Vide Figuras 7, 8, 10 • ARMA: Vide Figuras 7, 8, 9, 10 • HALT: Vide Figuras 7, 8, 9, 10 • Outros Testes: Para a realizac¸˜ao de testes mais complexos criamos um conjunto de instruc¸˜oes que utiliza as func¸˜oes acima: Figure 7. Teste 1
  • 6. Figure 8. Teste 2 Figure 9. Teste 3
  • 7. Figure 10. Teste 4 Testes de programas fornecidos na especificac¸˜ao do trabalho: • Teste a: Teste=2*aux Figura 11 Figure 11. Teste a
  • 8. • Teste b: while(i==0) i++ Figura 12 Figure 12. Teste b • Teste c: if(j¡0) m=j-i Figura 13 Figure 13. Teste c
  • 9. • Teste d: O programa de busca compara em SLT o elemento do registrador H com o elemento do registrador F, verificando se o conte´udo de F ´e menor que o de H, caso isso seja verdade, o registrador A recebe 0, para uma futura comparac¸˜ao em DSIG, com o registrador G que esta com o valor 1, como essa comparac¸˜ao n˜ao ´e verdadeira, ele executa SALV que salva o valor de F, na memDados no enderec¸o (OFFSet, que nesse caso ´e 0, + G). Figura 14 Figure 14. Teste d 7. Listagem do c´odigo fonte do simulador Vide abaixo o c´odigo fonte do programa bem como um resumo de cada func¸˜ao: 7.1. STDAFX.h Todas as bibliotecas e os DEFINE utilizados para a confecc¸˜ao do trabalho encontram-se no arquivo STDAFX.h # include <s t d i o . h> # include <t c h a r . h> # include ” TInstrucao . h” 5 # include <s t d l i b . h> # include <s t r i n g . h> # define l i n h a 100 # define coluna 30 10 # define TRUE 1 # define FALSE 0 # define IF 0 15 # define ID 1 # define EX 2 # define WB 3 # define FIM 4 20 # define opSOMA 0
  • 10. # define opSUB 1 # define opSLT 2 # define opCARR 3 # define opSALV 4 25 # define opDSIG 5 # define opSALT 6 # define opARMA 7 # define opHALT 8 30 # define SAIR −2 # define posA 0 # define posB 1 # define posC 2 35 # define posD 3 # define posE 4 # define posF 5 # define posG 6 # define posH 7 40 # define TipoR 0 # define TipoIncon 1 # define TipoCond 2 # define TipoLW 3 45 # define TipoSW 4 # define TipoHALT 5 Listing 1. STDAFX.h 7.2. Assinaturas e Estrutura Para este trabalho pr´atico utilizei duas estruturas: • TInstrucao que contem as vari´aveis opCode das instruc¸˜oes, o registrador Reg[8], offSet e uma flag para saber em qual registrador dever´a ser armazenada o dado. • TMem: Estrutura da mem´oria do simulador, cont´em a Mem´oria de Dados memDados e a Mem´oria de C´odigo memCod. No c´odigo 2 as estruturas e as assinaturas das func¸˜oes: # include ” s t d a f x . h” typedef s t r u c t { 5 i n t opCode ; i n t o f f S e t ; i n t Reg [ 8 ] ; i n t f l a g ; 10 } T I n s t r u c a o ; typedef s t r u c t { i n t ∗ memDados ; char ∗∗ memCod ; 15 }TMem;
  • 11. i n t posicao ( char∗ tok ) ; i n t startMem (TMem∗ mem) ; 20 void s t a r t V a r i a v e i s ( T I n s t r u c a o ∗ i n s t ) ; i n t geraMemCod (TMem∗ mem) ; 25 void b u s c a I n s t r u c a o ( char ∗∗ memCod , char∗ RI , i n t ∗ PC) ; i n t d e c o d i f i c a I n s t r u c a o ( T I n s t r u c a o ∗ i n s t , char∗ RI , i n t ∗ temp ) ; i n t e x e c u t a I n s t r u c a o ( i n t ∗ temp , i n t ∗ opCode , i n t ∗ s a i d a ) ; 30 i n t f i n a l I n s t r u c a o ( T I n s t r u c a o ∗ i n s t , i n t ∗ saida , i n t ∗ PC , i n t ∗ memDados ) ; void imprimir ( i n t ∗ Reg , i n t ∗ memDados , i n t ∗ aux , char∗ RI , FILE∗ arqS ) ; Listing 2. TInstrucao.h 7.3. Func¸˜ao Posicao Essa func¸˜ao ´e respons´avel por retornar o valor em inteiro da posic¸˜ao de um registrador. Obs.: Recebe um caractere e retorna a posic¸˜ao. Ex.: Para acessar o registrador A a posic¸˜ao do vetor de registradores a ser acessada ser´a Reg[posic¸˜ao(’A’)] . i n t posicao ( char∗ tok ) { i n t pos ; switch (∗ tok ) { 5 case ’A ’ : pos = posA ; break ; case ’B ’ : pos = posB ; 10 break ; case ’C’ : pos = posC ; break ; case ’D’ : 15 pos = posD ; break ; case ’E ’ : pos = posE ; break ; 20 case ’F ’ : pos = posF ; break ; case ’G’ : pos = posG ; 25 break ; case ’H’ : pos = posH ; break ; }
  • 12. 30 return pos ; } Listing 3. Func¸ ˜ao Posicao 7.4. Func¸˜ao startMem Func¸˜ao respons´avel por alocar a estrutura de mem´oria. Obs.: Para melhorar, mesmo que pouco, o desempenho do c´odigo aloquei a mem- Cod com ordem de complexidade O (n) i n t startMem (TMem∗ mem) { i n t i ; / / n de l i n h a s mem−>memCod = ( char ∗∗) c a l l o c ( linha , s i z e o f ( char ∗) ) ; 5 i f (mem−>memCod == NULL) { p r i n t f ( ”Erro ao alocar a memCodn” ) ; return FALSE ; } 10 / / n l i n h a s ∗ n colunas mem−>memCod[ 0 ] = ( char ∗) c a l l o c ( l i n h a ∗ coluna , s i z e o f ( char ) ) ; i f (mem−>memCod[ 0 ] == NULL) { p r i n t f ( ”Erro ao alocar a memCodn” ) ; 15 return FALSE ; } / / Redireciona os p o n t e i r o s for ( i =1; i<l i n h a ; i ++){ mem−>memCod[ i ] = &(mem−>memCod [ 0 ] [ i ∗ coluna ] ) ; 20 } mem−>memDados = ( i n t ∗) c a l l o c (8 , s i z e o f ( i n t ) ) ; i f (mem−>memDados == NULL) { 25 p r i n t f ( ”Erro ao alocar a memDadosn” ) ; return FALSE ; } return TRUE; } Listing 4. Func¸ ˜ao startMem A figura 15 ilustra como os ponteiros da memCod foram organizados:
  • 13. Figure 15. Alocac¸ ˜ao Matriz 7.5. Func¸˜ao startVariaveis Respons´avel por inicializar as vari´aveis da estrutura TInstrucao void s t a r t V a r i a v e i s ( T I n s t r u c a o ∗ i n s t ) { i n t i ; i n s t −>o f f S e t = −1; i n s t −>opCode = −1; 5 for ( i =0; i <8; i ++) i n s t −>Reg [ i ] = 0; i n s t −>f l a g = −1; } Listing 5. Func¸ ˜ao startVariaveis 7.6. Func¸˜ao geraMemCod Esta func¸˜ao inicializa a memCod, armazenando em cada posic¸˜ao uma instruc¸˜ao obtida atrav´es da leitura do arquivo instrucao.txt i n t geraMemCod (TMem∗ mem) { FILE ∗ arqE = fopen ( ” i n s t r u c a o . t x t ” ,”r” ) ; char ∗ tok , ∗ buf ; i n t tam = 0; 5 buf = ( char ∗) malloc (31∗ s i z e o f ( char ) ) ; i f ( arqE == NULL) { p r i n t f ( ”Erro ao a b r i r o arquivo de entrada n” ) ; return FALSE ; } 10 e l s e { i f ( ! startMem (mem) ) { p r i n t f ( ”Erro ao i n i c i a r a memn” ) ;
  • 14. return FALSE ; 15 } while ( ! f e o f ( arqE ) ) { buf = f g e t s ( buf , BUFSIZ , arqE ) ; i f ( buf == NULL) 20 continue ; s t r c p y (mem−>memCod[ tam ++] , buf ) ; } } f r e e ( buf ) ; 25 f c l o s e ( arqE ) ; return tam ; } Listing 6. Func¸ ˜ao geraMemCod 7.7. Func¸˜ao buscaInstrucao Busca a pr´oxima instruc¸˜ao, incrementando o PC em uma unidade. void b u s c a I n s t r u c a o ( char ∗∗ memCod , char∗ RI , i n t ∗ PC) { s t r c p y ( RI , memCod[ ( ∗ PC) ] ) ; (∗PC) ++; } Listing 7. Func¸ ˜ao buscaInstrucao 7.8. Func¸˜ao decodificaInstrucao Uma das principais func¸˜ao deste projeto ´e a func¸˜ao de decodificac¸˜ao, que identifica a instruc¸˜ao executada, buscando os respectivos operandos no banco de registradores. Vide c´odigo 8: i n t d e c o d i f i c a I n s t r u c a o ( T I n s t r u c a o ∗ i n s t , char∗ RI , i n t ∗ temp ) { char∗ tok , ∗RIAux ; i n t tipo , ∗aux , i ; RIAux = ( char ∗) malloc ( coluna ∗ s i z e o f ( char ) ) ; 5 s t r c p y ( RIAux , RI ) ; i n s t −>opCode = −1; i n s t −>f l a g = −1; tok = s t r t o k ( RIAux , ” ” ) ; i f ( strcmp ( tok , ”SOMA” ) ==0){ 10 i n s t −>opCode = opSOMA; t i p o = TipoR ; } e l s e i f ( strcmp ( tok , ”SUB” ) ==0){ i n s t −>opCode = opSUB ; 15 t i p o = TipoR ; } e l s e i f ( strcmp ( tok , ”SLT” ) ==0){ i n s t −>opCode = opSLT ; t i p o = TipoR ; 20 } e l s e i f ( strcmp ( tok , ”CARR” ) ==0){ i n s t −>opCode = opCARR;
  • 15. t i p o = TipoLW ; } 25 e l s e i f ( strcmp ( tok , ”SALV” ) ==0){ i n s t −>opCode = opSALV ; t i p o = TipoSW ; } e l s e i f ( strcmp ( tok , ”DSIG” ) ==0){ 30 i n s t −>opCode = opDSIG ; t i p o = TipoCond ; } e l s e i f ( strcmp ( tok , ”SALT” ) ==0){ i n s t −>opCode = opSALT ; 35 t i p o = TipoIncon ; } e l s e i f ( strcmp ( tok , ”ARMA” ) ==0){ i n s t −>opCode = opARMA; t i p o = TipoLW ; 40 } e l s e i f ( s t r s t r ( tok , ”HALT” ) ) { i n s t −>opCode = opHALT ; t i p o = TipoHALT ; } 45 e l s e { p r i n t f ( ”Erro : opCode nao encontrado nn” ) ; return FALSE ; } switch ( t i p o ) { 50 case TipoR : { tok = s t r t o k (NULL, ” ,” ) ; i n s t −>f l a g = posicao (& tok [ 0 ] ) ; / / R1 tok = s t r t o k (NULL, ” ,” ) ; 55 temp [ 0 ] = i n s t −>Reg [ posicao (& tok [ 0 ] ) ] ; / / R2 tok = s t r t o k (NULL, ” ,” ) ; temp [ 1 ] = i n s t −>Reg [ posicao (& tok [ 0 ] ) ] ; / / R3 break ; } 60 case TipoIncon : { tok = s t r t o k (NULL, ” ,” ) ; temp [ 0 ] = a t o i ( tok ) ; / / LABEL break ; 65 } case TipoCond : { tok = s t r t o k (NULL, ” ,” ) ; temp [ 0 ] = i n s t −>Reg [ posicao (& tok [ 0 ] ) ] ; / / R1 70 tok = s t r t o k (NULL, ” ,” ) ; temp [ 1 ] = i n s t −>Reg [ posicao (& tok [ 0 ] ) ] ; / / R2 tok = s t r t o k (NULL, ” ,” ) ; temp [ 2 ] = a t o i ( tok ) ; / / LABEL break ; 75 } case TipoLW : { i f ( i n s t −>opCode == opARMA) {
  • 16. tok = s t r t o k (NULL, ” ,” ) ; 80 i n s t −>f l a g = posicao (& tok [ 0 ] ) ; / / R1 tok = s t r t o k (NULL, ” ,” ) ; temp [ 0 ] = a t o i ( tok ) ; / /NUMBER } e l s e { 85 / / CARR tok = s t r t o k (NULL, ” ,” ) ; i n s t −>f l a g = posicao (& tok [ 0 ] ) ; / / R1 tok = s t r t o k (NULL, ” ( ” ) ; temp [ 0 ] = a t o i ( tok ) ; / / OFFSET 90 tok = s t r t o k (NULL, ” ) ” ) ; temp [ 1 ] = i n s t −>Reg [ posicao (& tok [ 0 ] ) ] ; / / R2 } break ; } 95 case TipoSW : { / / memDados[OFFSET + R2] = R1 tok = s t r t o k (NULL, ” ,” ) ; i n s t −>f l a g = posicao (& tok [ 0 ] ) ; / / Posic¸ ˜ao do R1 100 tok = s t r t o k (NULL, ” ( ” ) ; temp [ 0 ] = a t o i ( tok ) ; / / OFFSET tok = s t r t o k (NULL, ” ) ” ) ; temp [ 1 ] = i n s t −>Reg [ posicao (& tok [ 0 ] ) ] ; / / R2 break ; 105 } case TipoHALT : { temp [ 0 ] = SAIR ; break ; 110 } default : p r i n t f ( ”Erro na d e c o d i f i c a c a o n” ) ; return FALSE ; break ; 115 } f r e e ( RIAux ) ; return TRUE; } Listing 8. Func¸ ˜ao decodificaInstrucao 7.9. Func¸˜ao executaInstrucao Essa func¸˜ao recebe as vari´aveis tempor´arias e o opCode e executa a instruc¸˜ao, retornando o resultado na vari´avel sa´ıda. i n t e x e c u t a I n s t r u c a o ( i n t ∗ temp , i n t ∗ opCode , i n t ∗ s a i d a ) { ∗ s a i d a = −1; switch (∗ opCode ) { case opSOMA: 5 { ∗ s a i d a = temp [ 0 ] + temp [ 1 ] ; break ; }
  • 17. case opSUB : 10 { ∗ s a i d a = temp [ 0 ] − temp [ 1 ] ; break ; } case opSLT : 15 { i f ( temp [0] < temp [ 1 ] ) ∗ s a i d a = 0; e l s e ∗ s a i d a = 1; 20 break ; } case opCARR: { ∗ s a i d a = temp [ 0 ] + temp [ 1 ] ; 25 break ; } case opSALV : { ∗ s a i d a = temp [ 0 ] + temp [ 1 ] ; 30 break ; } case opDSIG : { i f ( temp [ 0 ] == temp [ 1 ] ) 35 ∗ s a i d a = temp [ 2 ] ; e l s e ∗ s a i d a = −1; break ; } 40 case opSALT : { ∗ s a i d a = temp [ 0 ] ; break ; } 45 case opARMA: { ∗ s a i d a = temp [ 0 ] ; break ; } 50 case opHALT : { ∗ s a i d a = temp [ 0 ] ; / / −2 = s a i r do programa break ; } 55 default : { p r i n t f ( ”Erro ao Executar n” ) ; return FALSE ; } 60 } return TRUE; } Listing 9. Func¸ ˜ao executaInstrucao
  • 18. 7.10. Func¸˜ao finalInstrucao Ap´os obter a pr´oxima instruc¸˜ao, identific´a-la e execut´a-la, nos resta escrever no banco de registradores o resultado obtido das etapas anteriores. i n t f i n a l I n s t r u c a o ( T I n s t r u c a o ∗ i n s t , i n t ∗ saida , i n t ∗ PC , i n t ∗ memDados ) { switch ( i n s t −>opCode ) { case opSOMA: 5 { i n s t −>Reg [ i n s t −>f l a g ] = ∗ s a i d a ; break ; } case opSUB : 10 { i n s t −>Reg [ i n s t −>f l a g ] = ∗ s a i d a ; break ; } case opSLT : 15 { i n s t −>Reg [ i n s t −>f l a g ] = ∗ s a i d a ; break ; } case opDSIG : 20 { i f (∗ s a i d a != −1) ∗PC = ∗ s a i d a ; break ; } 25 case opARMA: { i n s t −>Reg [ i n s t −>f l a g ] = ∗ s a i d a ; break ; } 30 case opSALT : { ∗PC = ∗ s a i d a ; break ; } 35 case opSALV : { memDados[∗ s a i d a ] = i n s t −>Reg [ i n s t −>f l a g ] ; / / memDados[OFFSET + R2 ] = R1 break ; } 40 case opCARR: { i n s t −>Reg [ i n s t −>f l a g ] = memDados[∗ s a i d a ] ; / / R1 = memDados[OFFSET + R2] break ; } 45 case opHALT : { return FALSE ; } }
  • 19. 50 return TRUE; } Listing 10. Func¸ ˜ao finalInstrucao 7.11. Func¸˜ao imprimir A func¸˜ao imprimir imprime na tela e salva no arquivo.txt os status de cada etapa do simulador. void imprimir ( i n t ∗ Reg , i n t ∗ memDados , i n t ∗ aux , char∗ RI , FILE∗ arqS ) { i n t i ; char∗ tok , ∗RIAux ; RIAux = ( char ∗) malloc ( coluna ∗ s i z e o f ( char ) ) ; 5 s t r c p y ( RIAux , RI ) ; tok = s t r t o k ( RIAux , ” ” ) ; switch ( aux [ 0 ] ) { case IF : p r i n t f ( ” Ciclo IFnn” ) ; 10 p r i n t f ( ”REGISTRADORES Flags nn” ) ; p r i n t f ( ”A= %dn” , Reg [ posA ] ) ; p r i n t f ( ”B= %dn” , Reg [ posB ] ) ; p r i n t f ( ”C= %dn” , Reg [ posC ] ) ; p r i n t f ( ”D= %dn” , Reg [ posD ] ) ; 15 p r i n t f ( ”E= %dn” , Reg [ posE ] ) ; p r i n t f ( ”F= %dn” , Reg [ posF ] ) ; p r i n t f ( ”G= %dn” , Reg [ posG ] ) ; p r i n t f ( ”H= %dnn” , Reg [ posH ] ) ; 20 p r i n t f ( ”PC= %dn” , aux [ 1 ] ) ; p r i n t f ( ”IR = %s n” , RI ) ; p r i n t f ( ” I n s t r u c a o i d e n t i f i c a d a = ?n” ) ; p r i n t f ( ” I n s t r u c a o executada = ?n” ) ; 25 p r i n t f ( ”−−−−−−−−−−−−−−−−−−nnn” ) ; f p r i n t f ( arqS , ” Ciclo IFnn” ) ; f p r i n t f ( arqS , ”REGISTRADORES Flags nn” ) ; 30 f p r i n t f ( arqS , ”A= %dn” , Reg [ posA ] ) ; f p r i n t f ( arqS , ”B= %dn” , Reg [ posB ] ) ; f p r i n t f ( arqS , ”C= %dn” , Reg [ posC ] ) ; f p r i n t f ( arqS , ”D= %dn” , Reg [ posD ] ) ; f p r i n t f ( arqS , ”E= %dn” , Reg [ posE ] ) ; 35 f p r i n t f ( arqS , ”F= %dn” , Reg [ posF ] ) ; f p r i n t f ( arqS , ”G= %dn” , Reg [ posG ] ) ; f p r i n t f ( arqS , ”H= %dnn” , Reg [ posH ] ) ; f p r i n t f ( arqS , ”PC= %dn” , aux [ 1 ] ) ; 40 f p r i n t f ( arqS , ”IR = %s n” , RI ) ; f p r i n t f ( arqS , ” I n s t r u c a o i d e n t i f i c a d a = ?n” ) ; f p r i n t f ( arqS , ” I n s t r u c a o executada = ?n” ) ; 45 f p r i n t f ( arqS , ”−−−−−−−−−−−−−−−−−−nnn” ) ; break ;
  • 20. case ID : p r i n t f ( ” Ciclo IDnn” ) ; p r i n t f ( ”REGISTRADORES Flags nn” ) ; 50 p r i n t f ( ”A= %dn” , Reg [ posA ] ) ; p r i n t f ( ”B= %dn” , Reg [ posB ] ) ; p r i n t f ( ”C= %dn” , Reg [ posC ] ) ; p r i n t f ( ”D= %dn” , Reg [ posD ] ) ; p r i n t f ( ”E= %dn” , Reg [ posE ] ) ; 55 p r i n t f ( ”F= %dn” , Reg [ posF ] ) ; p r i n t f ( ”G= %dn” , Reg [ posG ] ) ; p r i n t f ( ”H= %dnn” , Reg [ posH ] ) ; p r i n t f ( ”PC= %dn” , aux [ 1 ] ) ; 60 p r i n t f ( ”IR = %s n” , RI ) ; p r i n t f ( ” I n s t r u c a o i d e n t i f i c a d a = %s n” , tok ) ; p r i n t f ( ” I n s t r u c a o executada = ?n” ) ; 65 p r i n t f ( ”−−−−−−−−−−−−−−−−−−nnn” ) ; f p r i n t f ( arqS , ” Ciclo IDnn” ) ; f p r i n t f ( arqS , ”REGISTRADORES Flags nn” ) ; f p r i n t f ( arqS , ”A= %dn” , Reg [ posA ] ) ; 70 f p r i n t f ( arqS , ”B= %dn” , Reg [ posB ] ) ; f p r i n t f ( arqS , ”C= %dn” , Reg [ posC ] ) ; f p r i n t f ( arqS , ”D= %dn” , Reg [ posD ] ) ; f p r i n t f ( arqS , ”E= %dn” , Reg [ posE ] ) ; f p r i n t f ( arqS , ”F= %dn” , Reg [ posF ] ) ; 75 f p r i n t f ( arqS , ”G= %dn” , Reg [ posG ] ) ; f p r i n t f ( arqS , ”H= %dnn” , Reg [ posH ] ) ; f p r i n t f ( arqS , ”PC= %dn” , aux [ 1 ] ) ; 80 f p r i n t f ( arqS , ”IR = %s n” , RI ) ; f p r i n t f ( arqS , ” I n s t r u c a o i d e n t i f i c a d a = %s n” , tok ) ; f p r i n t f ( arqS , ” I n s t r u c a o executada = ?n” ) ; f p r i n t f ( arqS , ”−−−−−−−−−−−−−−−−−−nnn” ) ; 85 break ; case EX: p r i n t f ( ” Ciclo EXnn” ) ; p r i n t f ( ”REGISTRADORES Flags nn” ) ; p r i n t f ( ”A= %dn” , Reg [ posA ] ) ; 90 p r i n t f ( ”B= %dn” , Reg [ posB ] ) ; p r i n t f ( ”C= %dn” , Reg [ posC ] ) ; p r i n t f ( ”D= %dn” , Reg [ posD ] ) ; p r i n t f ( ”E= %dn” , Reg [ posE ] ) ; p r i n t f ( ”F= %dn” , Reg [ posF ] ) ; 95 p r i n t f ( ”G= %dn” , Reg [ posG ] ) ; p r i n t f ( ”H= %dnn” , Reg [ posH ] ) ; p r i n t f ( ”PC= %dn” , aux [ 1 ] ) ; 100 p r i n t f ( ”IR = %s n” , RI ) ; p r i n t f ( ” I n s t r u c a o i d e n t i f i c a d a = %s n” , tok ) ; p r i n t f ( ” I n s t r u c a o executada = %s n” , tok ) ;
  • 21. p r i n t f ( ”−−−−−−−−−−−−−−−−−−nnn” ) ; 105 f p r i n t f ( arqS , ” Ciclo EXnn” ) ; f p r i n t f ( arqS , ”REGISTRADORES Flags nn” ) ; f p r i n t f ( arqS , ”A= %dn” , Reg [ posA ] ) ; f p r i n t f ( arqS , ”B= %dn” , Reg [ posB ] ) ; 110 f p r i n t f ( arqS , ”C= %dn” , Reg [ posC ] ) ; f p r i n t f ( arqS , ”D= %dn” , Reg [ posD ] ) ; f p r i n t f ( arqS , ”E= %dn” , Reg [ posE ] ) ; f p r i n t f ( arqS , ”F= %dn” , Reg [ posF ] ) ; f p r i n t f ( arqS , ”G= %dn” , Reg [ posG ] ) ; 115 f p r i n t f ( arqS , ”H= %dnn” , Reg [ posH ] ) ; f p r i n t f ( arqS , ”PC= %dn” , aux [ 1 ] ) ; f p r i n t f ( arqS , ”IR = %s n” , RI ) ; 120 f p r i n t f ( arqS , ” I n s t r u c a o i d e n t i f i c a d a = %s n” , tok ) ; f p r i n t f ( arqS , ” I n s t r u c a o executada = %s n” , tok ) ; f p r i n t f ( arqS , ”−−−−−−−−−−−−−−−−−−nnn” ) ; break ; 125 case WB: p r i n t f ( ” Ciclo WBnn” ) ; p r i n t f ( ”REGISTRADORES Flags nn” ) ; p r i n t f ( ”A= %dn” , Reg [ posA ] ) ; p r i n t f ( ”B= %dn” , Reg [ posB ] ) ; 130 p r i n t f ( ”C= %dn” , Reg [ posC ] ) ; p r i n t f ( ”D= %dn” , Reg [ posD ] ) ; p r i n t f ( ”E= %dn” , Reg [ posE ] ) ; p r i n t f ( ”F= %dn” , Reg [ posF ] ) ; p r i n t f ( ”G= %dn” , Reg [ posG ] ) ; 135 p r i n t f ( ”H= %dnn” , Reg [ posH ] ) ; p r i n t f ( ”PC= %dn” , aux [ 1 ] ) ; p r i n t f ( ”IR = %s” , RI ) ; 140 p r i n t f ( ” I n s t r u c a o i d e n t i f i c a d a = %s n” , tok ) ; p r i n t f ( ” I n s t r u c a o executada = %s n” , tok ) ; p r i n t f ( ”−−−−−−−−−−−−−−−−−−nnn” ) ; 145 f p r i n t f ( arqS , ” Ciclo WBnn” ) ; f p r i n t f ( arqS , ”REGISTRADORES Flags nn” ) ; f p r i n t f ( arqS , ”A= %dn” , Reg [ posA ] ) ; f p r i n t f ( arqS , ”B= %dn” , Reg [ posB ] ) ; f p r i n t f ( arqS , ”C= %dn” , Reg [ posC ] ) ; 150 f p r i n t f ( arqS , ”D= %dn” , Reg [ posD ] ) ; f p r i n t f ( arqS , ”E= %dn” , Reg [ posE ] ) ; f p r i n t f ( arqS , ”F= %dn” , Reg [ posF ] ) ; f p r i n t f ( arqS , ”G= %dn” , Reg [ posG ] ) ; f p r i n t f ( arqS , ”H= %dnn” , Reg [ posH ] ) ; 155 f p r i n t f ( arqS , ”PC= %dn” , aux [ 1 ] ) ; f p r i n t f ( arqS , ”IR = %s” , RI ) ;
  • 22. f p r i n t f ( arqS , ” I n s t r u c a o i d e n t i f i c a d a = %s n” , tok ) ; 160 f p r i n t f ( arqS , ” I n s t r u c a o executada = %s n” , tok ) ; f p r i n t f ( arqS , ”−−−−−−−−−−−−−−−−−−nnn” ) ; break ; case FIM : 165 p r i n t f ( ”FINAL DA EXECUCAO DA INSTRUCAO . CONTEUDO DA MEMORIA DE DADOS: nn” ) ; f p r i n t f ( arqS , ”FINAL DA EXECUCAO DA INSTRUCAO . CONTEUDO DA MEMORIA DE DADOS: nn” ) ; for ( i =0; i <8; i ++){ p r i n t f ( ”MEMDADOS[%d]= %dn” , i , memDados [ i ] ) ; f p r i n t f ( arqS , ”MEMDADOS[%d]= %dn” , i , memDados [ i ] ) ; 170 } p r i n t f ( ”−−−−−−−−−−−−−−−−−−nnn” ) ; f p r i n t f ( arqS , ”−−−−−−−−−−−−−−−−−−nnn” ) ; break ; } 175 f r e e ( RIAux ) ; } Listing 11. Func¸ ˜ao imprimir 7.12. Func¸˜ao main Func¸˜ao principal respos´avel por chamar as demais func¸˜oes para a execuc¸˜ao do programa. # include ” s t d a f x . h” i n t tmain ( i n t argc , TCHAR∗ argv [ ] ) { TMem mem; 5 T I n s t r u c a o i n s t ; char∗ RI ; i n t tam , PC = 0 , ∗aux , ∗Reg , ∗temp , saida , f i n a l i z a r ; / / aux [0] = f l a g da i n s t r u c¸ ˜a o / / aux [1] = PC temp = ( i n t ∗) malloc (3∗ s i z e o f ( i n t ) ) ; 10 FILE ∗ arqS ; arqS = fopen ( ” saida . t x t ” ,”w” ) ; aux = ( i n t ∗) c a l l o c (3 , s i z e o f ( i n t ) ) ; Reg = ( i n t ∗) c a l l o c (8 , s i z e o f ( i n t ) ) ; RI = ( char ∗) c a l l o c ( coluna , s i z e o f ( char ) ) ; 15 temp = ( i n t ∗) malloc (3∗ s i z e o f ( i n t ) ) ; f i n a l i z a r = 1; s t a r t V a r i a v e i s (& i n s t ) ; tam = geraMemCod(&mem) ; while ( 1 ) { 20 b u s c a I n s t r u c a o (mem. memCod , RI ,&PC) ; aux [ 0 ] = IF ; aux [ 1 ] = PC ; imprimir ( i n s t . Reg ,mem. memDados , aux , RI , arqS ) ; i f ( d e c o d i f i c a I n s t r u c a o (& i n s t , RI , temp ) ) { aux [ 0 ] = ID ; 25 imprimir ( i n s t . Reg ,mem. memDados , aux , RI , arqS ) ; } e l s e break ;
  • 23. i f ( e x e c u t a I n s t r u c a o ( temp ,& i n s t . opCode ,& s a i d a ) ) { 30 aux [ 0 ] = EX; imprimir ( i n s t . Reg ,mem. memDados , aux , RI , arqS ) ; } e l s e break ; 35 i f ( ! f i n a l I n s t r u c a o (& i n s t ,& saida ,&PC ,mem. memDados ) ) { aux [ 0 ] = WB; imprimir ( i n s t . Reg ,mem. memDados , aux , RI , arqS ) ; aux [ 0 ] = FIM ; imprimir ( i n s t . Reg ,mem. memDados , aux , RI , arqS ) ; 40 break ; } e l s e { aux [ 0 ] = WB; imprimir ( i n s t . Reg ,mem. memDados , aux , RI , arqS ) ; 45 aux [ 0 ] = FIM ; imprimir ( i n s t . Reg ,mem. memDados , aux , RI , arqS ) ; } } p r i n t f ( ”%dn” , tam ) ; 50 f r e e ( temp ) ; f r e e ( aux ) ; f r e e ( Reg ) ; f r e e ( RI ) ; f c l o s e ( arqS ) ; 55 system ( ”pause” ) ; return 0; } Listing 12. Func¸ ˜ao main