定点原码一位乘法器的设计Word文件下载.docx

上传人:b****5 文档编号:20281836 上传时间:2023-01-21 格式:DOCX 页数:12 大小:140.55KB
下载 相关 举报
定点原码一位乘法器的设计Word文件下载.docx_第1页
第1页 / 共12页
定点原码一位乘法器的设计Word文件下载.docx_第2页
第2页 / 共12页
定点原码一位乘法器的设计Word文件下载.docx_第3页
第3页 / 共12页
定点原码一位乘法器的设计Word文件下载.docx_第4页
第4页 / 共12页
定点原码一位乘法器的设计Word文件下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

定点原码一位乘法器的设计Word文件下载.docx

《定点原码一位乘法器的设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《定点原码一位乘法器的设计Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。

定点原码一位乘法器的设计Word文件下载.docx

第1章总体设计方案

1.1设计原理

原码一位乘,即两个原码数相乘,其乘积的符号为相乘两数符号的异或值,数值则为两数绝对值之积。

在计算时,用乘数寄存器的最低位来控制部分积是否与被乘数相加,然后右移部分积和乘数,同时乘数寄存器接收部分积右移出来的一位,完成运算后,部分积寄存器保存乘积的高位部分,乘数寄存器中保存乘积的低位部分。

1.2设计思路

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

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

实验开始时将实验数据从实验箱的开关输入到R0、R1、R2三个寄存器中,部分积存放在R0,4位被乘数放在R1,4位乘数放在R2。

运算过程采用原码一位乘。

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

运算结束时8位乘积结果的高4位从R0调出,低4位从R1调出,两个数据组成最终结果,并在OUT寄存器中显示。

1.3设计环境

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

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

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

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

本程序所用到的相应的指令集

(1)算术逻辑运算指令

ADDA,R?

------------将寄存器R?

的值加入累加器A中

ADDA,#II----------立即数#II加入累加器A中

SUBA,#II-----------从累加器中减去立即数后加入累加器A中

ANDA,#II-----------累加器A“与”立即数II

(2)数据传送指令

MOVA,R?

的值送到累加器A中

MOVR?

#II------------将立即数II存放到寄存器R?

MOVR?

,A------------将累加器A中的值送到寄存器A中

(3)移位指令

RRA----------------累加器A右移

RLA----------------累加器A左移

(4)跳转指令

JZMM---------------若零标志位置1,跳转到MM地址

JMPMM---------------跳转到MM

(5)位运算

ANDA,R?

------------累加器A“与”寄存器R?

的值

(6)输入输出

OUT--------------------将累加器A中数据输出到输出端口

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

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

第2章详细设计方案

2.1总体方案的设计与实现

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

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

直接进行到地址LOOP部分。

(b)运算过程

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

基于语句JZNEXT,当前面的判断结果是0,跳转到地址NEXT;

否则顺序执行程序。

跳转到NEXT,即当程序乘数最低位为0时,将R0不变;

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

然后进行移位操作。

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

利用语句JZNEXT1,当前面的判断结果是0,标志位为1,跳转到地址NEXT1;

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

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

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

(c)显示乘积的结果

最后循环控制程序结束。

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

如果要显示结果就要把R0数据左移4位加上R1数据,然后在寄存器OUT输出结果。

例如:

被乘数与乘数分别为十六进制表示的立即数#0DH和#0BH,则相乘的结果为十六进制立即数#8FH,在寄存器OUT上显示8F,将8F的结果转化为十进制为143,所以验证结果是正确的。

2.1.1总体方案的逻辑图

图2.1总体方案的逻辑图

如上逻辑框图2.1.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右移一位加1000)。

然后将R0左移4位加上R1,得到乘法8位结果,并在OUT输出结果。

2.1.2算法流程图

图2.2乘法器整体流程图

2.2功能模块的设计与实现

2.2.1数据输入模块的设计与实现

2.2.1.1功能描述

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

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

2.2.1.2数据输入流程图

图2.3数据输入流程图

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

2.2.2.1功能描述

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

然后利用JZNEXT,基于前面的结果是0,则跳转到地址NEXT;

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

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

2.2.2.2乘数末位判断流程图

图2.4乘数末位判断流程图

2.2.3移位模块的设计与实现

2.2.3.1功能描述

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

利用JZNEXT1,当前面的结果是0,跳转到地址NEXT1;

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

 

2.2.3.2移位模块流程图

图2.5移位模块流程图

2.2.4乘积结果显示的设计与实现

2.2.4.1功能描述

2.2.4.2乘积结果显示流程图

图2.6乘积结果显示流程图

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

3.1程序调试

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

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

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

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

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

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

3.2结果测试

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

X为被乘数,Y为乘数。

(1)[X]=0000[Y]=1010

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

(2)[X]=0001[Y]=1010

X*Y=00001010部分积高位R0(00),低位R1(0A)

(3)[X]=0011[Y]=0100

X*Y=00001100部分积高位R0(00),低位R1(0C)

(4)[X]=1011[Y]=1101

X*Y=10001111部分积高位R0(08),低位R1(0F)

(5)[X]=1001[Y]=1001

X*Y=01010001部分积高位R0(05),低位R1(01)

(6)[X]=1010[Y]=0101

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

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

下图是测试(4)的软件显示结果:

图3.1测试(4)结果显示

乘数为1011(0B);

被乘数为1101(0D)。

乘积结果为10001111(8F)。

如图显示部分积R0(08),乘数R1(0F),而OUT寄存器数据为十六进制数8F,即乘积的最后结果。

参考文献

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

高等教育出版社,2008

[2]伟福COP2000型计算机组成原理试验仪指导书[M].南京伟福实业有限公司

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

清华大学出版社,2006

附录

MOVR0,#00H

MOVR1,#0BH

MOVR2,#0DH

LOOP:

MOVA,R1

ANDA,#01H

JZNEXT

MOVA,R0

ADDA,R2

MOVR0,A

JZNEXT1

RRA

ADDA,#8H

MOVR1,A

JMPNEXT2

NEXT1:

NEXT:

NEXT2:

RLA

ADDA,R1

OUT

JMPLOOP

END

课程设计总结:

在此次的课程设计过程中,我参阅了一些书籍以及参考资料,通过了阅读COP2000实验仪器的指导书和指导老师的帮助,逐渐从刚开始不知如何使用汇编语言到后来学会存放数据,寄存器左移右移,如何判断数据末位是否为1等知识,终于独立地完成了这个设计任务。

在设计的过程中,巩固了所学的《计算机组成原理》中有关汇编语言编程实现定点原码一位乘方面的知识,同时,也增长了新的知识。

记得实验过程中最让我困扰的是部分积右移。

因为右移时无法将R0右移时溢出的末位数据加在R1上。

原本想采用带进位的右移,但在输出实验结果却遇到了不便。

因此我做出了大胆假设,在输出结果时先将R0左移4次再加上R1的据,从而得出乘积后的8位结果并在OUT寄存器输出。

在随后的上机调试过程中,实现了我的假设,并成功的输出实验结果。

而且,我在反复思考的过程中,还提高了独立设计思维的灵敏度,以及增强了找出及解决问题的方法和能力。

通过这次课程设计,既锻炼了我的动手能力,又锻炼了我的动脑能力,使我理论联系实际,使所学的知识不再枯燥无味,并通过运用课本知识来设计自己的指令系统,激发了我对《计算机组成原理》这门课程的兴趣。

指导教师评语:

指导教师(签字):

      年月日

课程设计成绩

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

当前位置:首页 > 自然科学 > 生物学

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

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