Beispiel #1
0
def fetchchanges(ac, mq, mbr, ibr, ir, mar,
                 pc):  #Prints changes after each fetch cycle
    print("FETCHING INSTRUCTION")
    if (ac == ''):
        print("AC = ", ac)
    else:
        print("AC = ", ac, "Decimal value of AC = ",
              bintodec.signedbintodec(bintodec.bintodec(ac), 40))

    if (mq == ''):
        print("MQ = ")
    else:
        print("MQ = ", mq, "Decimal value of MQ = ",
              bintodec.signedbintodec(bintodec.bintodec(mq), 40))
    print("MBR = ", mbr)
    print("IBR = ", ibr)
    if (ir == ''):
        print("IR = ", ir)
    else:
        print("IR = ", ir, "Decimal value of IR = ", bintodec.bintodec(ir))

    if (mar == ''):
        print("MAR = ", mar)
    else:
        print("MAR = ", mar, "Decimal value of MAR = ", bintodec.bintodec(mar))
    print("PC = ", pc + 1)
    print()
Beispiel #2
0
def executechanges(ac, mq, mbr, ibr, ir, mar,
                   pc):  #prints changes after each execution cycle
    print("EXECUTE CHANGES")
    if (ac == ''):
        print("AC = ", ac)
    else:
        print("AC = ", ac, "Decimal value of AC = ",
              bintodec.signedbintodec(bintodec.bintodec(ac), 40))

    if (mq == ''):
        print("MQ = ")
    else:
        print("MQ = ", mq, "Decimal value of MQ = ",
              bintodec.signedbintodec(bintodec.bintodec(mq), 40))
    print("MBR = ", mbr)
    print("IBR = ", ibr)
    if (ir == ''):
        print("IR = ", ir)
    else:
        print("IR = ", ir, "Decimal value of IR = ", bintodec.bintodec(ir))

    if (mar == ''):
        print("MAR = ", mar)
    else:
        print("MAR = ", mar, "Decimal value of MAR = ", bintodec.bintodec(mar))
    print("PC = ", pc + 1)
    print()
Beispiel #3
0
def div(
    mbr, ac
):  #function to perform DIV Instruction, this function basically performs function of ALU for DIV
    mbr_dec = bintodec.signedbintodec(bintodec.bintodec(mbr), 40)
    ac_dec = bintodec.signedbintodec(bintodec.bintodec(ac), 40)
    quo_dec = int(ac_dec / mbr_dec)
    rem_dec = ac_dec % mbr_dec
    return_str = dectobin.dectosignedbin(rem_dec) + dectobin.dectosignedbin(
        quo_dec)
    return return_str
Beispiel #4
0
def mul(
    mbr, mq
):  #function to perform MUL Instruction, this function basically performs function of ALU for MUL
    mbr_dec = bintodec.signedbintodec(bintodec.bintodec(mbr), 40)
    mq_dec = bintodec.signedbintodec(bintodec.bintodec(mq), 40)
    result_dec = mbr_dec * mq_dec
    if (result_dec >= 0):
        bin_str = bin(result_dec).replace("0b", "")
        while (len(bin_str) != 80):
            bin_str = "0" + bin_str

        return bin_str

    else:
        result_dec *= -1
        bin_str = bin(result_dec).replace("0b", "")

        while (len(bin_str) != 80):
            bin_str = "0" + bin_str
        return dectobin.findTwoscomplement(bin_str)
Beispiel #5
0
            pc = pc + 1
            ibr = ''

        fetchchanges(ac, mq, mbr, ibr, ir, mar, pc)

        decode(ir, mar)  #decode and execute begins

        if (bintodec.bintodec(ir) == 1):  #LOAD M(X) INSTRUCTION
            mbr = memory[bintodec.bintodec(mar) - 1]
            ac = mbr
            executechanges(ac, mq, mbr, ibr, ir, mar, pc)

        elif (bintodec.bintodec(ir) == 2):  #LOAD -M(X) INSTRUCTION
            mbr = memory[bintodec.bintodec(mar) - 1]
            ac = dectobin.dectosignedbin(
                -1 * bintodec.signedbintodec(bintodec.bintodec(mbr), 40))
            executechanges(ac, mq, mbr, ibr, ir, mar, pc)

        elif (bintodec.bintodec(ir) == 9):  #LOAD M(X), MQ INSTRUCTION
            mbr = memory[bintodec.bintodec(mar) - 1]
            mq = dectobin.dectosignedbin(
                bintodec.signedbintodec(bintodec.bintodec(mbr), 40))
            executechanges(ac, mq, mbr, ibr, ir, mar, pc)

        elif (bintodec.bintodec(ir) == 10):  #LOAD MQ INSTRUCTION
            ac = mq
            mq = ''
            executechanges(ac, mq, mbr, ibr, ir, mar, pc)

        elif (bintodec.bintodec(ir) == 5):  #ADD M(X) INSTRUCTION
            mbr = memory[bintodec.bintodec(mar) - 1]