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

课 程 设 计 报 告

课程设计名称:计算机组成原理课程设计

课程设计题目:基于COP2000的定点无符号数乘

法的实现

目 录

第1章 总体设计方案 .................................................................................................. 1

1.1 设计原理 ................................................................................................................ 1

1.2 设计思路 ................................................................................................................ 1

1.3 设计环境 ............................................................................................................ 1

第2章 详细设计方案 .................................................................................................. 3

2.1 总体方案的设计 .................................................................................................... 3

2.1.1总体方案的逻辑图 .......................................................................................... 4

2.2 功能模块的设计 .................................................................................................. 5

2.2.1 数据输入模块的设计 ..................................................................................... 6

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

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

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

3.1 程序调试 .............................................................................................................. 9

3.2 结果测试 ................................................................................................................ 9

参考文献 ......................................................................................................................... 11

附 录(源程序) ...................................................................................................... 12

第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.1 COP2000计算机组成原理集成调试软件

第2章 详细设计方案

2.1 总体方案的设计

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

首先是将部分积初始化送到寄存器R0中, 乘数放入R1, 被乘数放入R2。直接进行到地址LOOP 部分。

(2)运算过程

首先从乘数最低位开始判断,将R1放于寄存器A 中并和立即数#01H相与,此时可以判断乘数最低位是0或1。基于语句JZ NEXT,当前面的判断结果是0,跳转到地址NEXT ;否则顺序执行程序。

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

然后进行移位操作。在移位前需要考虑R0的最低位是0或1,因为部分积移到的数值也是结果的部分,就是保存在结果低位的部分,也就是寄存器R1中,所以要保留移掉部分, 此时判断R0最低位。利用语句JZ NEXT1,当前面的判断结果是0,标志位为1,跳转到地址NEXT1;否则顺序执行程序。

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

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

(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右移一位加10000000)。然后将R0右移移8位加上R1,得到乘法16位结果。

2.2 功能模块的设计

图2.2 功能模块设计图

2.2.1 数据输入模块的设计

将部分积初始化送到寄存器R0中, 乘数放入R1, 被乘数放入R2。应用MOV R0,#IIH 语句将三个数据分别输入到R0、R1、R2。

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

(1) 功能描述

判断乘数末位是否为1,应用MOV A,R1和AND A,#01语句,将乘数与1相与,得出末位结果。然后利用JZ NEXT,如果结果是0,则跳转到地址NEXT ;否则顺序执行程序。

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

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

在移位前需要考虑R0的最低位是0或1,因为部分积移到的数值也是结果的部分,就是保存在结果低位的部分,也就是寄存器R1中,所以要保留移掉部分, 此时判断R0最低位。先应用MOV A,R0和AND A,#01,将部分积与1相与,得出末位结果。 利用JZ NEXT1,当前面的结果是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)在编程开始阶段时候,写数据传送指令时写成了MOV A,00H ,本意是想将立即数0送到累加器A 中,但出现错误。后经查阅书籍应在数据前加#,才能将立即数送到累加器,所以指令修改为MOV A,#00H。

(2)实验中想将寄存器R0中的数与寄存器R2中的数相加,所以指令写成了 ADD R0,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] 王冠.Verilog HDL与数字电路设计[M].北京:机械工业出版社,2005

[5] 江国强.EAD 技术习题与实验[M].北京:电子工业出版社,2005

[6] 杜建国.Verilog HDL硬件描述语言[M].北京:国防工业出版社,2004

附 录(源程序)

MOV R0,#00H

MOV R1,#32H

MOV R2,#95H

MOV R3,#08H

LOOP:

MOV A,R1

AND A,#01H

JZ NEXT

MOV A,R0

ADD A,R2

MOV R0,A

AND A,#01H

JZ NEXT1

MOV A,R0

RR A

MOV R0,A

MOV A,R1

RR A

OR A,#80H

MOV R1,A

JMP NEXT2

NEXT1:

MOV A,R0

RR A

MOV R0,A

MOV A,R1

RR A

MOV R1,A

JMP NEXT2

NEXT:

MOV A,R0

AND A,#01H

JZ NEXT1

MOV A,R0

RR A

MOV R0,A

MOV A,R1

RR A

OR A,#80H

MOV R1,A

JMP NEXT2

NEXT2:

MOV A,R3

SUB A,#01H

OR A,#00H

JZ NEXT3

MOV R3,A

JMP LOOP

NEXT3:JMP NEXT3

课 程 设 计 报 告

课程设计名称:计算机组成原理课程设计

课程设计题目:基于COP2000的定点无符号数乘

法的实现

目 录

第1章 总体设计方案 .................................................................................................. 1

1.1 设计原理 ................................................................................................................ 1

1.2 设计思路 ................................................................................................................ 1

1.3 设计环境 ............................................................................................................ 1

第2章 详细设计方案 .................................................................................................. 3

2.1 总体方案的设计 .................................................................................................... 3

2.1.1总体方案的逻辑图 .......................................................................................... 4

2.2 功能模块的设计 .................................................................................................. 5

2.2.1 数据输入模块的设计 ..................................................................................... 6

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

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

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

3.1 程序调试 .............................................................................................................. 9

3.2 结果测试 ................................................................................................................ 9

参考文献 ......................................................................................................................... 11

附 录(源程序) ...................................................................................................... 12

第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.1 COP2000计算机组成原理集成调试软件

第2章 详细设计方案

2.1 总体方案的设计

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

首先是将部分积初始化送到寄存器R0中, 乘数放入R1, 被乘数放入R2。直接进行到地址LOOP 部分。

(2)运算过程

首先从乘数最低位开始判断,将R1放于寄存器A 中并和立即数#01H相与,此时可以判断乘数最低位是0或1。基于语句JZ NEXT,当前面的判断结果是0,跳转到地址NEXT ;否则顺序执行程序。

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

然后进行移位操作。在移位前需要考虑R0的最低位是0或1,因为部分积移到的数值也是结果的部分,就是保存在结果低位的部分,也就是寄存器R1中,所以要保留移掉部分, 此时判断R0最低位。利用语句JZ NEXT1,当前面的判断结果是0,标志位为1,跳转到地址NEXT1;否则顺序执行程序。

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

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

(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右移一位加10000000)。然后将R0右移移8位加上R1,得到乘法16位结果。

2.2 功能模块的设计

图2.2 功能模块设计图

2.2.1 数据输入模块的设计

将部分积初始化送到寄存器R0中, 乘数放入R1, 被乘数放入R2。应用MOV R0,#IIH 语句将三个数据分别输入到R0、R1、R2。

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

(1) 功能描述

判断乘数末位是否为1,应用MOV A,R1和AND A,#01语句,将乘数与1相与,得出末位结果。然后利用JZ NEXT,如果结果是0,则跳转到地址NEXT ;否则顺序执行程序。

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

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

在移位前需要考虑R0的最低位是0或1,因为部分积移到的数值也是结果的部分,就是保存在结果低位的部分,也就是寄存器R1中,所以要保留移掉部分, 此时判断R0最低位。先应用MOV A,R0和AND A,#01,将部分积与1相与,得出末位结果。 利用JZ NEXT1,当前面的结果是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)在编程开始阶段时候,写数据传送指令时写成了MOV A,00H ,本意是想将立即数0送到累加器A 中,但出现错误。后经查阅书籍应在数据前加#,才能将立即数送到累加器,所以指令修改为MOV A,#00H。

(2)实验中想将寄存器R0中的数与寄存器R2中的数相加,所以指令写成了 ADD R0,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] 王冠.Verilog HDL与数字电路设计[M].北京:机械工业出版社,2005

[5] 江国强.EAD 技术习题与实验[M].北京:电子工业出版社,2005

[6] 杜建国.Verilog HDL硬件描述语言[M].北京:国防工业出版社,2004

附 录(源程序)

MOV R0,#00H

MOV R1,#32H

MOV R2,#95H

MOV R3,#08H

LOOP:

MOV A,R1

AND A,#01H

JZ NEXT

MOV A,R0

ADD A,R2

MOV R0,A

AND A,#01H

JZ NEXT1

MOV A,R0

RR A

MOV R0,A

MOV A,R1

RR A

OR A,#80H

MOV R1,A

JMP NEXT2

NEXT1:

MOV A,R0

RR A

MOV R0,A

MOV A,R1

RR A

MOV R1,A

JMP NEXT2

NEXT:

MOV A,R0

AND A,#01H

JZ NEXT1

MOV A,R0

RR A

MOV R0,A

MOV A,R1

RR A

OR A,#80H

MOV R1,A

JMP NEXT2

NEXT2:

MOV A,R3

SUB A,#01H

OR A,#00H

JZ NEXT3

MOV R3,A

JMP LOOP

NEXT3:JMP NEXT3


相关内容

  • 定点原码一位乘法器的设计
  • 目 录 第1章 总体设计方案 .................................................................................................. 1 1.1 设计原理 ......................... ...

  • 基于加减交替法除法器的FPGA设计与实现
  • r:''-.?-''.-_-_--_--_-__-___-_--___----__1一 鬯的论文得到两院院士关注}PLD CPLD FPGA应用 文章编号:1008--0570(2008)09-2-0141-03 基于加减交替法除法器的FPGA设计与实现 FPGADesignandImplement ...

  • -阵列除法器的设计1
  • Xxxxxxxxx 课 程 设 计 报 告 课程设计名称:计算机组成原理课程设计 课程设计题目:阵列除法器的设计 院(系):xxxxxxxxx 专 业:xxxxxxxxx 班 级:xxxxxxxxx 学 号:xxxxxxxxxxx 姓 名:xxxxxxxxxxxxx 指导教师:xxxxxxxxxxx ...

  • ARM命名规则
  • ARM==Advanced RISC Machines 它开创了一种崭新的商业模式,实现了无厂房式工厂,依靠出售芯片技术知识产权的授权来盈利. 其次,ARM是一种architecture,同MIPS.PowerPC.X86等并列.谈到架构,这实际上本身就是一个很复杂的概念.就现在的理解来看,架构是一 ...

  • 实验二 顺序程序设计
  • 福建农林大学金山学院实验报告 系: 信息与机电工程 专业: 电子信息工程 年级: 2009 姓名: 庄建军 学号: 092230069 实验课程: 汇编语言 实验室号: 1#605 实验设备号: 实验时间: 指导教师签字: 成绩: 实验二 顺序程序设计 1.实验目的和要求 1. 学习使用DEBUG ...

  • 汇编语言指令详解
  • 第一讲 第三章 指令系统--寻址方式 回顾: 8086/8088的内部结构和寄存器,地址分段的概念,8086/8088的工作过 程. 重点和纲要:指令系统--寻址方式.有关寻址的概念:6种基本的寻址方式及 有效地址的计算. 讲授内容: 3.1 8086/8088寻址方式 计算机中的指令由操作码字段和 ...

  • 海明码生成与校验
  • 沈阳航空航天大学 课 程 设 计 报 告 课程设计名称:计算机组成原理课程设计 课程设计题目:海明码生成与校验电路的设计 院(系):计算机学院 专 业:网络工程 班 级:84010202 学 号:[1**********]61 姓 名:刘炎明 指导教师:毛艳娥 沈阳航空工业学院课程设计报告 目 录 ...

  • DSP公司各主流芯片比较
  • DSP芯片介绍及其选型 引言 DSP芯片也称数字信号处理器,是一种特别适合于进行数字信号处理运算的微处理器具,其主机应用是实时快速地实现各种数字信号处理算法.根据数字信号处理的要求,DSP芯片一般具有如下主要特点: (1)在一个指令周期内可完成一次乘法和一次加法: (2)程序和数据空间分开,可以同时 ...

  • 汇编语言期末复习模拟题库
  • 一考试题型100分 1. 数制码制10分 2. 填空30分 3. 判断题:10分语句正确与否错误原因 4. 选择题15分 5. 阅读程序15分 6. 编写程序20分 二. 选择题 59 计算机基础 8086寄存器 寻址方式 指令功能:算术,逻辑,移位,循环 标志位:C,Z,S,O,P 堆栈,SP 汇 ...