def getCode(self, line): elements = line.split(" ") result = "" if elements[0] in self.codes: elements = Service.DeleteCommas(elements) imm = Service.Str2Num(elements[-1]) imm = Service.Addr2BinU(imm, 20) result += imm registers = Registers.Registers() result += registers.getAddress(elements[1]) result += self.opcode else: Service.ERROR("Error: " + Service.InstNotFound + "in line: " + line) return result
def getCode(self, line): elements = line.split(" ") result = "" if elements[0] in self.codes: elements = Service.DeleteCommas(elements) result = self.funct7.get(elements[0], "0000000") registers = Registers.Registers() result += registers.getAddress(elements[-1]) result += registers.getAddress(elements[-2]) result += self.funct3[elements[0]] result += registers.getAddress(elements[1]) result += self.opcode else: Service.ERROR("Error: " + Service.InstNotFound + "in line: " + line) return result
def getCode(self, line, labels): elements = line.split(" ") result = "" if elements[0] in self.codes: elements = Service.DeleteCommas(elements) addr = labels[elements[-1]] addr = Service.Addr2BinU(addr, 21) addr = addr[::-1] result += addr[20] result += addr[1:11][::-1] result += addr[11] result += addr[12:20][::-1] registers = Registers.Registers() result += registers.getAddress(elements[1]) result += self.opcode else: Service.ERROR("Error: " + Service.InstNotFound + "in line: " + lines) return result
def getCode(self, line): elements = line.split(" ") result = "" if elements[0] in self.codes: elements = Service.DeleteCommas(elements) addr = elements[-1] addr = addr.split("(") offset = Service.Str2Num(addr[0]) offset = Service.Addr2Bin(offset, 12) result += offset addr[-1] = addr[-1][:-1] registers = Registers.Registers() result += registers.getAddress(addr[-1]) result += self.funct3[elements[0]] result += registers.getAddress(elements[1]) result += self.opcode else: Service.ERROR("Error: " + Service.InstNotFound + "in line: " + lines) return result
def getCode(self, line, labels): elements = line.split(" ") result = "" if elements[0] in self.codes: #Тут возможна ошибка (надо проеверять есть ли метка в labels) elements = Service.DeleteCommas(elements) addr = labels[elements[3]] addr = Service.Addr2Bin(addr, 13) addr = addr[::-1] result += addr[12] + addr[5:11][::-1] registers = Registers.Registers() result += registers.getAddress(elements[2]) result += registers.getAddress(elements[1]) result += self.funct3[elements[0]] result += addr[1:5][::-1] result += addr[11] result += self.opcode else: Service.ERROR("Error: " + Service.InstNotFound + "in line: " + line) return result
def getAddress(self, reg): if reg in self.registers: return self.registers[reg] else: Service.ERROR("Error: " + Service.RegNotFound + "register: " + reg)
Is_t = I_shamt_type.I_shamt_type() Jal = JAL_instruction.JAL_instruction() Jalr = JALR_instruction.JALR_instruction() cfg = Service.readConfig("config.cfg") start_addr = 0 if "start_addr" in cfg: start_addr = Service.Str2Num(cfg["start_addr"]) data = "" file_addr = "in.ass" if "in_file_addr" in cfg: file_addr = cfg["in_file_addr"] pfile = open(file_addr) code = Service.SplitToDierctives(pfile) if ".CODE" not in code: Service.ERROR("CODE not found error!") dataD = "" dataK = "" code[".CODE"] = code[".CODE"][:-1].split('\n') if ".DATA" in code: code[".DATA"] = code[".DATA"][:-1].split('\n') code[".DATA"] = Service.ParseData(code[".DATA"]) dataK = code[".DATA"][0] dataD = code[".DATA"][1] ccode = Service.GetLabels(code[".CODE"]) code[".CODE"] = ccode[0] code = code[".CODE"] labels = ccode[1] code_end_addr = len(code) * 4