当前位置:文档之家› 补码一位乘的程序设计 计算机组成原理

补码一位乘的程序设计 计算机组成原理

沈阳航空航天大学课程设计报告课程设计名称:计算机组成原理课程设计课程设计题目:定点补码乘法器的程序设计院(系):专业:班级:学号:姓名:指导教师:完成日期:沈阳航空航天大学课程设计报告目录第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)第1章 总体设计方案1.1 设计原理采用伟福COP2000试验箱,设计并实现定点补码一位乘(booth )。

要求:采用的算法为定点补码一位乘booth 算法,乘数和被乘数规定为6位,其中首位为符号位。

数据要求以原码的形式输入,采用补码方式进行运算。

实验数据从试验箱的开关输入,运算的结果在OUT 寄存器中显示。

设计原理:比较YnYn+1的状态执行相应的操作。

如下图是补码一位乘的运算规则:表1.1 Booth 算法操作表说明需要说明的是此操作表是在当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位,数据位为五位,所以要完成六次操作,但最后一次不移位,在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 A, R? -----------将寄存器R?的值加入累加器A中ADD A,#II ----------立即数II加入累加器A中SUB A,#II-----------从累加器中减去立即数II后加入累加器A中AND A,R?------------累加器A“与”寄存器R?的值AND A,#II ----------累加器A“与”立即数II的值OR A, R? -----------累加器A“与”寄存器R?的值OR A, #II ----------累加器A“与”立即数II的值CPL A----------------累加器A取反,再存入累加器A中(2)数据传送指令MOV A,R?------------将寄存器R?的值送到累加器A中MOV A, #II -----------将立即数II送到累加器A中MOV R?,A------------将累加器A中的值送到寄存器R?中MOV R?,#II----------将立即数II送到寄存器R?中RR A-----------------累加器右移指令RL A-----------------累加器左移指令(3)跳转指令JZ MM---------------若零标志位置1,跳转到MM地址JMP MM---------------跳转到MM地址(4)输入输出指令IN--------------------从输入端口读入数据到累加器A中OUT--------------------将累加器A中数据输出到输出端口如下为COP2000计算机组成原理实验软件截图:图 1.1 COP2000计算机组成原理试验仪软件截图第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,最后判断部分积的首位,令部分积移一次位后的首位与原先相同,这是一次操作包括的所有步骤。

(3)判断循环是否结束并输出:移位后,将R3的值减一,判断是否为0,若不为0,则继续循环,一共重复n次。

若为0,则再判断末两位状态决定是否与被乘数相加或者相减,或是不加也不减,但是不必移位,这样便可得到最后结果。

最后输出结果,先将乘数从OUT 寄存器中显示,再将部分积从OUT寄存器显示出来。

2.2 流程图的设计与实现2.2.1流程图具体分析1.进行初始化,流程图如图2.1:图2.1 初始化流程图2.根据运算规则循环相乘判断乘数末位和附加位YnYn+1,根据运算规则进行循环,其中移位时附加位要与乘数末位保持一致,乘数的首位要与部分积的末位保持一致,部分积移位后的首位要与移位前的首位一致,并且根据数据位的个数决定循环几次。

流程图如图2.2:图2.2 循环相乘流程图具体说明:乘法开始后,先将Y与01H进行“与”运算,判断Yn的末位,再将附加位与01H进行“与”运算,判断附加位的末位Yn+1,根据Yn和附加位Yn+1的状态决定部分积与被乘数相加还是相减,或是不加也不减,然后根据进行算术移位。

移位操作需要先判断乘数Y的末位,如果Yn为1,则附加位为1,反之为0,将乘数右移一位,在判断部分积的末位,若部分积末位为0,将移位后的乘数首位置0,反之置1,再判断部分积首位为1,移位后的部分积首位仍置1,移位的操作流程图如图2.3:图2.3 移位操作流程图3.判断循环是否结束并输出每完成一次运算规则操作就将寄存器R3中的数值减1,直到减为0,在判断一次YnYn+1,按照运算规则表进行加[X]补或[-X]补的运算,但是不移位,最后将结果输出,其中先输出乘数,再输出部分积。

流程图如图2.4:图2.4 判断并输出流程图第3章程序调试与结果测试3.1 程序调试(1)在编程时需要用到很多寄存器,在EM程序中会提供很多寄存器,但运行程序时每一步占用寄存器,刚开始不知道,结果运行程序时到一半时程序出现问题,才发现所需要的寄存器被占用了,如果想用寄存器,尽量在靠后的寄存器中,比如0F0H;(2)编程开始阶段,不熟悉指令集,执行把立即数放入累加器的操作,误将MOV A, 0AH用作MOV A, #0AH;(3)在对部分积移位操作时,如果最高位是1时,移位最高位仍然置1,当时考虑不够充分,没有置1,导致程序出错。

3.2 程序测试及结果分析测试阶段,用1组数据进行检验:(1)输入:X=100110B,Y=011000B,分别显示在R1、R2中,设置n=5,存在R3中,如图3.1所示:图3.1 输入X,Q,n(2)将所需的补码求出,此时 [X]补=FAH, [-X]补=06H, [Y]补=18H,[X]补、[-X]补、 [Y]补分别显示在0F0H、0F1H、0F2H存储单元中,如图3.2所示:图3.2 补码显示(3)判断YnYn+1,00,直接右移一位,此时部分积应该为00H,乘数为0CH,附加位为00H,部分积、乘数和附加位结果分别显示在寄存器R0、0F2H、80H存储单元中,如图3.3和3.4所示:图3.3 部分积显示图3.4 乘数和附加位显示(4)C=5,做C=C-1操作,储存在R3中,如图3.5所示:图3.5 C结果显示(5)判断C是否为0,若不为0,按Booth算法操作表继续循环,当C=0时,此时部分积为01H,乘数为20H,附加位为01H,如图3.6和3.7所示:图3.6 部分积显示图3.7 乘数和附加位显示操作,结果应该为:乘数为20H,(6)判断YnYn+1,为01,做部分积+[X]补部分积为FBH,分别输出结果,如图3.8,3.9所示:图3.8 OUT寄存器输出乘数图3.9 OUT寄存器输出部分积经过计算验证结果无误参考文献[1]曹昕爱.EDA技术试验与课程实验[M].北京:清华大学出版社,2006[2] 范延滨.微型计算机系统原理、接口与EDA设计技术[M].北京:北京邮电大学出版社,2006[3] 唐朔飞.计算机组成原理[M].北京:高等教育出版社,2006[4] 王英爱.计算机组成与结构(第4版)[M].北京:清华大学出版社,2006附录。

相关主题