1、 计算机组成原理实验报告1评语: 课中检查完成的题号及题数:课后完成的题号与题数:成绩: 自评分: 必填实验报告实验名称: 基于复杂模型机两个 8 位二进制数乘法的实现 日期: 2011.12.29班级: 学号: 姓名:班级: 学号: 姓名:一、实验目的:1. 综合运用所学计算机组成原理知识,设计并完成较为完整的计算机2. 掌握原码一位乘实现的控制流程和硬件配置二、实验内容:利用复杂模型机编写程序实现两个 8 位二进制的乘法运算三、项目要求及分析:本程序要求编写程序实现两个 8 位二进制的乘法运算并将结果输出。两数相乘,可视为加法和移位两种运算,因为在模型机中规定字长全部用来表示数据,数值全为
2、正,故不需要考虑符号,因此在设计编写时需要考虑的问题有:(1)乘数、被乘数以及每次加法移位运算后的临时数据存放位置;(2)在做加法运算时,如何取出乘数的末位以确定临时数据与 0 相加或与被乘数相加;(3)加法运算时,若两数相加产生溢出,如何判断溢出;(4)移位运算时,如何控制乘数与临时数据的右移位。这里,需要考虑如何实现:a).对于乘数,右移后将被乘数的末位移至乘数的高位;b).对于临时数据,右移后若先前相加时产生溢出,则将被乘数高位补 1,若无溢出,则高位补 0;(5)如何控制程序的结束。对于问题(1) ,将临时数据存放在 R0 寄存器,乘数存放在 R1 寄存器,因为被计算机组成原理实验报告
3、2乘数不一定每次都参与运算,因此存放在主存内,需要时调入寄存器 R2 中。问题(2)中,将乘数与 01 相与结果再减 1,若末位为 0,则产生借位,FC=1,P测试时直接进行下步的移位运算;若末位为 1,则不产生借位,FC=0,P测试时进行临时数据与被乘数相加,再进入下步的移位运算。 判断溢出的目的是为了在下步移位运算时确定临时数据的高位补 1 或是不 0,因此问题(3)的判断方法可类似问题(2) ,将进位信息存入寄存器 R2 中后减 1,再次存入 R2。若进位为 0,则产生借位,FC=1;若进位为 1,则不产生借位,FC=0。问题(4)先进行乘数的移位,将乘数与(FE)十六进制相与,从而将乘
4、数末位变为0,再将临时数据与(01)十六进制相与,取出临时数据的末位,最后将两个相与的结果相或后右环移,就实现临时数据的末位移至乘数的高位的运算。进行临时数据的移位时,将临时数据与(FE)十六进制相与,从而将临时数据末位变为 0,然后结果右环移,根据问题(3)溢出判断的结果选择与(80)十六进制或与(00)十六进制相或,就实现临时数据的移位。问题(5)中,因为两个 8 位二进制数的乘法需要移位运算 8 次,故可设一个计数器,八次运算后结束程序。四、具体实现: 1、画出算法流程图计算机组成原理实验报告3开始输 入 0 0 0 7 : 载入被乘数与乘数 , 分别 存入 主存的 6 0 、 6 1
5、位置初 始 化 0 8 - 0 B : 置计数值为 0 8 H , 存入主存0 C - 0 D : 初始和 0 0 = R 0 , 0 E - 0 F : 乘数 = R 1判 断 乘 数 末 位 1 0 - 1 1 : 被乘数 = R 2 1 2 - 1 5 : 0 1 A N D R 1 再减 1 , 判断乘数末位是否为 01 6 1 7 : F C = = 1 ?相 加 1 8 : R 0 + R 1 = R 0 部分积与被乘数相加移 位 2 1 - 2 3 : R 0 部分积右移一位2 4 : R 1 乘数右移一位 , F C 标记移出的数判 断 循 环 次 数 3 A - 4 3 :
6、计数值 = R 2 , 自减 1 , 再存入主存4 4 - 4 5 : F Z = = 1 ?4 E : 算法完成 , 停机Y ( 乘数末位为 0 )N ( 乘数末位为 1 )判 断 溢 出 1 9 - 2 0 : 若 F C = = 1 , 有溢出 , 0 0 = R 2 否则 0 1 = R 2修 正 R 1 最 高 位 2 5 - 2 E : 若 F C = = 1 移位前 R 0 最低位为 1 ,8 0 A N D R 1 = R 1 , R 1 最高位置 1 ,否则 7 F A N D R 1 = R 1 , R 1 最高位置 0即将 R 0 最低位移到 R 1 最高位修 正 R 0
7、 最 高 位 2 F - 3 9 : R 2 自减 1若 F C = = 1 , R 2 原为 0 , 有溢出8 0 A N D R 0 = R 0 , R 0 最高位置 1 ,否则 7 F A N D R 0 = R 0 , R 0 最高位置 0Y ( 循环 8 次 )N ( 循环不足 8 )存 数 4 6 - 4 9 : 低八位 R 1 存入主存 6 4 单元高八位 R 0 存入主存 6 5 单元输 出 4 A - 4 D2. 根据算法实现,若需修改指令系统,画出修改后的微程序流程图计算机组成原理实验报告4红色为改动过的微程序代码3编写微程序计算机组成原理实验报告5红色为改动过的微程序代码
8、$M 00 000001 ; NOP$M 01 006D43 ; PC-AR, PC 加 1$M 03 107070 ; MEM-IR, P$M 04 002405 ; RS-B$M 05 04B201 ; A 加 B-RD$M 06 002407 ; RS-B$M 07 013201 ; A 与 B-RD$M 08 106009 ; MEM-AR$M 09 183001 ; IO-RD$M 0A 106010 ; MEM-AR$M 0B 000001 ; NOP$M 0C 103001 ; MEM-RD$M 0D 200601 ; RD-MEM$M 0E 005341 ; A-PC$M 0F
9、 0000CB ; NOP, P$M 10 280401 ; RS-IO$M 11 103001 ; MEM-RD$M 12 063201 ; A-1-RD$M 13 002414 ; RS-B$M 14 05B201 ; A 减 B-RD$M 15 002416 ; RS-B$M 16 01B201 ; A 或 B-RD$M 17 002418 ; RS-B$M 18 02B201 ; A 循环右移 -RD$M 1B 005341 ; A-PC$M 1C 10101D ; MEM-A$M 1D 10608C ; MEM-AR, P$M 1E 10601F ; MEM-AR$M 1F 1010
10、20 ; MEM-A$M 20 10608C ; MEM-AR, P$M 28 101029 ; MEM-A$M 29 00282A ; RI-B$M 2A 04E22B ; A 加 B-AR$M 2B 04928C ; A 加 B-A, P$M 2C 10102D ; MEM-A$M 2D 002C2E ; PC-B$M 2E 04E22F ; A 加 B-AR$M 2F 04928C ; A 加 B-A, P$M 30 001604 ; RD-A$M 31 001606 ; RD-A$M 32 006D48 ; PC-AR, PC 加 1$M 33 006D4A ; PC-AR, PC 加
11、 1$M 34 003401 ; RS-RD$M 35 000035 ; NOP计算机组成原理实验报告6$M 36 006D51 ; PC-AR, PC 加 1$M 37 001612 ; RD-A$M 38 001613 ; RD-A$M 39 001615 ; RD-A$M 3A 001617 ; RD-A$M 3B 000001 ; NOP$M 3C 006D5C ; PC-AR, PC 加 1$M 3D 006D5E ; PC-AR, PC 加 1$M 3E 006D68 ; PC-AR, PC 加 1$M 3F 006D6C ; PC-AR, PC 加 14. 编写机器指令验证$P
12、00 20 ; START: IN R0,00H 从 IN 单元读入被乘数$P 01 00 ; $P 02 D0 ; STA 00 60H,R0 存入主存#60$P 03 60 ; $P 04 20 ; IN R0,#00H 从 IN 单元读入乘数 $P 05 00 ;$P 06 D0 ; STA 00 61H,R0 存入主存#61$P 07 61 ;$P 08 60 ; LDI R0,08H 计数值 08 $P 09 08 ;$P 0A D0 ;STA 00 62H,RO 将计数值存入主存$P 0B 62 ;$P 0C 60 ;LDI R0,00H 载入初始和 00$P 0D 00 ;$P
13、0E C1 ;LAD 00 61H,R1 读乘数到 R1$P 0F 61 ;$P 10 C2 ;LAD 00 60H,R2 读乘数到 R2 $P 11 60 ;$P 12 63 ;LDI R3,01H 载入校验数 01 $P 13 01 ;$P 14 17 ;AND R3,R1 取乘数的最低位$P 15 73 ;DEC R3 R3 自减 1 $P 16 F0 ;BZC 00 21H 最低位为 0 则跳转$P 17 21 ;$P 18 08 ;ADD R0,R2 相加$P 19 F0 ;BZC 00 1FH 溢出则跳转$P 1A 1F ;$P 1B 62 ;LDI R2 01H R2 作为溢出标
14、志,不溢出为 1$P 1C 01 ;$P 1D E0 ;JMP 00 21 $P 1E 21 ;$P 1F 62 ;LDI R2 00H 溢出置 0$P 20 00 ;计算机组成原理实验报告7$P 21 63 ;LDI R3 00H 移位位数$P 22 00 ;$P 23 AD ;RR R1,R3 R1 右移 0 位$P 24 AC ;RR R0,R3 R0 右移 0 位$P 25 F0 ;BZC 00 2CH R0 移出的是 1 则跳转$P 26 2C ;$P 27 63 ;LDI R3,01111111B 载入屏蔽字$P 28 7F ;$P 29 1D ;AND R1,R3 给 R1 最高
15、位置 0$P 2A E0 ;JMP 00,2F $P 2B 2F ;$P 2C 63 ;LDI R3 10000000B 载入屏蔽字$P 2D 80 ;$P 2E 9D ;OR R1,R3 给 R1 最高位置 1$P 2F 72 ;DEC R2 R2 自减 1 $P 30 F0 ;BZC 00 37H 18 步有溢出则跳转$P 31 37 ;$P 32 63 ;LDI R3,01111111 置入屏蔽字$P 33 7F ;$P 34 1C ;AND R0,R3 给 R0 高位置 0$P 35 E0 ;JMP 00,3AH$P 36 3A ;$P 37 63 ;LDI R3,10000000 置
16、入屏蔽字$P 38 80 ;$P 39 9C ;OR R0,R3 给 R0 高位置 1$P 3A C2 ;LAD 62H,R2 取计数值$P 3B 62 ;$P 3C 72 ;DEC R2 计数值自减 1$P 3D D2 ;STA 62H,R2 存计数值$P 3E 62 ;$P 3F 63 ;LDI R3,01H 载入检验数$P 40 01 ;$P 41 8E ;SUB R2,R3 判断是否循环 8 次$P 42 F0 ;BZC 00 46H 执行到第八次时 00-01 有借位,跳转$P 43 46 ;$P 44 E0 ;JMP 00 10H 返回继续循环$P 45 10 ;$P 46 D1
17、;STA 64H,R1 低位存入主存#64H$P 47 64 ;$P 48 D0 ;STA 65H,R0 高位存入主存#65H$P 49 65 ;$P 4A 34 ;OUT 40H,R1 显示低位$P 4B 40 ;$P 4C 30 ;OUT 40H,R0 显示高位$P 4D 40 ;计算机组成原理实验报告8$P 4E 50 ;HLT 停机联机装入调试五、调试运行结果:0309H01FHE计算机组成原理实验报告9六、所遇问题及解决方法:设计中的主要问题就是上述问题分析时遇到的问题,这些问题的解决花费了很长一段时间。此外,在测试时,由于一些数据在运算过程中出现临时数据移位时使得临时数据全为 0,或者乘数移位时出现全为 0,此时 FZ=1,P 测试时与 FC=1 一样进行同样处理,导致最终结果错误。对于这个问题,在分析过程中发现,只需将溢出和临时数据移位时判断条件全部改为 FC=1,然后将 FZ 的线拔掉就可以避免。七、实验总结:1. 模型机的设计是一个新的知识,在编写时遇到了很多问题与难处,因此我们在编写时不断查阅课本,加深理解。2. 复杂模型机的调试是一个极其繁琐的过程,这就要求我们编写是要细心认真,调试出现问题时要耐心检查。3. 模型机的设计加深了我们对计算机内部各组件工作原理的理解。