《乘法器计组课设 .doc》由会员分享,可在线阅读,更多相关《乘法器计组课设 .doc(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机组成原理课程设计报告班级:计算机/物联网 1504 班 姓名: 杨杰铭 学号: 完成时间: 2018.1.1 一、课程设计目的1在实验机上设计实现机器指令及对应的微指令(微程序)并验证,从而进一步掌握微程序设计控制器的基本方法并了解指令系统与硬件结构的对应关系;2通过控制器的微程序设计,综合理解计算机组成原理课程的核心知识并进一步建立整机系统的概念;3培养综合实践及独立分析、解决问题的能力。二、课程设计的任务针对COP2000实验仪,从详细了解该模型机的指令/微指令系统入手,以实现乘法和除法运算功能为应用目标,在COP2000的集成开发环境下,设计全新的指令系统并编写对应的微程序;之后编
2、写实现乘法和除法的程序进行设计的验证。三、 课程设计使用的设备(环境)1硬件l COP2000实验仪l PC机2软件l COP2000仿真软件四、课程设计的具体内容(步骤)1详细了解并掌握COP 2000模型机的微程序控制器原理,通过综合实验来实现该模型机指令系统的特点:该模型机指令系统的操作码由8位机器码组成,前6位机器码用于区分操作类型,后2位机器码是在操作中涉及通用寄存器时提供通用寄存器的寻址。进位跳转指令JC要求倒数第3、4位为00零跳转指令JZ要求倒数第3、4位为01无条件跳转指令JMP要求倒数第3、4位为11该模型机微指令系统的特点(包括其微指令格式的说明等):该模型机的微指令寄存
3、器地址为00H-0FFH,共256*30位,每条微指令的控制字段部分有30位,控制方式采用的是直接控制而非编码控制,即一位对应一个逻辑开关的状态。可惜的是,此微指令无跳转方式和下指字段,因而仅通过微指令无法在微指令寄存器中跳转,即在一条机器指令所对应的微程序中,只有顺序执行操作。原系统中每条机器指令最多四个周期(当然不是必须的,可以通过机器指令的机器码的设置使一个机器指令包含更多微指令),即此模型机中每个微程序最多四条微指令,多余的空位则浮空处理。2. 计算机中实现乘法和除法的原理(1)无符号乘法算法流程图:乘法采用移位相加的操作来完成,由于位数限制,无溢出可能因为积德长度限定在8位以内,由于
4、需要储存中间结果及初始被乘数的指,乘数还需要在过程中进行移位,即两个寄存器无法完成此工作。由上可知,完成乘法操作需要存取操作数,移位操作,测试标志位跳转,加法操作,同时为了调用加法程序,还需要子程序调用及返回操作。硬件原理框图:寄存器A与R0,R3,EM通信寄存器W与R2,EM通信通用寄存器组R0,R1,R2与EM皆可通信(2)无符号除法算法流程图:使用余数恢复法。先用减测试进行测试若够减,则进行减法操作,不够减直接进行移位操作。硬件原理框图:3对应于以上算法如何分配使用COP2000实验仪中的硬件(初步分配,设计完成后再将准确的使用情况填写在此处)ST:减测试/位测试时需使用A/W:运算时使
5、用L/D/R:ROR/ROL时使用乘法R0:乘数R1:被乘数R2:中间结果/乘积除法R0:除数R1:被除数/余数R2:商R3:除法次数4在COP2000集成开发环境下设计全新的指令/微指令系统设计结果如表所示(可按需要增删表项)(1) 新的指令集(如果针对乘除法设计了两个不同指令集要分别列表)助记符机器码1机器码2指令说明ROR对A寄存器的右移操作,不改变标志位ROL 对A寄存器的左移操作,不改变标志位SUBT A,#II减测试,将A减去#II改变标志位,但不改变A值TEST A,#II位测试,用A与II相与,但不改变A值MOV R?,#II将立即数II送入R?MOV A,#II将立即数II送
6、入A?MOV A,R?将寄存器R?的值取到A中MOV R?,A将寄存器A的值放到R?中ADD A,R?A与R?相加,结果存入A中SUB A,R?A与R?相减,结果存入A中JMP MM跳转到MM标注的位置JZ MM根据零标志跳转到MM位置JC MM根据进位标志跳转到MM位置PUSH A将A压栈POP A将A弹栈LOOP MM当寄存器R3的值不为0时,跳转至MM(2) 新的微指令集其中减测试与位测试均占用5个节拍5用设计完成的新指令集编写实现无符号二进制乘法、除法功能的汇编语言程序(1)乘法4位乘法的算法流程图与汇编语言程序清单:将乘数放在R0,被乘数放在R1中MOVR0,#04H ;乘数MOVR
7、1,#0AH ;被乘数MUL:MOV R2,A ;将中间结果暂存入R2保护MOVA,R1 ;得到被乘数TESTA,#0FH ;被乘数为0?JZEND ;为0结束TESTA,#01H ;被乘数末位为0?ROR ;右移,不产生标志MOVR1,A ;将被乘数保存MOVA,R2 ;得到乘数JZMUL1 ;此处为TESTA,#01H的判断结果ADDA,R0 ;末位不为0,则加上乘数MUL1:ROL ;中间结果左移JMPMUL ;循环ENDENDS(2)除法 4位除法的算法流程图与汇编语言程序清单:采用余数恢复法MOVR0,#08H ;除数MOVR1,#36H ;余数/被除数MOVR2,#00H ;商MO
8、V R3,#05H ;移位次数MOVA,R1 ;判断被除数是否为0TESTA,#0FFH JZOVERF ;为0则跳转至除法中断。置除数、商为0SUB A,R0 JC ENDS;不够除MOVA,R0 ;将除数移位对阶ROLROLROLROL ;在这里看似使用4次移位麻烦,但若使用循环,来回挪动操作数MOVR0,A ;将更加麻烦MOVA,R1;看首位够不够减,若够减,商应大于4位,除法溢出,置除数商为SUBTA,R0 ;0FFHJCDIVJMP OVERDIV:MOVA,R1SUBTA,R0 ;测试是否够减 JCDIV1SUBA,R0 ;够减则用被除数减去除数MOVR1,AMOVA,#1H ;这
9、里使用简单减法将标志位清0,取消对移位的干扰SUBA,#0HMOV A,R0 ;将除数右移RORMOV R0,AMOVA,R2ROL ;将商左移,够减时商为1ADDA,#01HMOVR2,AMOVA,R3SUBA,#01H ;减少技术次数MOVR3,AJZENDSJMPDIVDIV1:;不够减的情况,直接将除数右移MOVR1,AMOVA,#1HSUBA,#0H MOV A,R0RORMOV R0,AMOVA,R2ROLMOVR2,A;将商左移,不够减时商为0MOVA,R3SUBA,#01H ;减少计数次数MOVR3,AJZENDSJMPDIVOVERF:MOVR1,#0MOVR2,#0JMP
10、ENDSOVER:MOVR1,#0FFHMOVR2,#0FFHJMP ENDSNOP6上述程序的运行情况(跟踪结果)按下表填写描述以上各程序运行情况的内容。按每个程序一张表进行。程序运行的过程乘法指令的运行过程,截取前几个循环(10*10 的乘法)除法运行结果(54/8)一个循环7设计结果说明调试运行程序时是否出现问题,是否有重新调整指令/微指令系统设计的情况出现?请在此做具体说明。运行程序时偶尔会发想忘记添加某种类型指令,但只要添加上即可,其它都是汇编程序上的调整。还有就是有些情况可以用多条机器指令,或者将这些机器指令的功能都通过一条微程序实现五、本次课程设计的总结体会(不少于200字) 主
11、要总结学到的具体知识、方法及设计中的切身体会;包括列出在设计的各个阶段出现的问题及解决方法。设计阶段:在起初设计时,准备设计单独的乘法、除法指令,即像8086/8088微机中的 MUL,DIV指令这种,通过提前规定好的寄存器存储其中一个运算数,在获取另一个进行运算。可是在仔细研读cop2000官方说明书,以及对模拟程序的摸索后,发现此模拟机中的微程序系统与教科书存在差异。其一为:微指令没有跳转方式和下指字段,也就是说,一条机器指令对应的微程序只能顺序执行,显然,这样不可能完成乘除法的运算;其二为:其对寄存器的选择是通过机器指令中操作数部分的字符翻译为编码来进行的,如操作数为R?则进行寄存器选择、为#xx则从EM中读取。也就是说在一个微程序中无法选择通用寄存器,那么一条指令的最大可用空间为A,W,一个R,ST。还有一方面,就是由于不带进位的移位操作在此系统中不影响标志位,用01和00测试进行右移,结果一样。JZ不会跳转。因此只能用测试最后一位的方法得到其右移出的位。此外,在试验过程中还发现,堆栈寄存器只有一个字,因此不能像在高级语言中一直压栈弹栈,在TEST和SUBT中均使用了堆栈保护当前的A寄存器值,因此,在要使用两个操作的块内不能嵌套使用堆栈操作。(以上红色字内容为由设计者完成并填写。设计者如有需要可以增加该报告的内容项目。)
限制150内