Advertisement
webmanix

programa

Oct 18th, 2012
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.31 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <iostream>
  3.  
  4. struct _memoria {
  5.        int opcode;
  6.        int arg;
  7.        };
  8. struct _ambiente {
  9.        _memoria memoria[100];
  10.        int eip;
  11.        int pilha;
  12.        };
  13.  
  14. using namespace std;
  15.  
  16.     void leitura (struct _memoria memoria[100]){
  17.          int i,opcode,arg;
  18.          printf("digite o código e após digite um numero negativo para encerrar função\n");
  19.          for (i=0;i<100;i++){                    
  20.              scanf("%2d%2d",&opcode,&arg);
  21.              if (opcode<0)
  22.                  break;
  23.              memoria[i].opcode=opcode;
  24.              memoria[i].arg=arg;  
  25.          }// fim do for
  26.     }//fim da leitura
  27.  
  28.     int executar (struct _ambiente *ambiente){
  29.          int opcode = ambiente->memoria[ambiente->eip].opcode;
  30.          int arg = ambiente->memoria[ambiente->eip].arg;
  31.          
  32.          switch (opcode){
  33.                 case 10: scanf ("%d", &ambiente->memoria[arg].arg);
  34.                      break;
  35.                 case 11: printf ("%d\n", ambiente->memoria[arg].arg);
  36.                      break;
  37.                 case 20: ambiente->pilha = ambiente->memoria[arg].arg;
  38.                      break;
  39.                 case 21: ambiente->memoria[arg].arg = ambiente->pilha;
  40.                      break;
  41.                 case 30: ambiente->pilha += ambiente->memoria[arg].arg;
  42.                      break;
  43.                 case 31: ambiente->pilha -= ambiente->memoria[arg].arg;
  44.                      break;
  45.                 case 32: ambiente->pilha *= ambiente->memoria[arg].arg;
  46.                      break;
  47.                 case 40: ambiente->eip = arg;
  48.                      break;
  49.                 case 41: if (ambiente->pilha<0)
  50.                             ambiente->eip = arg;
  51.                          break;
  52.                 case 42: if (ambiente->pilha==0)
  53.                             ambiente->eip = arg;
  54.                          break;
  55.                 case 43: return 0;
  56.          }
  57.          if ((opcode!=40) || (opcode!=41) || (opcode!=42))
  58.                          ambiente->eip++;
  59.                          return 1;
  60.     }
  61.  
  62.  
  63. int main(int argc, char *argv[])
  64. {
  65.     _ambiente ambiente;
  66.     leitura(ambiente.memoria);
  67.     ambiente.eip = 0;
  68.     ambiente.pilha = 0;
  69.     system("CLS");
  70.     while(executar(&ambiente)==1){}
  71.     system("PAUSE");
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement