210 likes | 355 Views
以动画形式看几条指令的执行过程: 2200: ADD R2, R3 ; 3 条指令的地址为 2200 、 2201 、 2202 2201: JRNC 2200 ; 若 C=0 转去执行第 1 条,否则顺序执行 2202: STRR [R2], R3 ; 把 R3 的内容写入内存地址为 [R2] 的单元 程序运行的初始状态: 程序已读入内存,第 1 条指令地址已经在 PC 中,
E N D
以动画形式看几条指令的执行过程: 2200: ADD R2, R3 ;3 条指令的地址为2200、2201、2202 2201: JRNC 2200 ;若C=0 转去执行第1条,否则顺序执行 2202: STRR [R2], R3 ; 把 R3的内容写入内存地址为 [R2] 的单元 程序运行的初始状态:程序已读入内存,第1条指令地址已经在PC中, 假定 R2的初值为 1234, R3的初值为2345。 ADD指令的二进制代码为 00000000 0011 0010,已在内存中 JRNC指令的二进制代码为 01000101 1111 1110,已在内存中 STRR指令的二进制代码为 10000011 0010 0011,已在内存中 3 条指令都要在取指周期执行读取指令的操作, ADD 指令要在 执行周期完成数据运算与写回功能;结束 JRNC指令要在 执行周期完成指令地址计算并保存功能; 结束 STRR指令要在 执行周期完成数据地址计算并保存功能, 还要在 存储周期完成存储器的写入功能。 结束
2 2 0 1 4 5 F E 0 0 3 2 0 0 3 2 1 1 2 2 0 0 2 2 0 0 取指操作:在取指周期,以PC作地址读内存,读出指令送IR,计算下条指令地址 假设PC的内容为 2200,内存2200单元的内容为 0023,IR的内容未定 实现功能:pc→AB, mem[AB]→ir , pc+1→pc 控制信号:addr_sel=01, gate_en=1, mio=1, ir_wt=1, pc_wt=1
ADD R2, R3 动画演示 REGs(3) + REGs(2) → REG(3) 假设R2的内容为1234 R3的内容为2345 控制信号: b_sel 选 00 a_sel选 00 s_sel 选 00 r_sel 选 00 alu_func 选 000 reg_src 选 00 reg_wt 选 1 flag_func选001 00000000 0010 0011 + 2 2 0 1234 1234 0 2345 2345 3579 3 3 在执行周期,完成在取指周期读出来的加法指令的具体运算过程
0 0 2 2 0 2 4 5 F E 4 5 F E 0 0 2 3 1 2 2 0 1 2 2 0 1 0 0 2 3 取指操作:在取指周期,以PC作地址读内存,读出指令送IR,计算下条指令地址 此时PC的内容为 2201,内存2201单元的内容为 45FE,IR的原有内容0023 实现功能:pc→AB, mem[AB]→ir , pc+1→pc 控制信号:addr_sel=01, gate_en=1, mio=1, ir_wt=1, pc_wt=1
JRNC 2200 01000101 11111110 0 0 2 2 0 0 4 5 F E 0 0 2 3 2 2 0 2 4 5 F E F E 相对转移指令:标志位C为 0 时,转移到2200地址,否则顺序执行 在执行周期,由控制器部件计算转移指令地址,若C=0 则把转移地址送入PC 实现功能:if nc then pc+offset→pc 控制信号:add_sel=1, pc_wt=1
2 2 0 3 8 3 2 3 8 3 2 3 0 0 3 2 1 1 2 2 0 2 2 2 0 2 4 5 F E 取指操作:在取指周期,以PC作地址读内存,读出指令送IR,计算下条指令地址 此时PC的内容为 2202,IR的原内容45FE,假设内存2203单元的内容为 8323 实现功能:pc→AB, mem[AB]→ir , pc+1→pc 控制信号:addr_sel=01, gate_en=1, mio=1, ir_wt=1, pc_wt=1
STRR [R2], R3 动画演示 在执行周期,在运算器部件中完成把R2的内容送地址寄存器AR的操作 R2的内容为1234 R3的内容为3579 请注意,此步骤中是计算数据在内存中的单元地址,通过R2+ 0→AR实现,不影响C、Z等标志位;不使用R3。 10000001 0010 0011 00 + 2 2 1234 1234 3579 1234 1234 0000 3 3 在执行周期,完成读内存指令的数据地址计算与传送操作
STRR [R2],R3 动画演示 在存储器读写周期,完成把寄存器堆中的一个寄存器 (R3) 的内容写入存储器的由 AR 指定地址的一个存储单元 10000001 0010 0011 00 + 2 1234 0000 3579 3579 1234 3 3579 3579 3 1234 8132 写内存指令,在存储器读写周期,完成把寄存器R3的内容写入存储器的选定单元 实现功能: Reg[R3]→Mem[AR] ,运算器中通过 R3+0 执行数据计算 控制信号:addr_sel=00,s_sel=01,r_sel=00,gate_en=1,gate_dir=1,mio=1,we=1
1 2 0 2 4 5 F E 4 5 F E 0 0 2 3 1 1 2 0 1 1 2 0 1 取指操作 实现功能:pc→AB, mem[AB]→ir , pc+1→pc 控制信号:addr_sel=01, gate_en=1, mio=1, ir_wt=1, pc_wt=1
双寄存器指令 实现功能:Regs[dr] op Regs[sr] → Regs[dr] 控制信号:b_src=00, a_sel=0, s_sel=00, r_sel=00, alu_func= OP 码, reg_wt=1 (cmp、test 除外), flag_func=001
单寄存器指令(INC、DEC) 实现功能:Regs[dr] +1 (或-1) → Regs[dr] 控制信号:b_src=00, s_sel=00, r_sel=11, alu_func= 000或001, reg_wt=1, flag_func=001
单寄存器指令(SHL、SHR) 实现功能:Regs[dr] << 1 (或 >> 1) → Regs[dr] 控制信号:b_src=00, s_sel=00, r_sel=01, alu_func= 000, reg_wt=1, flag_func=011 (或100)
MVRD指令 实现功能:pc→AB, mem[AB]→dr,pc+1→pc 控制信号:s_sel=01, r_sel=10, reg_wt=1, pc_wt=1 addr_sel=01, gate_en=1, mio=1
相对转移指令(JR、JRC、JRNC、JRZ、JRNZ) 实现功能:pc +offset → pc ( 如果转移条件成立 ) 控制信号:add_src=1, pc_wt=1 ( 如果转移条件成立 )
JMPA指令 实现功能:pc→AB, mem[AB]→pc 控制信号:pc_src=10,pc_wt=1 addr_sel=01, gate_en=1, mio=1
读内存指令LDRR_1 实现功能:sr → ar 控制信号:s_sel=01, ar_wt=1
读内存指令LDRR_2 实现功能:Mem[ar] → dr 控制信号:s_sel=01, r_sel=10, reg_wt=1
CALA指令-1 实现功能:pc→AB,mem[AB]→pc, pc+1→npc, sp-1→sp,ar 控制信号:gate_en=1, mio=1, addr_sel=1,pc_src=10,pc_wt=1, npc_wt=1 b_src=01, r_sel=11, alu_func=001, reg_wt=1, ar_wt=1
CALA指令-2 实现功能:ar→AB, npc→mem[AB] 控制信号:npc_ib=1,gate_en=1,gate_dir=1, mio=1, we=1
RET指令_1 实现功能:sp→AB,sp+1→sp 控制信号:a_sel=1, y_sel=1, ar_wt=1 b_sel=01, r_sel=11, reg_wt=1
RET指令_2 实现功能:ar→AB,mem[AB]→pc 控制信号:pc_src=10,pc_wt=1 gate_en=1, mio=1