测试细节
硬件实验前的准备工作
硬件实验的目的是:(1)直观地了解计算机的工作过程。(2)检验设计是否正确,即检验计算机的工作过程是否与预期相符。
实验前的准备工作是将测试程序预先加载于存储器中,即编制好 .mif 文件。与表P.3相对应的 .mif 文件为:
为了提高实验效率,预先分析指令执行过程中各寄存器内容的变化,填入表格之中,供实验时观察。为了缩小表格所占空间,表中数据以 16 进制形式表示。
--------------------------------------------------------------------------------------------------------------- 有余力的学生可以在实验中发挥自己的主观能动性,增加若干自创的项目,例如 1. 改写调试程序; 2. 改变时钟频率,测出此计算机的最高工作频率; 3. 改写 VHDL 代码,争取获得更高的性能价格比; 4. 改进实验方法,争取得到更好的显示效果。
测试程序执行过程分析 状态 PC IR 指令助记符 指令效果 寄存器操作 R0 R1 R2 R3 内存单元01E 解
释 0 000 0000
00 00 00 00 00 Reset低电平使计算机进入初始状态, 启动测试程序后的情况如下:
0 → 001 0000 idle 空操作 PC ← PC + 1 00 00 00 00 00 取指令到IR的高8位,程序计数器加1 1
00 00 00 00 00 向内存发出读命令,读下一条指令 0 → 002 → 1500 load
5 R0 ← 立即数 PC ← PC + 1 00 00 00 00 00 取指令到IR的高8位,程序计数器加1 1
R0 ← IR(11..8) 05 00 00 00 00 将IR(11..8)中的立即数(5)加载于R0 0 →003 → 2400 move R1, R0 R1 ←
R0 PC ← PC + 1 A ←
R0 05 00 00 00 00 取指令到IR的高8位,程序计数器加1 将R0的内容存入临时寄存器A 1
R1 ←
A 05 05 00 00 00 将A的内容放入R1 0 → 004 → D000 read
01F R0 ←
内存单元 01F PC ← PC + 1 05 05 00 00 00 取指令到IR的高8位,程序计数器加1 1
05 05 00 00 00 内存读双字节指令的第2字节 2
→ 005 →D01F
PC ← PC + 1 MAR ← 01F 05 05 00 00 00 取双字节指令的第2字节,放到IR的低8位, 程序计数器加1 将访问内存的地址01F放入MAR 3
05 05 00 00 00 向内存发出读命令 4
R0 ←
39 39 05 00 00 00 将从内存单元01F中读出的数据放入R0 0 → 006 → 9400 shl
R1 R1 ← R1左移1位
PC ← PC + 1
39 05 00 00 00 取指令到IR的高8位,程序计数器加1
1
R1 ← R1左移1位 39 0A 00 00 00 将R1的内容左移1位 0 → 007 → 3100 add R0, R1 R0 ←
R0 + R1 PC ← PC + 1 A ←
R1 39 0A 00 00 00 取指令到IR的高8位,程序计数器加1 将R1的内容存入临时寄存器A 1
R0 ←
R0 + A 43 0A 00 00 00 将R0和A的内容相加并将结果放入R0
状态 PC IR 指令助记符 指令效果 寄存器操作 R0 R1 R2 R3 内存单元01E 解 释 0 → 008 → E000 write 01E 内存单元 01E ←R0 PC ← PC + 1 43 0A 00 00 00 取指令到IR的高8位,程序计数器加1 1
43 0A 00 00 00 内存读双字节指令的第2字节 2
→ 009 → E01E
PC ← PC + 1 MDR ← R0 MAR ← 01E 43 0A 00 00 00 取双字节指令的第2字节,放到IR的低8位, 程序计数器加1, 将R0的内容放入数据寄存器MDR 将写指令的目的地址01E放入MAR 3
43 0A 00 00 00 向内存发出写命令 4
43 0A 00 00 43 将MDR的内容写入内存单元01E 0 → 00A → 4100 sub R0, R1 R0 ←
R0﹣R1 PC ← PC + 1 A ← R1 43 0A 00 00 43 取指令到IR的高8位,程序计数器加1 将R1的内容存入临时寄存器A 1
R0 ←
R0﹣A 39 0A 00 00 43 将R0和A的内容相减并将结果放入R0 0 → 00B → A100 swap R0, R1
PC ← PC + 1 A ← R1 39 0A 00 00 43 取指令到IR的高8位,程序计数器加1 将R1的内容存入临时寄存器A 1
R1 ← R0 39 39 00 00 43 将R0的内容放入R1 2
R0 ← A 0A 39 00 00 43 将A的内容放入R0 0 → 00C → 6100 or R0, R1 R0 ← R0 or R1 PC ← PC + 1 A ← R1 0A 39 00 00 43 取指令到IR的高8位,程序计数器加1 将R1的内容存入临时寄存器A 1
R0 ←
R0 or A 3B 39 00 00 43 将R0和A的内容按位或运算,并将结果放入R0 0 → 00D → 8400 Shr
R1 R1 ← R1右移1位 PC ← PC + 1
3B 39 00 00 43 取指令到IR的高8位,程序计数器加1
1
R1 ← R1右移1位 3B 1C 00 00 43 将R1的内容右移1位
状态 PC IR 指令助记符 指令效果 寄存器操作 R0 R1 R2 R3 内存单元01E 解 释 0 → 00E → 5100 and R0, R1 R0 ← R0 and R1 PC ← PC + 1 A ←
R1 3B 1C 00 00 43 取指令到IR的高8位,程序计数器加1 将R1的内容存入临时寄存器A 1
R0 ← R0 and A 18 1C 00 00 43 R0和A按位与运算,将结果放入R0 0 → 00F → 2800 move R2, R0 R2 ←
R0 PC ← PC + 1 A ← R0 18 1C 00 00 43 取指令到IR的高8位,程序计数器加1 将R0的内容存入临时寄存器A 1
R2 ←
A 18 1C 18 00 43 将A的内容放入R2 0 → 010 → 2D00 move R3, R1 R3 ←
R1 PC ← PC + 1 A ← R1 18 1C 18 00 43 取指令到IR的高8位,程序计数器加1 将R1的内容存入临时寄存器A 1
R3 ← A 18 1C 18 1C 43 将A的内容放入R3 0 →011 → 7B00 xor R2, R3 R2 ← R2 xor R3 PC ← PC + 1 A ← R3 18 1C 18 1C 43 取指令到IR的高8位,程序计数器加1 将R3的内容存入临时寄存器A 1
R2 ← R2 xor A 18 1C 04 1C 43 R2和A按位异或运算,将结果放入R2 0 → 012 → D000 read
01E R0 ←
内存单元
01E PC ← PC + 1 18 1C 04 1C 43 取指令到IR的高8位,程序计数器加1 1
18 1C 04 1C 43 内存读双字节指令的第2字节 2
→ 013 →D01E
PC ← PC + 1 MAR ← 01E 18 1C 04 1C 43 取双字节指令的第2字节,放到IR的低8位, 程序计数器加1 将访问内存的地址01E放入MAR 3
18 1C 04 1C 43 向内存发出读命令 4
R0 ←
43 43 1C 04 1C 43 将从内存单元01E中读出的数据放入R0
状态 PC IR 指令助记符 指令效果 寄存器操作 R0 R1 R2 R3 内存单元01E 解 释 0 → 014 → C000 jz
019 若(R0)= 0转移至019,否则执行下一条 PC ← PC + 1 43 1C 04 1C 43 取指令到IR的高8位,程序计数器加1 1
43 1C 04 1C 43 内存读双字节指令的第2字节 2
→ 015 → C019
PC ← PC + 1 MAR ← 015 43 1C 04 1C 43 取双字节指令的第2字节,放到IR的低8位,程序计数器加1 因(R0)≠ 0,顺序执行下一条指令 3
43 1C 04 1C 43 向内存发出读下一条指令的命令 0 → 016 → D000 read
01D R0 ←
内存单元
01D PC ← PC + 1 43 1C 04 1C 43 取指令到IR的高8位,程序计数器加1 1
43 1C 04 1C 43 内存读双字节指令的第2字节 2
→ 017 →D01D
PC ← PC + 1 MAR ← 01D 43 1C 04 1C 43 取双字节指令的第2字节,放到IR的低8位 程序计数器加1 将地址寄存器的内容置为
01D 3
43 1C 04 1C 43 向内存发出读命令 4
R0 ← 00 00 1C 04 1C 43 将内存单元
01D中的内容放入R0 0 → 018 → B000 Jmp
013 无条件转移至013 PC ← PC + 1 00 1C 04 1C 43 取指令到IR的高8位,程序计数器加1 1
00 1C 04 1C 43 内存读双字节指令的第2字节 2
→ 019 → B013
PC ← PC + 1 MAR ← 013 00 1C 04 1C 43 取双字节指令的第2字节,放到IR的低8位,程序计数器加1 将地址寄存器的内容置为
013 3 → 013
PC ← 013 00 1C 04 1C 43 向内存发出读下一条指令的命令
状态 PC IR 指令助记符 指令效果 寄存器操作 R0 R1 R2 R3 内存单元01E 解 释 0 → 014 → C000 Jz
019 若(R0)= 0转移至019,否则执行下一条 PC ← PC + 1 00 1C 04 1C 43 取指令到IR的高8位,程序计数器加1 1
00 1C 04 1C 43 内存读双字节指令的第2字节 2
→ 015 → C019
PC ← PC + 1 MAR
← 019 00 1C 04 1C 43 取双字节指令的第2字节,放到IR的低8位,程序计数器加1 因(R0)= 0,下一条指令转移至019 3 → 019
PC ← 019 00 1C 04 1C 43 向内存发出读下一条指令的命令 0 → 01A → F000 stop 停机
00 1C 04 1C 43 取指令到IR的高8位,程序计数器加1 1
00 1C 04 1C 43 停止在状态1,进入死循环
本栏目阅读排行
栏目最新
- 1在农民收入调查工作动员培训会上讲话
- 22024年领导干部政治素质自评材料(完整)
- 3公司党委党建工作总结报告【完整版】
- 42024年主题教育党建调研开展情况总结
- 52024年度区妇联关于党建工作述职报告(完整)
- 6关于加强企业人才队伍建设调研与思考(完整文档)
- 72024县党员干部抓基层党建工作述职报告
- 8第二批主题教育研讨发言:时刻“以民为本”,听“实言实语”,办实事好事
- 92024关于党员干部法治信仰情况调研报告(2024年)
- 10局网络安全工作责任制落实自查报告(全文)
- 11XX国企分管领导关于党建设引领企业高质量发展研讨发言(范文推荐)
- 122024年第二批主题教育专题读书班研讨发言提纲(6)【完整版】