Ejemplo n.º 1
0
    def operate(self):
        for line in self.ram1.d:
            print("-------------------------------------------------")
            print("Fetch:")
            print(f"La instrucción es: {self.ram1.d[line]}")
            self.delay1.tiempo()
            print("Decode:")
            for j in self.rom1.instructions:
                if self.ram1.d[line][0:4] == j:
                    print(self.rom1.instructions[j])
                    print(self.ram1.d[line][5:10])
                    self.delay1.tiempo()
                    print("Execute:")
                    if self.rom1.instructions[j] == "LOAD_R0":
                        self.rom1.valores()
                        posicion = int(self.ram1.d[line][5:10])
                        self.register.getvalue(self.rom1.val[posicion])
                        self.register.r0()

                    elif self.rom1.instructions[j] == "LOAD_R1":
                        self.rom1.valores()
                        posicion = int(self.ram1.d[line][5:10])
                        self.register.getvalue(self.rom1.val[posicion])
                        self.register.r1()

                    elif self.rom1.instructions[j] == "OUTPUT":
                        print(self.register.r1())

                    elif self.rom1.instructions[j] == "ADD":
                        a = self.ram1.d[line][5:7]
                        b = self.ram1.d[line][8:10]
                        print(a)
                        print(b)
                        alu1 = ALU(self.register.R0, self.register.R1, 0)
                        alu1.suma()
                        self.register.getvalue(alu1.result)
                        self.register.r1()

                    elif self.rom1.instructions[j] == "SUB":
                        a = self.ram1.d[line][5:7]
                        b = self.ram1.d[line][8:10]
                        print(a)
                        print(b)
                        alu1 = ALU(self.register.R0, self.register.R1, 0)
                        alu1.resta()

                    elif self.rom1.instructions[j] == "HALT":
                        exit()

                    elif self.rom1.instructions[j] == "AND":
                        a = self.ram1.d[line][5:7]
                        b = self.ram1.d[line][8:10]
                        print(a)
                        print(b)
                        alu1 = ALU(self.register.R0, self.register.R1, 0)
                        if alu1.And() == True:
                            print("La siguiente operación lógica es verdadera")
                        else:
                            print("La operación es falsa")

                    elif self.rom1.instructions[j] == "OR":
                        a = self.ram1.d[line][5:7]
                        b = self.ram1.d[line][8:10]
                        print(a)
                        print(b)
                        alu1 = ALU(self.register.R0, self.register.R1, 0)
                        if alu1.OR() == True:
                            print("La siguiente operación lógica es verdadera")
                        else:
                            print("La operación es falsa")

                    elif self.rom1.instructions[j] == "STORE_R0":
                        rom1 = Rom()
                        rom1.valores()
                        self.rom1.val[line][8:10] = self.register.R0
                        print(self.rom1.val[line][8:10])

                    elif self.rom1.instructions[j] == "STORE_R0":
                        rom1 = Rom()
                        rom1.valores()
                        self.rom1.val[line][8:10] = self.register.R1
                        print(self.rom1.val[line][8:10])

                    elif self.rom1.instructions[j] == "ILD_R0":
                        self.rom1.valores()
                        posicion = int(self.ram1.d[line][5:10])
                        self.register.getvalue(self.rom1.val[posicion])
                        self.register.r0()

                    elif self.rom1.instructions[j] == "ILD_R1":
                        self.rom1.valores()
                        posicion = int(self.ram1.d[line][5:10])
                        self.register.getvalue(self.rom1.val[posicion])
                        self.register.r1()

                    elif self.rom1.instructions[j] == "LOAD_R2":
                        self.rom1.valores()
                        posicion = int(self.ram1.d[line][5:10])
                        self.register.getvalue(self.rom1.val[posicion])
                        self.register.r2()

                    elif self.rom1.instructions[j] == "LOAD_R3":
                        pass

            print("-------------------------------------------------")
            self.delay1.tiempo()