Simple assembler interpreter:python实现一个简单的汇编解释器

总共四个命令

mov:赋值

inc:值+1

dec:值-1

jnc:如果的一个参数不是0,则跳跃第二个参数指定的行数

 代码有点丑:

def simple_assembler(program):
  # return a dictionary with the registers
    pointer = [0]
    parameter_dict = {}
    while pointer[0] < len(program):
        excute(program[pointer[0]],parameter_dict,pointer)
        pointer[0]= pointer[0] +1
    return parameter_dict
    
def excute(code,dict,pointer):
    splitted_code = code.split()
    if "mov" in splitted_code[0]:
        if not splitted_code[2].isalpha():
            dict[splitted_code[1]]=int(splitted_code[2])
        else:
            dict[splitted_code[1]]= dict[splitted_code[2]]

    if "inc" in splitted_code[0]:
        dict[splitted_code[1]] = int(dict[splitted_code[1]])+1
    if "dec" in splitted_code[0]:
        dict[splitted_code[1]] = int(dict[splitted_code[1]])-1
    if "jnz" in splitted_code[0]:
        if splitted_code[1].isalpha():
            if int(dict[splitted_code[1]]) != 0:
                pointer[0] = pointer[0] + int(splitted_code[2])-1
        else:
            
            if splitted_code[1] != 0: 
                pointer[0] = pointer[0] + int(splitted_code[2])-1

缺点:

excute函数需要的参数好像太多了,而且改动都是在simple_assembler里定义的.
 

猜你喜欢

转载自www.cnblogs.com/ifyoudieyoudie/p/10867176.html
今日推荐