总共四个命令
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里定义的.