Advertisement
Guest User

Untitled

a guest
Aug 24th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # Token de instruções
  2. $insts = ['mov', 'xor', 'cmp', 'je', 'jmp', 'call', 'syscall']
  3.  
  4. # Lista de macros do programa
  5. $macros = ['exit', 'print', 'scan', 'opcaoIncorreta']
  6.  
  7. # Hash que será enchida com as linhas de cada macro
  8. $linhas_macro = { }
  9.  
  10. # Lista de rótulos e seus endereços de memória
  11. $labels = { '.start': '28',
  12.             '.opened': '3b',
  13.             '.opening': '4e',
  14.             '.closed': '61',
  15.             '.closing': '74',
  16.             '.starting': '67',
  17.             '.end': 'bc',
  18.             '.open': 'b8',
  19.             '.close': '11' }
  20.  
  21. # Mnemónicos responsáveis por determinar o opcode
  22. $mnems = { 'mov rax':  { 'hexa': 'b8', 'tamanho': 5 },                   # não
  23.            'mov rdx':  { 'hexa': 'ba', 'tamanho': 8 },                   # não
  24.            'mov rdi':  { 'hexa': 'bf', 'tamanho': 8 },                   # não
  25.            'mov rsi':  { 'hexa': '48be853640000000', 'tamanho': 8 },     # certo
  26.            'mov BYTE[status]': { 'hexa': 'c60425aa3740', 'tamanho': 8 }, # não
  27.            'cmp': { 'hexa': '803c25ac3740', 'tamanho': 8 },              # não
  28.            'xor': { 'hexa': '4831ff', 'tamanho': 3 },                    # certo
  29.            'je':  { 'hexa': '74', 'tamanho': 2 },                        # não
  30.            'jmp': { 'hexa': 'eb57', 'tamanho': 2 },                      # certo
  31.            'call':  { 'hexa': 'e8c3fbffff', 'tamanho': 5 },              # certo
  32.            'syscall':  { 'hexa': '0f05', 'tamanho': 2 }, }               # certo
  33.  
  34. # Array que determina quais mnemónicos precisam levar em  consideração
  35. # o terceiro operador
  36. $ver_op_3 = ['mov rax', 'mov rdx', 'mov rdi', 'mov BYTE[status]', 'cmp']
  37.  
  38. # Constantes do sistema
  39. $constantes = { 'STDIN': 0,
  40.                 'STDOUT': 1,
  41.                 'STDERR': 2,
  42.                 'SYS_READ': 0,
  43.                 'SYS_WRITE': 1,
  44.                 'SYS_EXIT': 60 }
  45.  
  46. # Variáveis do sistema (precisa alterar para o tamanho certo, fiquei com preguiça)
  47. $variaveis = {  'lenLabelFechado': 99,
  48.                 'lenPortaoFechado': 99,
  49.                 'lenLabelAbrindo': 99,
  50.                 'lenPortaoAbrindo': 99,
  51.                 'lenLabelFechando': 99,
  52.                 'lenLabelAberto': 99,
  53.                 'lenPortaoAberto': 99,
  54.                 'lenClear': 99,
  55.                 'lenEstadoAberto': 99,
  56.                 'lenMenu': 99,
  57.                 'lenMenuPrincipal': 99,
  58.                 'lenMenuFechado': 99,
  59.                 'lenMenuFechando': 99,
  60.                 'lenMenuAberto': 99,
  61.                 'lenIncorreta': 99,
  62.                 'lenOpcao': 99 }
  63.  
  64. # Parâmetros recebidos na macro
  65. $variaveis_macro = ['%1', '%2', '%3', '%4', '%1,', '%2,', '%3,', '%4,']
  66.  
  67. # Variável de ILC
  68. $ilc = 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement