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