Exemplo n.º 1
0
 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
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
 def getAddress(self, reg):
     if reg in self.registers:
         return self.registers[reg]
     else:
         Service.ERROR("Error: " + Service.RegNotFound + "register: " + reg)
Exemplo n.º 7
0
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