基于COP的定点无符号数乘法的实现.docx

上传人:b****3 文档编号:1382674 上传时间:2022-10-21 格式:DOCX 页数:11 大小:281.06KB
下载 相关 举报
基于COP的定点无符号数乘法的实现.docx_第1页
第1页 / 共11页
基于COP的定点无符号数乘法的实现.docx_第2页
第2页 / 共11页
基于COP的定点无符号数乘法的实现.docx_第3页
第3页 / 共11页
基于COP的定点无符号数乘法的实现.docx_第4页
第4页 / 共11页
基于COP的定点无符号数乘法的实现.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

基于COP的定点无符号数乘法的实现.docx

《基于COP的定点无符号数乘法的实现.docx》由会员分享,可在线阅读,更多相关《基于COP的定点无符号数乘法的实现.docx(11页珍藏版)》请在冰豆网上搜索。

基于COP的定点无符号数乘法的实现.docx

基于COP的定点无符号数乘法的实现

 

课程设计报告

 

课程设计名称:

计算机组成原理课程设计

课程设计题目:

基于COP2000的定点无符号数乘法的实现

 

第1章总体设计方案

1.1设计原理

两个8位无符号数相乘,所乘结果是16位,采用原码一位乘,在计算时,用乘数寄存器的最低位来控制部分积是否与被乘数相加,然后右移部分积和乘数,同时乘数寄存器接收部分积右移出来的一位,完成运算后,部分积寄存器保存乘积的高位部分,乘数寄存器中保存乘积的低位部分。

1.2设计思路

被乘数与乘数都是8位,所以相乘的结果是16位。

每个寄存器的范围是8位,所以乘积的结果用两个寄存器来存储表示。

实验开始时将实验数据从实验箱的开关输入到R0、R1、R2、R3四个寄存器中,部分积存放在R0,8位乘数放在R1,8位被乘数放在R2,R3控制乘数与被乘数都是8位数。

在计算时,首先判断乘数末位上的值是1还是0,决定被乘数是否与部分积相加,然后判断部分积的末位,因为右移时部分积的末位会溢出,乘数右移时要接收由部分积溢出来的数,所以根据判断来决定乘数右移后的高位是1还是0。

运算结束时16位乘积结果的高8位从R0调出,低8位从R1调出,两个数据组成最终结果。

1.3设计环境

本实验采用COP2000实验箱和COP2000仿真软件。

在COP2000试验仪上实现编程,所应用的编程语言为汇编语言。

在伟福试验仪中有相关的模型机指令集分为几大类:

算术运算指令、逻辑运算指令、移位指令、数据传输指令、跳转指令、中断返回指令、输入输出指令。

此为COP2000计算机组成原理实验软件截图:

图1.1COP2000计算机组成原理集成调试软件

第2章详细设计方案

2.1总体方案的设计

(1)初始化以及输入乘数与被乘数

首先是将部分积初始化送到寄存器R0中,乘数放入R1,被乘数放入R2。

直接进行到地址LOOP部分。

(2)运算过程

首先从乘数最低位开始判断,将R1放于寄存器A中并和立即数#01H相与,此时可以判断乘数最低位是0或1。

基于语句JZNEXT,当前面的判断结果是0,跳转到地址NEXT;否则顺序执行程序。

跳转到NEXT,即当程序乘数最低位为0时,将R0不变;顺序执行程序,即当乘数最低位为1时,将R0与R2相加,判断最低位是0还是1,当判断结果是0,跳转到NEXT1,否则顺序执行程序,所得到的结果送到寄存器R0中,存入数据后无条件跳转到NEXT2,判断是否是最后一位。

然后进行移位操作。

在移位前需要考虑R0的最低位是0或1,因为部分积移到的数值也是结果的部分,就是保存在结果低位的部分,也就是寄存器R1中,所以要保留移掉部分,此时判断R0最低位。

利用语句JZNEXT1,当前面的判断结果是0,标志位为1,跳转到地址NEXT1;否则顺序执行程序。

当部分积最低位是1时,右移R0,进行保存;当部分积最低位是0时,右移R0、R1,进行保存。

每次循环结束都要进入结果输出部分JZNEXT3。

(3)显示乘积的结果

最后循环控制程序结束。

因为乘法的结果是16位,而此时16位结果的高八位存放在R0,低八位存放于R1。

显示结果为R0显示的数据加上R1显示的数据。

2.1.1总体方案的逻辑图

图2.1总体方案的逻辑图

 

如上逻辑框图2.1中所示,R0、R1、R2均是8位的寄存器,其中R0存放部分积的原码,R1存放乘数的原码,R2存放被乘数的原码。

移位和加控制电路受R1和R0的末位控制(当R1末位是1时,R0和R2相加;当R1末位是0时,R0不变。

当R0末位是0时,R0和R1右移一位;当R0末位是1时,R0右移一位,R1右移一位加)。

然后将R0右移移8位加上R1,得到乘法16位结果。

 

2.2功能模块的设计

图2.2功能模块设计图

2.2.1数据输入模块的设计

将部分积初始化送到寄存器R0中,乘数放入R1,被乘数放入R2。

应用MOVR0,#IIH语句将三个数据分别输入到R0、R1、R2。

2.2.2乘数末位判断与移位模块的设计

(1)功能描述

判断乘数末位是否为1,应用MOVA,R1和ANDA,#01语句,将乘数与1相与,得出末位结果。

然后利用JZNEXT,如果结果是0,则跳转到地址NEXT;否则顺序执行程序。

(1)NEXT,即当乘数最低位为0时,R0不变;

(2)顺序执行程序,即当乘数最低位为1时,将R0与R2相加,所得到的结果送到寄存器R0中。

在移位前需要考虑R0的最低位是0或1,因为部分积移到的数值也是结果的部分,就是保存在结果低位的部分,也就是寄存器R1中,所以要保留移掉部分,此时判断R0最低位。

先应用MOVA,R0和ANDA,#01,将部分积与1相与,得出末位结果。

利用JZNEXT1,当前面的结果是0,跳转到地址NEXT1;否则顺序执行程序。

当部分积最低位是1时,右移R0,右移R1加10000000,进行保存;当部分积最低位是0时,右移R0、R1,进行保存。

(2)流程图

图2.3乘数末位判断与移位流程图

2.2.3乘积结果显示模块的设计

(1)功能描述

因为乘法的结果是16位,而此时16位结果的高八位存放在R0,低八位存放于R1。

显示的结果就是R0寄存器与R1寄存器显示的结果合在一起即为最终的结果。

(2)乘积结果显示流程图

图2.4乘积结果显示流程图

第3章程序调试与结果测试

3.1程序调试

(1)在编程开始阶段时候,写数据传送指令时写成了MOVA,00H,本意是想将立即数0送到累加器A中,但出现错误。

后经查阅书籍应在数据前加#,才能将立即数送到累加器,所以指令修改为MOVA,#00H。

(2)实验中想将寄存器R0中的数与寄存器R2中的数相加,所以指令写成了ADDR0,R1。

但这样写却没有达到正确的结果。

所以修改为先将R0的值送到累加器A中去,在累加器A中完成加法运算,然后将结果送回到R0,此为正确的写法。

(3)在本程序设计思想中,需要进行将部分积右移,但此时出现的逻辑错误就是没有考虑加完以后部分积最高位可能出现进位1,当右移后默认为0,所以产生的进位1将被移位所丢失掉。

3.2结果测试

这部分为测试部分,我们分别输入三组数据来进行验证。

X为被乘数,Y为乘数。

(1)[X]=32H[Y]=95H

X*Y=1D1A部分积高位R0(1D),低位R1(1A)

(2)[X]=01H[Y]=02H

X*Y=02H部分积高位R0(00),低位R1(02)

(3)[X]=0B2H[Y]=95H

X*Y=679A部分积高位R0(67),低位R1(9A)

测试结果都正确,寄存器R0与寄存器R1中所表示的数据转换化为十进制的结果都符合,说明程序验证正确。

下图是测试

(1)的软件显示结果:

图3.1测试

(1)结果显示

 

参考文献

[1]唐朔飞.计算机组成原理(第2版)[M].北京:

高等教育出版社,2008

[2]王爱英.计算机组成与结构(第4版)[M].北京:

清华大学出版社,2006

[3]白中英.计算机组成原理(第4版)[M].北京:

科学出版社,2008

[4]王冠.VerilogHDL与数字电路设计[M].北京:

机械工业出版社,2005

[5]江国强.EAD技术习题与实验[M].北京:

电子工业出版社,2005

[6]杜建国.VerilogHDL硬件描述语言[M].北京:

国防工业出版社,2004

附录(源程序)

MOVR0,#00H

MOVR1,#32H

MOVR2,#95H

MOVR3,#08H

LOOP:

MOVA,R1

ANDA,#01H

JZNEXT

MOVA,R0

ADDA,R2

MOVR0,A

ANDA,#01H

JZNEXT1

MOVA,R0

RRA

MOVR0,A

MOVA,R1

RRA

ORA,#80H

MOVR1,A

JMPNEXT2

NEXT1:

MOVA,R0

RRA

MOVR0,A

MOVA,R1

RRA

MOVR1,A

JMPNEXT2

NEXT:

MOVA,R0

ANDA,#01H

JZNEXT1

MOVA,R0

RRA

MOVR0,A

MOVA,R1

RRA

ORA,#80H

MOVR1,A

JMPNEXT2

NEXT2:

MOVA,R3

SUBA,#01H

ORA,#00H

JZNEXT3

MOVR3,A

JMPLOOP

NEXT3:

JMPNEXT3

 

课程设计总结:

这次的组成原理课程设计使我收获了很多,学到了很多,同时也发现了自己的许多不足,这次课设不仅让我巩固了课堂上学习的知识点,理论和实践很好的结合到了一起,而且还能够延伸我的知识面,锻炼了自学的能力,最重要的是在做成功的那一刻让我有一种成就感。

其次要感谢老师和同学对我的帮助,帮助我解决了不少难题,通过阅读一些相关书籍,学会了如何存放数据,寄存器左移右移,如何判断数据的末位是否为1,独立的完成了这次课程设计任务。

刚看到任务书的时候,是两个8位无符号数相乘,我想到了我们课上学的原码一位乘,于是就试着有原码一位乘去做,把书上原码一位乘那节重新看了一遍,查找了需要用到的指令,经过很多尝试才做出来,在同学的帮助下解决了遇到的问题,使得程序成功运行,这不仅让我尝到了成功的喜悦,还让我明白了要有耐心和恒心,只要坚持不懈,总会成功的。

在反复的思考探索中,我培养了独立思考的能力,增强了找出问题解决方法的能力。

这次课程设计,不仅提高了我的动手能力,还提高了我的动脑能力,理论联系实际,使所学的知识不再枯燥乏味,让我更好地掌握和理解《计算机组成原理》这门课程。

总之,这次课程设计使我受益匪浅。

 

指导教师评语:

 

指导教师(签字):

      年月日

课程设计成绩

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1