예제 #1
0
def ret(RSP: Register, AR: ARegister, DR: DRegister, memory: Memory, PC: PC):
    """
    函数返回指令
    :param RSP:
    :param AR:
    :param DR:
    :param memory:
    :param PC:
    :return:
    """
    RSP.readData()
    AR.writeData()

    memory.readData(AR, DR)

    DR.readData()
    PC.writeData()

    RSP.data = RSP.data + 1
예제 #2
0
def push(regA: Register, RSP: Register, AR: ARegister, DR: DRegister,
         memory: Memory):
    """
    将指定寄存器的值压入栈中
    :param regA:
    :param RSP:
    :param AR:
    :param DR:
    :param memory:
    :return:
    """
    RSP.data = RSP.data - 1

    RSP.readData()
    AR.writeData()

    regA.readData()
    DR.writeData()

    memory.writeData(AR, DR)
예제 #3
0
def pop(regA: Register, RSP: Register, AR: ARegister, DR: DRegister,
        memory: Memory):
    """
    将栈顶值弹出到指定寄存器
    :param regA:
    :param RSP:
    :param AR:
    :param DR:
    :param memory:
    :return:
    """
    RSP.readData()
    AR.writeData()

    memory.readData(AR, DR)

    DR.readData()
    regA.writeData()

    RSP.data = RSP.data + 1
예제 #4
0
def call(RSP: Register, AR: ARegister, DR: DRegister, memory: Memory, PC: PC,
         Reg: Register):
    """
    函数调用指令, 注意: 由于在寻址之前需要进行若干操作, 在函数内调用寻址函数
    :param RSP:
    :param AR:
    :param DR:
    :param memory:
    :param PC:
    :param Reg:
    :return:
    """
    RSP.data = RSP.data - 1

    RSP.readData()
    AR.writeData()

    PC.readData()
    DR.writeData()

    memory.writeData(AR, DR)

    Reg.readData()
    PC.writeData()
def shr(rA: Register, rB: Register, psw: Psw):
    temp = (rB.data >> rA.data) & (cut_to_64 >> rA.data)
    res = temp & cut_to_64
    rB.data = res
    update_psw(temp, res, psw)
def sar(rA: Register, rB: Register, psw: Psw):
    temp = rB.data >> rA.data
    res = temp & cut_to_64
    rB.data = res
    update_psw(temp, res, psw)
def bit_and(rA: Register, rB: Register, psw: Psw):
    temp = rB.data & rA.data
    res = temp & cut_to_64
    rB.data = res
    update_psw(temp, res, psw)
def dec(rB: Register, psw: Psw):
    temp = rB.data - 1
    res = temp & cut_to_64
    rB.data = res
    update_psw(temp, res, psw)