沈阳航空航天大学
课 程 设 计 报 告
课程设计名称:计算机组成原理课程设计
课程设计题目:定点补码乘法器的程序设计
院(系):
专
班
学
姓
业:
级:
号:
名:
指导教师:
完成日期:
沈阳航空航天大学课程设计报告
目
录
第 1 章 总体设计方案.................................................................................................. 1
1.1 设计原理.................................................................................................................1
1.2 设计思路.................................................................................................................1
1.3 设计环境.................................................................................................................2
第 2 章 详细设计方案.................................................................................................. 4
2.1 总体方案的设计与实现.......................................................................................4
2.1.1 总体方案的具体描述.......................................................................................4
2.2 流程图的设计与实现...........................................................................................5
2.2.1 流程图具体分析.................................................................................................. 5
第 3 章 程序调试与结果测试...................................................................................... 9
3.1 程序调试...............................................................................................................9
3.2 程序测试及结果分析...........................................................................................9
参考文献.........................................................................................................................14
附 录...........................................................................................................................15
-I-
沈阳航空航天大学课程设计报告
第 1 章 总体设计方案
1.1 设计原理
采用伟福 COP2000 试验箱,设计并实现定点补码一位乘(booth)。
要求:采用的算法为定点补码一位乘 booth 算法,乘数和被乘数规定为 6 位,
其中首位为符号位。数据要求以原码的形式输入,采用补码方式进行运算。实验
数据从试验箱的开关输入,运算的结果在 OUT 寄存器中显示。
设计原理:比较 YnYn+1 的状态执行相应的操作。如下图是补码一位乘的运
算规则:
表 1.1
Booth 算法操作表说明
乘数 Yn
附加位 Yn+1
说明
0
0
1
1
0
1
0
1
附加位、乘数、部分积→1 位
部分积加[X]补
附加位、乘数、部分积→1 位
部分积加[-X]补
附加位、乘数、部分积→1 位
附加位、乘数、部分积→1 位
需要说明的是此操作表是在当 n≠0 时,当 n=0 时,判断 YnYn+1,运算规则
同此操作表只是不移位。即在运算的最后一步,乘积不再右移。
1.2 设计思路
(1) 构造补码一位乘的初始化所需要的数值
因为补码一位乘的算法需要先求出[X]补、[-X]补、[Q]补,所以先将[X]补、[-X]补、
[Q]补分别存贮到 0F0H 到 0F2H 存储单元中。因为部分积和附加位的初始值都是 0,
所以在 0E0H 单元存入附加位初始值 0,在 R0 中存入部分积初始值 0。
其他数的处理:将输入的一个值 Q 求出补码作为乘数 Y,并存入 R2 中;另
一个值 X 存入 R1 中,根据它来求出[X]补、[-X]补;
本实验规定乘数和被乘数为 6 位,数据位为五位,所以要完成六次操作,但
-1-
沈阳航空航天大学课程设计报告
最后一次不移位,在 R3 寄存中存入数值 n=5,每次操作完成后减 1。
(2)运算并输出
根据乘数末位及附加位来确定执行的操作,每完成一次操作 R3 中的数值减
一。判断 R3 的数值是否为零,若不为零,则继续循环上述操作,若为零,则循环
结束,判断此时的乘数末位及附加位,再按运算规则进行一次操作,但是不移位,
然后结束运算。即开始时 Yn+1=0,部分积初值为 0,每一步乘法由 YnYn+1 决定原
部分积加 [X]补或加 [-X]补或加 0,再右移一位得到新的部分积,以此重复 n 步,
第 n+1 步由 YnYn+1 决定部分积加[X]补或加 [-X]补或加 0,但不移位,即得最后结
果,最后先把乘数的最终结果从 OUT 寄存其中显示出来,再将部分积的最终结果
从 OUT 寄存其中显示出来。
(3)实现方式
在掌握 COP2000 试验箱的体系结构后,充分利用试验箱提供的汇编语言,
以及有限的硬件资源,完成程序的编写。
1.3 设计环境
利用 COP2000 型计算机组成原理实验仪软件和计算机,在 COP2000 试验仪
软件上编程实现补码一位乘。COP2000 集成开发环境是为 COP2000 实验仪与 PC
机相连进行高层次实验的配套软件,它通过实验仪的串行接口和 PC 机的串行接
口相连,提供汇编、反编、编辑、修改指令、文件传送、调试 FPGA 面。其实验
等功能,该软件在 Windows 下运行。COP2000 试验仪软件的指令集分为如下大
类:算术运算指令、逻辑运算指令、移位指令、数据传输指令、跳转指令、中断
返回指令、输入输出指令。本程序所用到的相应的指令集如下:
(1)算术逻辑运算指令
ADD
ADD
SUB
AND
AND
OR
A, R? -----------将寄存器 R?的值加入累加器 A 中
A,#II ----------立即数 II 加入累加器 A 中
A,#II-----------从累加器中减去立即数 II 后加入累加器 A 中
A,R?------------累加器 A“与”寄存器 R?的值
A,#II ----------累加器 A“与”立即数 II 的值
A, R? -----------累加器 A“与”寄存器 R?的值
-2-
沈阳航空航天大学课程设计报告
OR
A, #II ----------累加器 A“与”立即数 II 的值
CPL
A----------------累加器 A 取反,再存入累加器 A 中
(2)数据传送指令
MOV
MOV
MOV
MOV
RR
RL
A,R?------------将寄存器 R?的值送到累加器 A 中
A, #II -----------将立即数 II 送到累加器 A 中
R?,A------------将累加器 A 中的值送到寄存器 R?中
R?,#II----------将立即数 II 送到寄存器 R?中
A-----------------累加器右移指令
A-----------------累加器左移指令
(3)跳转指令
JZ
MM---------------若零标志位置 1,跳转到 MM 地址
JMP
MM---------------跳转到 MM 地址
(4)输入输出指令
IN--------------------从输入端口读入数据到累加器 A 中
OUT--------------------将累加器 A 中数据输出到输出端口
如 下 为 COP2000 计 算 机 组 成 原 理 实 验 软 件 截 图 :
图 1.1 COP2000 计算机组成原理试验仪软件截图
-3-
沈阳航空航天大学课程设计报告
第 2 章 详细设计方案
2.1 总体方案的设计与实现
本课设采用 COP2000 实验仪软件和计算机实现补码一位乘的功能,利用伟
福 COP2000 的指令集编程实现。总体设计方法为输入两个数,分别求出需要的相
应值,n 为数据位个数,当 n 不等于零时,判断 YnYn+1,按照补码操作表进行
相应的运算,当 n 等于零时,再按照补码操作表进行运算但是不移位,最后输出
结果。
2.1.1 总体方案的具体描述
(1)先进行初始化:
将部分积和附加位设置为 0,分别存入 R0,0E0H 中。设置循环次数为五次,
存入 R3 中。操作如下:
先输入一个数值 X 存入 R1 中,判断 X 的符号位,将这个数和 20H 进行“与”
运算,如果为 00H,说明该数值为正数,它的补码也为 X;如果为 20H,则说明
该数为负数,则先将 X 取反,将取反后的数值加上 21H,求出补码,补码存入 0F0H
中,因为规定乘数和被乘数为六位,但机器会识别八位,令前两位与符号位保持
相同,方便运算。再求出-X 的补码,存入 0F1 中。最后求出 Q 的补码 Y,存入
0F2 中。
(2)根据运算规则循环相乘:
乘法运算前 A 寄存器被清零,作为初始部分积,附加位置为 0,被乘数的补
码存在 X 中,乘数的补码在 Q 高 n+1 位中,寄存器 R3 存放乘数的位数 n,乘法
开始后,根据 Yn 和附加位 Yn+1 的状态决定部分积与被乘数相加还是相减,或
是不加也不减,然后根据补码规则进行算术移位,先判断乘数 Y 的末位,如果 Yn
为 1,则附加位为 1,反之为 0,将乘数右移一位,在判断部分积的末位,若部分
积末位为 0,将移位后的乘数首位置 0,反之置 1,最后判断部分积的首位,令部
分积移一次位后的首位与原先相同,这是一次操作包括的所有步骤。
-4-
沈阳航空航天大学课程设计报告
(3)判断循环是否结束并输出:
移位后,将 R3 的值减一,判断是否为 0,若不为 0,则继续循环,一共重复
n 次。若为 0,则再判断末两位状态决定是否与被乘数相加或者相减,或是不加也
不减,但是不必移位,这样便可得到最后结果。最后输出结果,先将乘数从 OUT
寄存器中显示,再将部分积从 OUT 寄存器显示出来。
2.2 流程图的设计与实现
2.2.1 流程图具体分析
1.进行初始化,流程图如图 2.1:
图 2.1 初始化流程图
-5-
沈阳航空航天大学课程设计报告
2.根据运算规则循环相乘
判断乘数末位和附加位 YnYn+1,根据运算规则进行循环,其中移位时附加
位要与乘数末位保持一致,乘数的首位要与部分积的末位保持一致,部分积移位
后的首位要与移位前的首位一致,并且根据数据位的个数决定循环几次。流程图
如图 2.2:
图 2.2 循环相乘流程图
具体说明:乘法开始后,先将 Y 与 01H 进行“与”运算,判断 Yn 的末位,
再将附加位与 01H 进行“与”运算,判断附加位的末位 Yn+1,根据 Yn 和附加位
Yn+1 的状态决定部分积与被乘数相加还是相减,或是不加也不减,然后根据进
行算术移位。
移位操作需要先判断乘数 Y 的末位,如果 Yn 为 1,则附加位为 1,反之为 0,
将乘数右移一位,在判断部分积的末位,若部分积末位为 0,将移位后的乘数首
-6-