コード例 #1
0
 def __init__(self):
     self.root = Tk()
     self.root.title("psm Interpreter(" + filename + ")")
     self.def_color = self.root["bg"]
     
     self.is_changing = False
     
     self.IsHexVar = IntVar(self.root)
     self.IsHexVar.set(0)
     self.IsHexVar.trace("w",lambda *args:self.redraw())
     
     center_on_instruc_var = IntVar(self.root)
     
     self.mem_reg_frame = Frame(self.root)
     self.reg_g = RegisterGraphics(self.mem_reg_frame,self.IsHexVar)
     regs = self.registers()
     self.mem_g = GUI_Memory(regs["rSP"],self.mem_reg_frame,self.IsHexVar,center_on_instruc_var)
     
     self.inter_frame = Frame(self.root)
     
     self.state = GUI_State(self.inter_frame,self,regs["rBP"],regs["rIP"])
     self.cons_g = ConsoleGraphic(self.inter_frame)
     self.label_locs,exprs,to_fnum = psm_parser.parse_all(flines,regs,self.state,self.cons_g,self.mem_g)
     
     self.text_g = TextGraphic(self.root,to_fnum,self.label_locs,center_on_instruc_var)
     
     init_all(self.registers(),self.mem_g,self.state,self.label_locs,exprs,to_fnum)
     
     self.pack()
コード例 #2
0
    def __init__(self,*args):
        ProgramState.__init__(self,*args)
        self.breaks = set()
    def upon_exit(self):
        restart()
    def is_break(self):
        instruc = self.rIP.val.int
        return instruc in self.breaks or instruc == self.next_break

    
regs = {name:TextRegister(name) for name in reg_name_list}
mem = TextMemory(regs["rSP"])
state = TextState(regs["rBP"],regs["rIP"])

cons = TextConsole()
label_locs,exprs,to_fnum = psm_parser.parse_all(flines,regs,state,cons,mem)

init_all(regs,mem,state,label_locs,exprs,to_fnum)

to_unum = {inum:fnum + 1 for inum,fnum in to_fnum.items()}
to_inum = {unum:inum for inum,unum in to_unum.items()}
      
def restart():
    init_all(regs,mem,state,label_locs,exprs,to_fnum)

restart()

keyword = ""
while keyword != "quit":
    InCode = input()
    CodeChain = InCode.split()
コード例 #3
0
"""
produces an filename.s file with x86 instructions that can be
compiled with gcc and lib.s. 
"""
from interp_core import *
import psm_parser
import subprocess
from platform_check import *

regs = {name:Register(name)for name in reg_name_list}
label_locs,comp_lines,to_fnum = psm_parser.parse_all(flines,regs,ProgramState(regs["rBP"],regs["rIP"]),object(),Memory(regs["rSP"]))

reduced_filename = filename[:filename.index(".")]
assembly_filename = reduced_filename + ".s"

file = open(assembly_filename,"w")

#necessary gcc framework 
main_name = "main" if is_gcc() else "_main"
file.write(".globl " + main_name + "\n")

#map from comp_lines indices to label names
loc_labels = {num - start_rIP:name for name,num in label_locs.items()}

for n,line in enumerate(comp_lines):
    if n in loc_labels:
        lab_name = main_name if loc_labels[n] == "main" else loc_labels[n]
        
        file.write(lab_name + ":\n")
    
    file.write(line.to_x86() + "#" + flines[to_fnum[n + start_rIP]].strip() + "\n")