diff --git a/cpu.py b/cpu.py new file mode 100644 index 0000000..2036bd3 --- /dev/null +++ b/cpu.py @@ -0,0 +1,36 @@ + + + + + +def get_value(b:bytearray): + ret=0 + for i,item in enumerate(b): + ret|=item<<(8*i) + return ret + +def set_value(b:bytearray,value:int): + for i in range(len(b)): + b[i]=(value>>(8*i))&0xff + + +class cpu(object): + def __init__(self,rom_addr:int,rom_size:int,mem_addr:int,mem_size:int) -> None: + self.rom_addr=rom_addr + self.rom=bytearray(rom_size) + self.mem_addr=mem_addr + self.mem=bytearray(mem_size) + def get_value(self,addr:int,size:int): + if not (size in [1,2,4,8]): + raise Exception(f"CPU 异常 因为地址未对齐 {size}") + if(addr>=self.rom_addr) and (addr=self.rom_addr) and (addr str: - print("变量类型") - for item in self.variable_type_list: - print(f"\t{item.attr}") - print("变量别名") - for item in self.variable_type_alias: - print(f"\t{item.attr.attr} eq {item.alias}") - print("变量栈") + def get_variable(self,name:str,member_stack:list[str]=[]): for item in self.stack: - print(f"\t{item.attr.attr} {item.name}={item.value()}") - return "" + if(item.name==name): + addr,size=item.member_value(member_stack) + print(f"addr={addr},size={size}") + return + + def __str__(self) -> str: + ret=string() + ret.write("变量类型\n") + for item in self.variable_type_list: + ret.write(f"\t{item.attr}\n") + ret.write("变量别名\n") + for item in self.variable_type_alias: + ret.write(f"\t{item.attr.attr} eq {item.alias}\n") + ret.write("变量栈\n") + for item in self.stack: + addr,size=item.value() + ret.write(f"\t{item.attr.attr} {item.name}={hex(addr)},{size}\n") + ret_str=ret.getvalue() + ret.close() + return ret_str if __name__ == "__main__": f=file() f.add_enum_type("enum1",[("ENUM0",0),("ENUM1",1)]) - f.add_struct_type(4,"struct1",[(f.get_variable_type(['int']),'a')]) + f.add_struct_type(4,"struct1",[ + (f.get_variable_type(['int']),'a'), + (f.get_variable_type(['int']),'b'), + ]) f.add_type_alias(['unsigned','char'],'uint8_t') f.add_variable(['unsigned','char'],'char_a',120) f.add_variable(['uint8_t'],'char_b',100) + f.add_variable(['struct',"struct1"],'struct_a') + f.get_variable("struct_a") + f.get_variable("struct_a",['a']) + f.get_variable("struct_a",['b']) print(f) \ No newline at end of file