由于寻址能力的限制于是通过编译器实现了标签,call,ret等指令
编译器:
import os
import re
import PIN
import FETCH
#指令集
cmds = {
0:{
'HTL':[FETCH.HTL],
'NOP':[0]
}
,
1:{
'JMP':{
0:[FETCH.JMP|0],
1:[FETCH.JMP|1],
2:[FETCH.JMP|2]
},
'INC': {
1: [FETCH.INC | 1],
2: [FETCH.INC | 2],
3: [FETCH.INC | 3]
},
'DSC': {
1: [FETCH.DSC | 1],
2: [FETCH.DSC | 2],
3: [FETCH.DSC | 3]
},
'NOT': {
1: [FETCH.NOT | 1],
2: [FETCH.NOT | 2],
3: [FETCH.NOT | 3]
},
'JZ':{
0: [FETCH.JZ | 0],
1: [FETCH.JZ | 1],
3: [FETCH.JZ | 2]
},
'PUSH':{
0: [FETCH.PUSH |0],
1: [FETCH.PUSH |1],
2: [FETCH.PUSH |2],
3: [FETCH.PUSH |3]
},
'POP':{
0:[FETCH.POP |0],
1:[FETCH.POP |1],
2:[FETCH.POP |2],
3:[FETCH.POP |3]
}
}
,
2:{
'MOV':{
(1,0):[FETCH.MOV|1<<2],
(1,1):[FETCH.MOV|1<<2|1],
(1,2):[FETCH.MOV|1<<2|1<<1],
(1,3):[FETCH.MOV|1<<2|1<<1|1],
(2, 0): [FETCH.MOV | 1 << 3],
(2, 1): [FETCH.MOV | 1 << 3 | 1],
(2, 2): [FETCH.MOV | 1 << 3 | 1 << 1],
(2, 3): [FETCH.MOV | 1 << 3 | 1 << 1 | 1],
(3, 0): [FETCH.MOV | 1 << 2| 1 << 3],
(3, 1): [FETCH.MOV | 1 << 2 | 1 << 3| 1],
(3, 2): [FETCH.MOV | 1 << 2 | 1 << 3| 1 << 1],
(3, 3): [FETCH.MOV | 1 << 2 | 1 << 3| 1 << 1 | 1]
},
'ADD':{
(1, 0): [FETCH.ADD | 1 << 2],
(1, 1): [FETCH.ADD | 1 << 2 | 1],
(1, 2): [FETCH.ADD | 1 << 2 | 1 << 1],
(1, 3): [FETCH.ADD | 1 << 2 | 1 << 1 | 1],
(2, 0): [FETCH.ADD | 1 << 3],
(2, 1): [FETCH.ADD | 1 << 3 | 1],
(2, 2): [FETCH.ADD | 1 << 3 | 1 << 1],
(2, 3): [FETCH.ADD | 1 << 3 | 1 << 1 | 1],
(3, 0): [FETCH.ADD | 1 << 2 | 1 << 3],
(3, 1): [FETCH.ADD | 1 << 2 | 1 << 3 | 1],
(3, 2): [FETCH.ADD | 1 << 2 | 1 << 3 | 1 << 1],
(3, 3): [FETCH.ADD | 1 << 2 | 1 << 3 | 1 << 1 | 1]
},
'SUB':{
(1, 0): [FETCH.SUB | 1 << 2],
(1, 1): [FETCH.SUB | 1 << 2 | 1],
(1, 2): [FETCH.SUB | 1 << 2 | 1 << 1],
(1, 3): [FETCH.SUB | 1 << 2 | 1 << 1 | 1],
(2, 0): [FETCH.SUB | 1 << 3],
(2, 1): [FETCH.SUB | 1 << 3 | 1],
(2, 2): [FETCH.SUB | 1 << 3 | 1 << 1],
(2, 3): [FETCH.SUB | 1 << 3 | 1 << 1 | 1],
(3, 0): [FETCH.SUB | 1 << 2 | 1 << 3],
(3, 1): [FETCH.SUB | 1 << 2 | 1 << 3 | 1],
(3, 2): [FETCH.SUB | 1 << 2 | 1 << 3 | 1 << 1],
(3, 3): [FETCH.SUB | 1 << 2 | 1 << 3 | 1 << 1 | 1]
},
'AND': {
(1, 0): [FETCH.AND | 1 << 2],
(1, 1): [FETCH.AND | 1 << 2 | 1],
(1, 2): [FETCH.AND | 1 << 2 | 1 << 1],
(1, 3): [FETCH.AND | 1 << 2 | 1 << 1 | 1],
(2, 0): [FETCH.AND | 1 << 3],
(2, 1): [FETCH.AND | 1 << 3 | 1],
(2, 2): [FETCH.AND | 1 << 3 | 1 << 1],
(2, 3): [FETCH.AND | 1 << 3 | 1 << 1 | 1],
(3, 0): [FETCH.AND | 1 << 2 | 1 << 3],
(3, 1): [FETCH.AND | 1 << 2 | 1 << 3 | 1],
(3, 2): [FETCH.AND | 1 << 2 | 1 << 3 | 1 << 1],
(3, 3): [FETCH.AND | 1 << 2 | 1 << 3 | 1 << 1 | 1]
},
'XOR': {
(1, 0): [FETCH.XOR | 1 << 2],
(1, 1): [FETCH.XOR | 1 << 2 | 1],
(1, 2): [FETCH.XOR | 1 << 2 | 1 << 1],
(1, 3): [FETCH.XOR | 1 << 2 | 1 << 1 | 1],
(2, 0): [FETCH.XOR | 1 << 3],
(2, 1): [FETCH.XOR | 1 << 3 | 1],
(2, 2): [FETCH.XOR | 1 << 3 | 1 << 1],
(2, 3): [FETCH.XOR | 1 << 3 | 1 << 1 | 1],
(3, 0): [FETCH.XOR | 1 << 2 | 1 << 3],
(3, 1): [FETCH.XOR | 1 << 2 | 1 << 3 | 1],
(3, 2): [FETCH.XOR | 1 << 2 | 1 << 3 | 1 << 1],
(3, 3): [FETCH.XOR | 1 << 2 | 1 << 3 | 1 << 1 | 1]
},
'OR': {
(1, 0): [FETCH.OR | 1 << 2],
(1, 1): [FETCH.OR | 1 << 2 | 1],
(1, 2): [FETCH.OR | 1 << 2 | 1 << 1],
(1, 3): [FETCH.OR | 1 << 2 | 1 << 1 | 1],
(2, 0): [FETCH.OR | 1 << 3],
(2, 1): [FETCH.OR | 1 << 3 | 1],
(2, 2): [FETCH.OR | 1 << 3 | 1 << 1],
(2, 3): [FETCH.OR | 1 << 3 | 1 << 1 | 1],
(3, 0): [FETCH.OR | 1 << 2 | 1 << 3],
(3, 1): [FETCH.OR | 1 << 2 | 1 << 3 | 1],
(3, 2): [FETCH.OR | 1 << 2 | 1 << 3 | 1 << 1],
(3, 3): [FETCH.OR | 1 << 2 | 1 << 3 | 1 << 1 | 1]
},
'CMP':{
(1, 0): [FETCH.CMP | 1 << 2],
(1, 1): [FETCH.CMP | 1 << 2 | 1],
(1, 2): [FETCH.CMP | 1 << 2 | 1 << 1],
(1, 3): [FETCH.CMP | 1 << 2 | 1 << 1 | 1],
(2, 0): [FETCH.CMP | 1 << 3],
(2, 1): [FETCH.CMP | 1 << 3 | 1],
(2, 2): [FETCH.CMP | 1 << 3 | 1 << 1],
(2, 3): [FETCH.CMP | 1 << 3 | 1 << 1 | 1],
(3, 0): [FETCH.CMP | 1 << 2 | 1 << 3],
(3, 1): [FETCH.CMP | 1 << 2 | 1 << 3 | 1],
(3, 2): [FETCH.CMP | 1 << 2 | 1 << 3 | 1 << 1],
(3, 3): [FETCH.CMP | 1 << 2 | 1 << 3 | 1 << 1 | 1]
}
}
}
#操作数类型,寄存器或立即数
sdtype ={
0:0,
1:1,
2:2,
3:3
}
#寄存器内存位置
regist = {
'MSR':PIN.MSR_R,'MAR':PIN.MAR_R,'MDR':PIN.MDR_R,'A':PIN.A_R,'B':PIN.B_R,'C':PIN.C_R,'D':PIN.D_R,'TM1':PIN.TM1_R,'TM2':PIN.TM2_R,'BP':PIN.BP_R,'SP':PIN.SP_R,'CS':PIN.CS_R,'DS':PIN.DS_R,'SS':PIN.SS_R,'ES':PIN.ES_R,'DI':PIN.DI_R,'SI':PIN.SI_R,'VEC':PIN.VEC_R
}
mt_lj = re.compile(r'\[(.*?)]')
#处理汇编源文件
class code :
def __init__(self,source):
self.source = source.upper()
self.dst = None
self.src = None
self.src_type = None
self.dst_type = None
self.cmd = None
#获取指令的操作数类型
def get_sdtype(self):
if self.src:
if '[' in self.src:
#print(self.src)
self.src = mt_lj.match(self.src).group(1)
if self.src in regist:
self.src_type = sdtype[3]
else :
self.src_type = sdtype[1]
else :
if self.src in regist:
self.src_type = sdtype[2]
else :
self.src_type = sdtype[0]
if self.dst:
if '[' in self.dst:
self.dst = mt_lj.match(self.dst).group(1)
if self.dst in regist:
self.dst_type = sdtype[3]
self.asmtobyte()
return
else :
self.dst_type = sdtype[1]
self.asmtobyte()
return
else :
if self.dst in regist:
self.dst_type = sdtype[2]
self.asmtobyte()
return
else :
self.dst_type = sdtype[0]
self.asmtobyte()
return
#将汇编代码转换为机器码
def asmtobyte(self):
if self.dst:
if self.src:
cmd = cmds[2][self.op][(self.dst_type,self.src_type)]
self.cmd = cmd[0]
if self.dst in regist:
#print(self.dst)
self.dst = regist[self.dst]
else :
self.dst = int(self.dst)
if self.src in regist:
self.src = regist[self.src]
else:
self.src = int(self.src)
return
cmd = cmds[1][self.op][self.dst_type]
self.cmd = cmd[0]
if self.dst in regist:
#print(self.dst)
self.dst = regist[self.dst]
else:
self.dst = int(self.dst)
self.src = 0
return
else :
self.cmd = cmds[0][self.op][0]
self.src = 0
self.dst = 0
return
def handle_source0(self):
if '\n' in self.source:
self.source = re.sub(r'\n','',self.source)
self.op = list(filter(None, re.split(' +', self.source)))[0]
self.asmtobyte()
return
#处理2地址指令
def handle_source2(self):
if '\n' in self.source.split(',')[1]:
real = re.sub(r'\n','',self.source.split(',')[1])
self.src = real
else :
self.src = self.source.split(',')[1]
op_dst = list(filter(None,re.split(r' +',re.split(',',self.source)[0])))
self.op = op_dst[0]
self.dst = op_dst[1]
self.get_sdtype()
return
def handle_source1(self):
if '\n' in self.source:
self.source = re.sub(r'\n','',self.source)
op_dst = list(filter(None,re.split(' +',self.source)))
self.op = op_dst[0]
self.dst = op_dst[1]
self.get_sdtype()
return
# 判断指令为几地址指令
def get_src(self):
result = self.source.split(',')
length = len(result)
if length >2:
print('参数过长')
return
if length ==2:
self.handle_source2()
return self.cmd,self.dst,self.src
if length ==1:
ABC = list(filter(None,re.split(' +',self.source)))
if len(ABC)==2:
self.handle_source1()
return self.cmd,self.dst,self.src
else :
self.handle_source0()
return self.cmd, self.dst, self.src
#去除注释的正则匹配
commant = re.compile(r"(.*?) //")
filename = "source.txt"
pwd = os.getcwd()
file = os.path.join(pwd,filename)
#主函数
def main():
result = [0 for i in range(2500)]#初始化数组
cmdnum = 0 #记录指令总数
with open(file,"r",encoding="utf-8") as f:
lines = f.readlines()
length = len(lines)
line = 0
while True :
comants = commant.match(lines[line]) #去除注释
if comants:
lines[line] = comants.group(1)
if "CALL" in lines[line].upper():
fct_name = list(filter(None,re.split(' +',lines[line])))
lines.insert(line,"MOV CS,MAR")
lines.insert(line+1, "PUSH B")
lines.insert(line+2, "ADD CS,25")
lines.insert(line+3,"PUSH CS")
lines.insert(line+4, "PUSH MAR")
lines.insert(line+5,'PUSH SS')
lines.insert(line+6,'PUSH SP')
lines.insert(line+7,f'JMP {fct_name[1]}')
lines.pop(line+8)
line+=7
continue
if "RET" in lines[line].upper():
lines.insert(line,"POP SP")
lines.insert(line+1, "POP SS")
lines.insert(line+2, "POP MAR")
lines.insert(line+3, "POP CS")
lines.insert(line+4,'POP B')
lines.insert(line+5,'POP A')
lines.insert(line+6,"JMP CS")
lines.pop(line+7)
line+=6
continue
line += 1
try :
if lines[line]:
continue
except :
break
#print(lines)
labels = {}
for source in lines:
source = source.upper()
try :
if ':' in source:
source = re.match(r'(.*?):',source).group(1)
labels[source] = cmdnum
continue
if source != '\n':
cmdnum+=3
else :
continue
except:
print('error')
#print(labels)
cmdnum=0
for source in lines:
source = source.upper()
try:
for label in labels:
if label in source:
source = source.replace(label, str(labels[label]))
break
process = code(source)
result[cmdnum], dst, src = process.get_src()
result[cmdnum + 1] = dst
result[cmdnum + 2] = src
cmdnum += 3
except:
print('\n')
print(lines)
print(result)
#将转换好的机器码存取进内存中
with open('cmd.bin','wb') as f:
for i in range(len(result)):
result_byte = result[i].to_bytes(1,"little")
f.write(result_byte)
if __name__ == "__main__":
main()
译码器
import PIN
import FETCH
def handle_addr2(op,i,index):
global MICCOR #声明全局
if (op) == 138:
print(MICCOR[i])
amd = (op>>2)&3 #获取目标类型
#print(amd)
ams = op&3 #获取数据源类型
am = (amd,ams)
op = op&0xf0
if op in FETCH.Cmd_Center[2]:
#print(op)
try:
indexs = len(FETCH.Cmd_Center[2][op][am]) #获取指令长度
print(index)
except:
return
else :
return
if index<indexs:
MICCOR[i] = FETCH.Cmd_Center[2][op][am][index]#写指令
print('ok')
#print(MICCOR[i])
#print(MICCOR[i])
return
def handle_addr1(op,i,index,psw):
global MICCOR #声明全局
ams = op&3 #获取数据类型
op = op & 28
#print(op)
if op in FETCH.Cmd_Center[1]:
try:
indexs = len(FETCH.Cmd_Center[1][op][ams]) # 获取指令长度
if op == 20 and (psw & 3 == 3):
indexs = len(FETCH.Cmd_Center[1][op][ams + 5])
except:
return
else :
return
#print(amd)
if index<indexs:
if op == 20 and (psw & 3 == 3):
MICCOR[i] = FETCH.Cmd_Center[1][op][ams+5][index]
return
MICCOR[i] = FETCH.Cmd_Center[1][op][ams][index]#写指令
return
def handle_addr0(op,i,index):
global MICCOR #声明全局
if op in FETCH.Cmd_Center[0]:
indexs = len(FETCH.Cmd_Center[0][op]) #获取指令长度
else :
return
if index<indexs:
MICCOR[i] = FETCH.Cmd_Center[0][op][index]#写指令
return
MICCOR = [PIN.clean for _ in range(0x10000)] #初始化数组为HTL
result = b""
for i in range(0x10000):
op = i>>8
psw = i>>4&0xf
one = i&0xf
if one <6:
MICCOR[i] = FETCH.FETCH[one]
continue
addr1 = op&1<<3|op&1<<2|op&1<<4 #1地址指令
addr2 = op&1<<7|op&1<<6|op&1<<5 #2地址指令
print(addr2)
index = one-6 #获取指令索引
if addr2:
#print(op)
handle_addr2(op,i,index)
elif addr1:
handle_addr1(op,i,index,psw)
else:
handle_addr0(op,i,index)
for i in range(0x10000):
result += MICCOR[i].to_bytes(4,"little")
#print(result)
with open("1.bin","wb") as f:
f.write(result)
指令集
import PIN
import PIN as pin
FETCH = [
pin.PC_READ|PIN.MAR_W,
pin.MC_R|PIN.PC_NOMAL_WORK|PIN.IR_W,
pin.PC_READ|PIN.MAR_W,
pin.MC_R|PIN.PC_NOMAL_WORK|PIN.DST_W,
pin.PC_READ|PIN.MAR_W,
pin.MC_R|PIN.PC_NOMAL_WORK|PIN.SRC_W
]
dir = 0 #直接寻址 MOV A,5
idt = 1#立即数寻址 MOV A,[5]
reg = 2 #寄存器寻址 MOV A,B
reg_indir = 3 #寄存器间接寻址 MOV A,[B]
MOV = 1<<7
ADD = 1<<6
SUB = 1<<5
OR = 1<<5|1<<6
AND = 1<<7|1<<6|1<<5
XOR = 1<<7|1<<6
INC = 1<<3|1<<2
CMP = 1<<7|1<<5
DSC = 1<<2
NOT = 1<<4
JMP = 1<<3
HTL = 1
NOP = 0
JZ = 1<<4|1<<2
PUSH = 1<<4|1<<2|1<<3
POP = 1<<4|1<<3
Cmd_Center = {
0:{
NOP :[0],
HTL:[PIN.HTL],
},
1:{
JMP:{
0:[PIN.DST_R|PIN.PC_SETAD],
1:[PIN.DST_R|PIN.PC_SETAD],
2:[PIN.DR|PIN.DST_W,PIN.DST_R|PIN.PC_SETAD],
3:[]
},
INC: {
0:[],
1:[PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.OP_INC|PIN.ALU_R|PIN.MC_W],
2:[PIN.DR|PIN.A_W,PIN.ALU_R|PIN.DW|PIN.OP_INC],
3:[PIN.DR|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.OP_INC|PIN.ALU_R|PIN.MC_W]
},
DSC:{
0: [],
1: [PIN.DST_R | PIN.MAR_W, PIN.MC_R | PIN.A_W, PIN.OP_DSC | PIN.ALU_R | PIN.MC_W],
2: [PIN.DR | PIN.A_W, PIN.ALU_R | PIN.DW | PIN.OP_DSC],
3: [PIN.DR | PIN.MAR_W, PIN.MC_R | PIN.A_W, PIN.OP_DSC | PIN.ALU_R | PIN.MC_W]
},
NOT :{
0: [],
1: [PIN.DST_R | PIN.MAR_W, PIN.MC_R | PIN.A_W, PIN.OP_NOT | PIN.ALU_R | PIN.MC_W],
2: [PIN.DR | PIN.A_W, PIN.ALU_R | PIN.DW | PIN.OP_NOT],
3: [PIN.DR | PIN.MAR_W, PIN.MC_R | PIN.A_W, PIN.OP_NOT | PIN.ALU_R | PIN.MC_W]
},
JZ:{
5: [PIN.DST_R | PIN.PC_SETAD],
6: [PIN.DST_R | PIN.PC_SETAD],
7: [PIN.DR | PIN.DST_W, PIN.DST_R | PIN.PC_SETAD],
8: [],
0: [],
1: [],
2: [],
3: []
},
PUSH :{
0:[PIN.SS_R|PIN.A_W,PIN.SP_R|PIN.B_W|PIN.OP_ADD,PIN.ALU_R|PIN.MAR_W,PIN.MC_W|PIN.DST_R,PIN.SP_R|PIN.A_W,PIN.ALU_R|PIN.SP_W|PIN.OP_DSC],
1:[PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.SS_R|PIN.A_W,PIN.SP_R|PIN.B_W|PIN.OP_ADD,PIN.ALU_R|PIN.MAR_W,PIN.MC_W|PIN.DST_R,PIN.SP_R|PIN.A_W,PIN.OP_DSC|PIN.ALU_R|PIN.SP_W],
2:[PIN.SS_R|PIN.A_W,PIN.SP_R|PIN.B_W|PIN.OP_ADD,PIN.ALU_R|PIN.MAR_W,PIN.MC_W|PIN.DR,PIN.SP_R|PIN.A_W,PIN.OP_DSC|PIN.ALU_R|PIN.SP_W],
3:[PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.DST_W,PIN.SS_R|PIN.A_W,PIN.SP_R|PIN.B_W|PIN.OP_ADD,PIN.ALU_R|PIN.MAR_W,PIN.MC_W|PIN.DST_R,PIN.SP_R|PIN.A_W,PIN.ALU_R|PIN.SP_W|PIN.OP_DSC]
},
POP:{
0:[],
1:[],
2:[PIN.SP_R|PIN.A_W,PIN.OP_INC|PIN.ALU_R|PIN.SP_W,PIN.SS_R|PIN.A_W,PIN.SP_R|PIN.B_W|PIN.OP_ADD,PIN.ALU_R|PIN.MAR_W,PIN.MC_R|PIN.DW],
3:[]
}
},
2:{
MOV:{
(1, 0):[PIN.DST_R|PIN.MAR_W,PIN.SRC_R|PIN.MC_W],
(1, 1):[PIN.SRC_R|PIN.MAR_W,PIN.SRC_W|PIN.MC_R,PIN.DST_R|PIN.MAR_W,PIN.SRC_R|PIN.MC_W],
(1, 2):[PIN.DST_R|PIN.MAR_W,PIN.SR|PIN.MC_W],
(1, 3):[PIN.SR|PIN.MAR_W,PIN.SRC_W|PIN.MC_R,PIN.DST_R|PIN.MAR_W,PIN.SRC_R|PIN.MC_W],
(2, 0):[PIN.DW|PIN.SRC_R],
(2, 1):[PIN.SRC_R|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.SRC_R|PIN.DW],
(2, 2):[PIN.DW|PIN.SR],
(2, 3):[PIN.SR|PIN.SRC_W,PIN.DW|PIN.SRC_R],
(3, 0):[PIN.DR|PIN.MAR_W,PIN.SRC_R|PIN.MC_W],
(3, 1):[PIN.SRC_R|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DR|PIN.MAR_W,PIN.SRC_R|PIN.MC_W],
(3, 2):[PIN.DST_R|PIN.MAR_W,PIN.SR|PIN.MC_W],
(3, 3):[PIN.SR|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DR|PIN.MAR_W,PIN.SRC_R|PIN.MC_W]
},
ADD:{
(1, 0): [PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W|PIN.OP_ADD,PIN.ALU_R|PIN.MC_W],
(1, 1): [PIN.MAR_W|PIN.SRC_R,PIN.MC_R|PIN.SRC_W,PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W|PIN.OP_ADD,PIN.ALU_R|PIN.MC_W],
(1, 2): [PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SR|PIN.B_W|PIN.OP_ADD,PIN.ALU_R|PIN.MC_W],
(1, 3): [PIN.SR|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W|PIN.OP_ADD,PIN.ALU_R|PIN.MC_W],
(2, 0): [PIN.DR|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_ADD|PIN.ALU_R|PIN.DW],
(2, 1): [PIN.SRC_R|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DR|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_ADD|PIN.ALU_R|PIN.DW],
(2, 2): [PIN.DR|PIN.A_W,PIN.SR|PIN.B_W,PIN.OP_ADD|PIN.ALU_R|PIN.DW],
(2, 3): [PIN.SR|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DR|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_ADD|PIN.ALU_R|PIN.DW],
(3, 0): [PIN.DR|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_ADD|PIN.ALU_R|PIN.MC_W],
(3, 1): [PIN.SRC_R|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DR|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_ADD|PIN.ALU_R|PIN.MC_W],
(3, 2): [PIN.DR|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SR|PIN.B_W,PIN.OP_ADD|PIN.ALU_R|PIN.MC_W],
(3, 3): []
},
SUB:{
(1, 0): [PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W|PIN.OP_SUB,PIN.ALU_R|PIN.MC_W],
(1, 1): [PIN.MAR_W|PIN.SRC_R,PIN.MC_R|PIN.SRC_W,PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W|PIN.OP_SUB,PIN.ALU_R|PIN.MC_W],
(1, 2): [PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SR|PIN.B_W|PIN.OP_SUB,PIN.ALU_R|PIN.MC_W],
(1, 3): [PIN.SR|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W|PIN.OP_SUB,PIN.ALU_R|PIN.MC_W],
(2, 0): [PIN.DR|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_SUB|PIN.ALU_R|PIN.DW],
(2, 1): [PIN.SRC_R|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DR|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_SUB|PIN.ALU_R|PIN.DW],
(2, 2): [PIN.DR|PIN.A_W,PIN.SR|PIN.B_W,PIN.OP_SUB|PIN.ALU_R|PIN.DW],
(2, 3): [PIN.SR|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DR|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_SUB|PIN.ALU_R|PIN.DW],
(3, 0): [PIN.DR|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_SUB|PIN.ALU_R|PIN.MC_W],
(3, 1): [PIN.SRC_R|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DR|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_SUB|PIN.ALU_R|PIN.MC_W],
(3, 2): [PIN.DR|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SR|PIN.B_W,PIN.OP_SUB|PIN.ALU_R|PIN.MC_W],
(3, 3): []
},
XOR:{
(1, 0): [PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W|PIN.OP_XOR,PIN.ALU_R|PIN.MC_W],
(1, 1): [PIN.MAR_W|PIN.SRC_R,PIN.MC_R|PIN.SRC_W,PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W|PIN.OP_XOR,PIN.ALU_R|PIN.MC_W],
(1, 2): [PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SR|PIN.B_W|PIN.OP_XOR,PIN.ALU_R|PIN.MC_W],
(1, 3): [PIN.SR|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W|PIN.OP_XOR,PIN.ALU_R|PIN.MC_W],
(2, 0): [PIN.DR|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_XOR|PIN.ALU_R|PIN.DW],
(2, 1): [PIN.SRC_R|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DR|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_XOR|PIN.ALU_R|PIN.DW],
(2, 2): [PIN.DR|PIN.A_W,PIN.SR|PIN.B_W,PIN.OP_XOR|PIN.ALU_R|PIN.DW],
(2, 3): [PIN.SR|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DR|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_XOR|PIN.ALU_R|PIN.DW],
(3, 0): [PIN.DR|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_XOR|PIN.ALU_R|PIN.MC_W],
(3, 1): [PIN.SRC_R|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DR|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_XOR|PIN.ALU_R|PIN.MC_W],
(3, 2): [PIN.DR|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SR|PIN.B_W,PIN.OP_XOR|PIN.ALU_R|PIN.MC_W],
(3, 3): []
},
AND:{
(1, 0): [PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W|PIN.OP_AND,PIN.ALU_R|PIN.MC_W],
(1, 1): [PIN.MAR_W|PIN.SRC_R,PIN.MC_R|PIN.SRC_W,PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W|PIN.OP_AND,PIN.ALU_R|PIN.MC_W],
(1, 2): [PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SR|PIN.B_W|PIN.OP_AND,PIN.ALU_R|PIN.MC_W],
(1, 3): [PIN.SR|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W|PIN.OP_AND,PIN.ALU_R|PIN.MC_W],
(2, 0): [PIN.DR|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_AND|PIN.ALU_R|PIN.DW],
(2, 1): [PIN.SRC_R|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DR|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_AND|PIN.ALU_R|PIN.DW],
(2, 2): [PIN.DR|PIN.A_W,PIN.SR|PIN.B_W,PIN.OP_AND|PIN.ALU_R|PIN.DW],
(2, 3): [PIN.SR|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DR|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_AND|PIN.ALU_R|PIN.DW],
(3, 0): [PIN.DR|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_AND|PIN.ALU_R|PIN.MC_W],
(3, 1): [PIN.SRC_R|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DR|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_AND|PIN.ALU_R|PIN.MC_W],
(3, 2): [PIN.DR|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SR|PIN.B_W,PIN.OP_AND|PIN.ALU_R|PIN.MC_W],
(3, 3): []
},
OR:{
(1, 0): [PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W|PIN.OP_OR,PIN.ALU_R|PIN.MC_W],
(1, 1): [PIN.MAR_W|PIN.SRC_R,PIN.MC_R|PIN.SRC_W,PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W|PIN.OP_OR,PIN.ALU_R|PIN.MC_W],
(1, 2): [PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SR|PIN.B_W|PIN.OP_OR,PIN.ALU_R|PIN.MC_W],
(1, 3): [PIN.SR|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DST_R|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W|PIN.OP_OR,PIN.ALU_R|PIN.MC_W],
(2, 0): [PIN.DR|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_OR|PIN.ALU_R|PIN.DW],
(2, 1): [PIN.SRC_R|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DR|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_OR|PIN.ALU_R|PIN.DW],
(2, 2): [PIN.DR|PIN.A_W,PIN.SR|PIN.B_W,PIN.OP_OR|PIN.ALU_R|PIN.DW],
(2, 3): [PIN.SR|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DR|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_OR|PIN.ALU_R|PIN.DW],
(3, 0): [PIN.DR|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_OR|PIN.ALU_R|PIN.MC_W],
(3, 1): [PIN.SRC_R|PIN.MAR_W,PIN.MC_R|PIN.SRC_W,PIN.DR|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SRC_R|PIN.B_W,PIN.OP_OR|PIN.ALU_R|PIN.MC_W],
(3, 2): [PIN.DR|PIN.MAR_W,PIN.MC_R|PIN.A_W,PIN.SR|PIN.B_W,PIN.OP_OR|PIN.ALU_R|PIN.MC_W],
(3, 3): []
},
CMP:{
(1, 0): [PIN.DST_R | PIN.MAR_W, PIN.MC_R | PIN.A_W, PIN.SRC_R | PIN.B_W | PIN.OP_SUB, PIN.ALU_R | PIN.MC_W],
(1, 1): [PIN.MAR_W | PIN.SRC_R, PIN.MC_R | PIN.SRC_W, PIN.DST_R | PIN.MAR_W, PIN.MC_R | PIN.A_W,
PIN.SRC_R | PIN.B_W | PIN.OP_SUB, PIN.ALU_R | PIN.MC_W],
(1, 2): [PIN.DST_R | PIN.MAR_W, PIN.MC_R | PIN.A_W, PIN.SR | PIN.B_W | PIN.OP_SUB, PIN.ALU_R | PIN.MC_W],
(1, 3): [PIN.SR | PIN.MAR_W, PIN.MC_R | PIN.SRC_W, PIN.DST_R | PIN.MAR_W, PIN.MC_R | PIN.A_W,
PIN.SRC_R | PIN.B_W | PIN.OP_SUB, PIN.ALU_R | PIN.MC_W],
(2, 0): [PIN.DR | PIN.A_W, PIN.SRC_R | PIN.B_W, PIN.OP_SUB | PIN.ALU_R | PIN.DW],
(2, 1): [PIN.SRC_R | PIN.MAR_W, PIN.MC_R | PIN.SRC_W, PIN.DR | PIN.A_W, PIN.SRC_R | PIN.B_W,
PIN.OP_SUB | PIN.ALU_R | PIN.DW],
(2, 2): [PIN.DR | PIN.A_W, PIN.SR | PIN.B_W, PIN.OP_SUB | PIN.ALU_R | PIN.DW],
(2, 3): [PIN.SR | PIN.MAR_W, PIN.MC_R | PIN.SRC_W, PIN.DR | PIN.A_W, PIN.SRC_R | PIN.B_W,
PIN.OP_SUB | PIN.ALU_R | PIN.DW],
(3, 0): [PIN.DR | PIN.MAR_W, PIN.MC_R | PIN.A_W, PIN.SRC_R | PIN.B_W, PIN.OP_SUB | PIN.ALU_R | PIN.MC_W],
(3, 1): [PIN.SRC_R | PIN.MAR_W, PIN.MC_R | PIN.SRC_W, PIN.DR | PIN.MAR_W, PIN.MC_R | PIN.A_W,
PIN.SRC_R | PIN.B_W, PIN.OP_SUB | PIN.ALU_R | PIN.MC_W],
(3, 2): [PIN.DR | PIN.MAR_W, PIN.MC_R | PIN.A_W, PIN.SR | PIN.B_W, PIN.OP_SUB | PIN.ALU_R | PIN.MC_W],
(3, 3): []
}
}
}
你好呀