重新整理指令
操作码(D7..4)及对应运行:
以ALU(上图74HC283
加法器)为中心,2个输入分别为A和B,1个输出S。
操作码解码后,选中一个输入数据A(上图
红色箭头),操作码的D3..0(上图
绿色箭头)为输入数据B,
选中一个(上图蓝色箭头)寄存器中保存运算结果S!
0000: SEL_B/SEL_A=00, 选择A寄存器为源寄存器,~LOAD3..0=1110选择A寄存器为宿寄存器,A=A+D3..0(ADD A, Im)
0001:
SEL_B/SEL_A=01, 选择B寄存器为源寄存器,~LOAD3..0=1110选择A寄存器为宿寄存器,A=B+D3..0(ADD A, B, Im)(当Im=0时,可记为MOV A,B)
0010: SEL_B/SEL_A=10, 选择DIPSW4为源数据,~LOAD3..0=1110选择A寄存器为宿寄存器,A=DIPSW4+D3..0(IN A, DIPSW4, Im)(用作Im=0时,记为IN A更合适吧)
0011: SEL_B/SEL_A=11, 选择0为源数据,~LOAD3..0=1110选择A寄存器为宿寄存器,A=D3..0(MOV A, Im)
0100: SEL_B/SEL_A=00, 选择A寄存器为源寄存器,~LOAD3..0=1101选择B寄存器为宿寄存器,B=A+D3..0(ADD B,A, Im)(Im=0时,记为MOV B,A)
0101: SEL_B/SEL_A=01, 选择B寄存器为源寄存器,~LOAD3..0=1101选择B寄存器为宿寄存器,B=B+D3..0(ADD B Im)
0110: SEL_B/SEL_A=10, 选择DIPSW4为源数据,~LOAD3..0=1101选择B寄存器为宿寄存器,B=DIPSW4+D3..0(IN B, DIPSW4, Im)(Im=0时,记为IN B更合适吧)
0111: SEL_B/SEL_A=11, 选择0为源数据,~LOAD3..0=1101选择B寄存器为宿寄存器,B=D3..0(MOV B, Im)
1000: SEL_B/SEL_A=01, 选择B寄存器为源寄存器,~LOAD3..0=1011选择OUT寄存器为宿寄存器,OUT=B(OUT B)
1001: SEL_B/SEL_A=01, 选择B寄存器为源寄存器,~LOAD3..0=1011选择OUT寄存器为宿寄存器,OUT=B+D3..0(OUT B,Im)
1010: SEL_B/SEL_A=11, 选择0为源数据,~LOAD3..0=1011选择OUT寄存器为宿寄存器,OUT=D3..0(OUT Im)
1011: SEL_B/SEL_A=11, 选择0为源数据,~LOAD3..0=1011选择OUT寄存器为宿寄存器,OUT=D3..0(OUT Im)
1100: SEL_B/SEL_A=01, 选择B为源数据,~LOAD3..0=C111(不)选择PC寄存器为宿寄存器,PC=B或PC=PC+1(JNC B)
1101: SEL_B/SEL_A=01, 选择B为源数据,~LOAD3..0=0111选择PC寄存器为宿寄存器,PC=B(JMP B)
1110: SEL_B/SEL_A=11, 选择0为源数据,~LOAD3..0=C111(不)选择PC寄存器为宿寄存器,PC=D3..0(JNC Im)
1111: SEL_B/SEL_A=11, 选择0为源数据,~LOAD3..0=0111选择PC寄存器为宿寄存器,PC=D3..0(JMP Im)
。。。