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
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)
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
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)