Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- #coding=utf-8
- def get_cod():
- return int(raw_input('Qual a instrução em código de máquina? '), 16)
- def decode(b):
- def get_opcode(opcode):
- opcodes = {
- 8 : "addi",
- 12 : "andi",
- 4 : "beq",
- 5: "bne",
- 35 : "lw",
- 13 : "ori",
- 10 : "slti",
- 43 : "sw"
- }
- if opcode in opcodes.keys():
- return opcodes[opcode]
- raise LookupError
- def get_funct(funct):
- functs = {
- 32 : "add",
- 36 : "and",
- 39 : "nor",
- 37 : "or",
- 42 : "slt",
- 0 : "sll",
- 2 : "srl",
- 34 : "sub"
- }
- if funct in functs.keys():
- return functs[funct]
- raise LookupError
- def get_reg(reg):
- if not(reg in (24, 25)):
- 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]
- raise LookupError
- mips = ()
- opcode = (b >> 26) & 63
- #R
- if opcode == 0:
- mips = (get_funct(b & 63), (get_reg((b >> 21) & 31), get_reg((b >> 16) & 31), get_reg((b >> 11) & 31), str((b >> 6) & 31)))
- #J
- elif opcode == 2:
- mips = ("j", (str(b & 67108863)))
- #I
- else:
- mips = (get_opcode(opcode), (get_reg((b >> 21) & 31), get_reg((b >> 16) & 31), str(b & 65535)))
- return " ".join((mips[0], ", ".join(mips[1])))
- while True:
- try:
- decode(get_cod())
- except LookupError:
- print "Houve um erro: a instrução não é válida."
- except:
- print "Houve um erro na execução do programa."
- break;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement