计算机组成原理实验报告1评语:课中检查完成的题号及题数:课后完成的题号与题数:成绩:自评分:必填实验报告实验名称:基于复杂模型机两个8位二进制数乘法的实现日期:2011.12.29班级:学号:姓名:班级:学号:姓名:一、实验目的:1.综合运用所学计算机组成原理知识,设计并完成较为完整的计算机2.掌握原码一位乘实现的控制流程和硬件配置二、实验内容:利用复杂模型机编写程序实现两个8位二进制的乘法运算三、项目要求及分析:本程序要求编写程序实现两个8位二进制的乘法运算并将结果输出。两数相乘,可视为加法和移位两种运算,因为在模型机中规定字长全部用来表示数据,数值全为正,故不需要考虑符号,因此在设计编写时需要考虑的问题有:(1)乘数、被乘数以及每次加法移位运算后的临时数据存放位置;(2)在做加法运算时,如何取出乘数的末位以确定临时数据与0相加或与被乘数相加;(3)加法运算时,若两数相加产生溢出,如何判断溢出;(4)移位运算时,如何控制乘数与临时数据的右移位。这里,需要考虑如何实现:a).对于乘数,右移后将被乘数的末位移至乘数的高位;b).对于临时数据,右移后若先前相加时产生溢出,则将被乘数高位补1,若无溢出,则高位补0;(5)如何控制程序的结束。对于问题(1),将临时数据存放在R0寄存器,乘数存放在R1寄存器,因为被乘数不一定每次都参与运算,因此存放在主存内,需要时调入寄存器R2中。计算机组成原理实验报告2问题(2)中,将乘数与01相与结果再减1,若末位为0,则产生借位,FC=1,P4测试时直接进行下步的移位运算;若末位为1,则不产生借位,FC=0,P4测试时进行临时数据与被乘数相加,再进入下步的移位运算。判断溢出的目的是为了在下步移位运算时确定临时数据的高位补1或是不0,因此问题(3)的判断方法可类似问题(2),将进位信息存入寄存器R2中后减1,再次存入R2。若进位为0,则产生借位,FC=1;若进位为1,则不产生借位,FC=0。问题(4)先进行乘数的移位,将乘数与(FE)十六进制相与,从而将乘数末位变为0,再将临时数据与(01)十六进制相与,取出临时数据的末位,最后将两个相与的结果相或后右环移,就实现临时数据的末位移至乘数的高位的运算。进行临时数据的移位时,将临时数据与(FE)十六进制相与,从而将临时数据末位变为0,然后结果右环移,根据问题(3)溢出判断的结果选择与(80)十六进制或与(00)十六进制相或,就实现临时数据的移位。问题(5)中,因为两个8位二进制数的乘法需要移位运算8次,故可设一个计数器,八次运算后结束程序。四、具体实现:1、画出算法流程图计算机组成原理实验报告3开始输入00~07:载入被乘数与乘数,分别存入主存的60、61位置初始化08-0B:置计数值为08H,存入主存0C-0D:初始和00=R0,0E-0F:乘数=R1判断乘数末位10-11:被乘数=R212-15:01AND[R1]再减1,判断乘数末位是否为016~17:FC==1?相加18:[R0]+[R1]=[R0]部分积与被乘数相加移位21-23:[R0]部分积右移一位24:[R1]乘数右移一位,FC标记移出的数判断循环次数3A-43:计数值=[R2],自减1,再存入主存44-45:FZ==1?4E:算法完成,停机Y(乘数末位为0)N(乘数末位为1)判断溢出19-20:若FC==1,有溢出,00=R2否则01=R2修正[R1]最高位25-2E:若FC==1移位前[R0]最低位为1,80AND[R1]=[R1],[R1]最高位置1,否则7FAND[R1]=[R1],[R1]最高位置0即将[R0]最低位移到[R1]最高位修正[R0]最高位2F-39:[R2]自减1若FC==1,[R2原为0],有溢出80AND[R0]=[R0],[R0]最高位置1,否则7FAND[R0]=[R0],[R0]最高位置0Y(循环8次)N(循环不足8)存数46-49:低八位[R1]存入主存64单元高八位[R0]存入主存65单元输出4A-4D2.根据算法实现,若需修改指令系统,画出修改后的微程序流程图计算机组成原理实验报告4红色为改动过的微程序代码3.编写微程序计算机组成原理实验报告5红色为改动过的微程序代码$M00000001;NOP$M01006D43;PC-AR,PC加1$M03107070;MEM-IR,P1$M04002405;RS-B$M0504B201;A加B-RD$M06002407;RS-B$M07013201;A与B-RD$M08106009;MEM-AR$M09183001;IO-RD$M0A106010;MEM-AR$M0B000001;NOP$M0C103001;MEM-RD$M0D200601;RD-MEM$M0E005341;A-PC$M0F0000CB;NOP,P3$M10280401;RS-IO$M11103001;MEM-RD$M12063201;A-1-RD$M13002414;RS-B$M1405B201;A减B-RD$M15002416;RS-B$M1601B201;A或B-RD$M17002418;RS-B$M1802B201;A循环右移-RD$M1B005341;A-PC$M1C10101D;MEM-A$M1D10608C;MEM-AR,P2$M1E10601F;MEM-AR$M1F101020;MEM-A$M2010608C;MEM-AR,P2$M28101029;MEM-A$M2900282A;RI-B$M2A04E22B;A加B-AR$M2B04928C;A加B-A,P2$M2C10102D;MEM-A$M2D002C2E;PC-B$M2E04E22F;A加B-AR$M2F04928C;A加B-A,P2$M30001604;RD-A$M31001606;RD-A$M32006D48;PC-AR,PC加1$M33006D4A;PC-AR,PC加1$M34003401;RS-RD$M35000035;NOP计算机组成原理实验报告6$M36006D51;PC-AR,PC加1$M37001612;RD-A$M38001613;RD-A$M39001615;RD-A$M3A001617;RD-A$M3B000001;NOP$M3C006D5C;PC-AR,PC加1$M3D006D5E;PC-AR,PC加1$M3E006D68;PC-AR,PC加1$M3F006D6C;PC-AR,PC加14.编写机器指令验证$P0020;START:INR0,00H从IN单元读入被乘数$P0100;$P02D0;STA0060H,R0存入主存#60$P0360;$P0420;INR0,#00H从IN单元读入乘数$P0500;$P06D0;STA0061H,R0存入主存#61$P0761;$P0860;LDIR0,08H计数值08$P0908;$P0AD0;STA0062H,RO将计数值存入主存$P0B62;$P0C60;LDIR0,00H载入初始和00$P0D00;$P0EC1;LAD0061H,R1读乘数到R1$P0F61;$P10C2;LAD0060H,R2读乘数到R2$P1160;$P1263;LDIR3,01H载入校验数01$P1301;$P1417;ANDR3,R1取乘数的最低位$P1573;DECR3R3自减1$P16F0;BZC0021H最低位为0则跳转$P1721;$P1808;ADDR0,R2相加$P19F0;BZC001FH溢出则跳转$P1A1F;$P1B62;LDIR201HR2作为溢出标志,不溢出为1$P1C01;$P1DE0;JMP0021$P1E21;$P1F62;LDIR200H溢出置0$P2000;计算机组成原理实验报告7$P2163;LDIR300H移位位数$P2200;$P23AD;RRR1,R3R1右移0位$P24AC;RRR0,R3R0右移0位$P25F0;BZC002CHR0移出的是1则跳转$P262C;$P2763;LDIR3,01111111B载入屏蔽字$P287F;$P291D;ANDR1,R3给R1最高位置0$P2AE0;JMP00,2F$P2B2F;$P2C63;LDIR310000000B载入屏蔽字$P2D80;$P2E9D;ORR1,R3给R1最高位置1$P2F72;DECR2R2自减1$P30F0;BZC0037H18步有溢出则跳转$P3137;$P3263;LDIR3,01111111置入屏蔽字$P337F;$P341C;ANDR0,R3给R0高位置0$P35E0;JMP00,3AH$P363A;$P3763;LDIR3,10000000置入屏蔽字$P3880;$P399C;ORR0,R3给R0高位置1$P3AC2;LAD62H,R2取计数值$P3B62;$P3C72;DECR2计数值自减1$P3DD2;STA62H,R2存计数值$P3E62;$P3F63;LDIR3,01H载入检验数$P4001;$P418E;SUBR2,R3判断是否循环8次$P42F0;BZC0046H执行到第八次时00-01有借位,跳转$P4346;$P44E0;JMP0010H返回继续循环$P4510;$P46D1;STA64H,R1低位存入主存#64H$P4764;$P48D0;STA65H,R0高位存入主存#65H$P4965;$P4A34;OUT40H,R1显示低位$P4B40;$P4C30;OUT40H,R0显示高位$P4D40;计算机组成原理实验报告8$P4E50;HLT停机联机装入调试五、调试运行结果:03030009HHH01FFHFFHFEH计算机组成原理实验报告9六、所遇问题及解决方法:设计中的主要问题就是上述问题分析时遇到的问题,这些问题的解决花费了很长一段时间。此外,在测试时,由于一些数据在运算过程中出现临时数据移位时使得临时数据全为0,或者乘数移位时出现全为0,此时FZ=1,P4测试时与FC=1一样进行同样处理,导致最终结果错误。对于这个问题,在分析过程中发现,只需将溢出和临时数据移位时判断条件全部改为FC=1,然后将FZ的线拔掉就可以避免。七、实验总结:1.模型机的设计是一个新的知识,在编写时遇到了很多问题与难处,因此我们在编写时不断查阅课本,加深理解。2.复杂模型机的调试是一个极其繁琐的过程,这就要求我们编写是要细心认真,调试出现问题时要耐心检查。3.模型机的设计加深了我们对计算机内部各组件工作原理的理解。