You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
29 lines
933 B
29 lines
933 B
from instruction.instruction import Instruction
|
|
|
|
|
|
# 存取类指令
|
|
class Ldst(Instruction):
|
|
def __init__(self, hw):
|
|
super().__init__(hw)
|
|
|
|
def instrDecode(self):
|
|
super().instrDecode()
|
|
instr = self.hw.pplReg[1][0].read()
|
|
mask1 = (1 << 5) - 1
|
|
base = (instr >> 21) & mask1 # 这里的rs为base
|
|
baseData = self.hw.genReg[base].read()
|
|
rt = (instr >> 16) & mask1
|
|
mask2 = (1 << 16) - 1
|
|
offset = instr & mask2
|
|
|
|
self.hw.pplReg[2][0].write(baseData) # A <= Reg[base]
|
|
self.hw.pplReg[2][1].write(rt) # B <= rt
|
|
self.hw.pplReg[2][2].write(offset) # C <= offset
|
|
|
|
def execute(self):
|
|
super().execute()
|
|
rt = self.hw.pplReg[2][1].read()
|
|
addr = self.hw.pplReg[2][0].read() + self.hw.pplReg[2][2].read() # 计算地址 = baseData+offset
|
|
self.hw.pplReg[3][0].write(addr)
|
|
self.hw.pplReg[3][1].write(rt)
|