Advertisement
ranisalt

Hex to MIPS bitwise

Jun 15th, 2013
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.52 KB | None | 0 0
  1. #!/usr/bin/python
  2. #coding=utf-8
  3. def get_cod():
  4.     return int(raw_input('Qual a instrução em código de máquina? '), 16)
  5.  
  6. def decode(b):
  7.     def get_opcode(opcode):
  8.         opcodes = {
  9.             8 : "addi",
  10.             12 : "andi",
  11.             4 : "beq",
  12.             5: "bne",
  13.             35 : "lw",
  14.             13 : "ori",
  15.             10 : "slti",
  16.             43 : "sw"
  17.         }
  18.         if opcode in opcodes.keys():
  19.             return opcodes[opcode]
  20.         raise LookupError
  21.        
  22.     def get_funct(funct):
  23.         functs = {
  24.             32 : "add",
  25.             36 : "and",
  26.             39 : "nor",
  27.             37 : "or",
  28.             42 : "slt",
  29.             0 : "sll",
  30.             2 : "srl",
  31.             34 : "sub"
  32.         }
  33.         if funct in functs.keys():
  34.             return functs[funct]
  35.         raise LookupError
  36.  
  37.     def get_reg(reg):
  38.         if not(reg in (24, 25)):
  39.             return ("$zero", "$at", "$v1", "$v2", "$a0", "$a1", "$a2", "$a3", "$t0", "$t1", "$t2", "$t3", "$t4", "$t5", "$t6", "$t7", "$s0", "$s1", "$s2", "$s3", "$s4", "$s5", "$s6", "$s7", None, None, "$k0", "$k1", "$gp", "$sp", "$fp", "$ra")[reg]
  40.         raise LookupError
  41.  
  42.     mips = ()
  43.     opcode = (b >> 26) & 63
  44.     #R
  45.     if opcode == 0:
  46.         mips = (get_funct(b & 63), (get_reg((b >> 21) & 31), get_reg((b >> 16) & 31), get_reg((b >> 11) & 31), str((b >> 6) & 31)))
  47.     #J
  48.     elif opcode == 2:
  49.         mips = ("j", (str(b & 67108863)))
  50.     #I
  51.     else:
  52.         mips = (get_opcode(opcode), (get_reg((b >> 21) & 31), get_reg((b >> 16) & 31), str(b & 65535)))
  53.     return " ".join((mips[0], ", ".join(mips[1])))
  54.  
  55. while True:
  56.     try:
  57.         decode(get_cod())
  58.     except LookupError:
  59.         print "Houve um erro: a instrução não é válida."
  60.     except:
  61.         print "Houve um erro na execução do programa."
  62.         break;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement