BCD码的加法DOC.docx

上传人:b****9 文档编号:25046995 上传时间:2023-06-04 格式:DOCX 页数:17 大小:416.28KB
下载 相关 举报
BCD码的加法DOC.docx_第1页
第1页 / 共17页
BCD码的加法DOC.docx_第2页
第2页 / 共17页
BCD码的加法DOC.docx_第3页
第3页 / 共17页
BCD码的加法DOC.docx_第4页
第4页 / 共17页
BCD码的加法DOC.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

BCD码的加法DOC.docx

《BCD码的加法DOC.docx》由会员分享,可在线阅读,更多相关《BCD码的加法DOC.docx(17页珍藏版)》请在冰豆网上搜索。

BCD码的加法DOC.docx

BCD码的加法DOC

沈阳航空航天大学

 

课程设计报告

 

课程设计名称:

计算机组成原理课程设计

课程设计题目:

COP2000实现BCD码的加法

 

院(系):

计算机学院

专业:

计算机科学与技术

班级:

3401010x

学号:

***********xx

姓名:

张伟

指导教师:

***

完成日期:

2016年1月15日

 

第1章总体设计方案

1.1设计原理

课程设计要求加数、被加数以及和都采用压缩的BCD码,都是6位十进制数,但是从COP2000上面只能输入两位十六进制数,即8位二进制数。

所以在设计时将6位十进制数分为3组,每组2位,进行相加,找6个存储单元对3组数的低位运算和高位运算进行存储,最后两两求和,将最低两位、中间两位、最高两位结果分别放入r3、r2、r1中。

设计时最核心的四个问题我认为分别是将最低位数据左移四位,将数据与F0相与,设计计数单元与进位位存储单元。

1.2设计思路

COP2000上面每次只能输入两个十六进制数,即8个二进制数,现在欲将6位十进制数输入,只能分成3组,3组分别相加。

在进行加法时,要考虑到进位,但是COP2000只能判别最高位是否有进位,所以在进行加法时,将最低位数据左移4次,放到最高位,便可以顺利解决判断进位问题。

在进行每组数据最高位加法时,要将数据与0F0H相与,使低四位清零。

在进行加法时,由于考虑到进位问题,所以设计f7单元存储进位,进位存储单元初始时置0,每当产生进位时,

MOVA,#10HMOV0F0H,A使进位单元置1,所以每进行加法时,都要将进位单元数据相加。

由于数据是分成三组进行,所以在进行运算时需要进行选择,初始时将计数单元置0,进行最后两位运算时计数单元加1,进行中间两位运算时,置数单元继续加1,最高两位运算在加1,当进行选择时,使计数单元数据减去2,当为最低两位时,1减2发生借位,进而执行JC所指向的地址。

当计数单元数据为2减去2时,结果等于0,进而执行JZ所指向单元,当计数单元数据为3时,减去2,结果为1,不执行JC与JZ的指令,执行JMP所指向的地址。

三组数据的低位高位结果分别放入6个存储空间中,最后R0存储最高位两位数据计算结果,R1存储中间两位数据计算结果,R3存储最低两位数据计算结果。

1.3设计环境

COP2000实验平台对应的模型机为8位机,数据总线和地址总线均为8位。

包括一个标准CPU所具备所有部件,这些部件包括:

运算器ALU、累加器A、工作寄存器W、左移门L、右移门R、直通门D、寄存器组R0~R3、程序计数器PC、地址寄存器MAR、堆栈寄存器ST、中断向量寄存器IA、输入端口IN、输出端口寄存器OUT、程序存储器EM、指令寄存器IR、微程序计数器uPC、微程序存储器。

在COP2000仿真软件上实现编程,所应用的编程语言为汇编语言。

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

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

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

(1)算术逻辑运算指令

ADDA,R?

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

的值加入累加器A中

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

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

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

(2)数据传送指令

MOVA,R?

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

的值送到累加器A中

MOVA,MM------------将存储器MM的地址的值送到累加器A中

MOVMM,A------------将累加器A的值送到存储器MM的地址中

MOVR?

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

MOVR?

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

(3)移位指令

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

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

(4)跳转指令

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

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

JCMM---------------若借位标志置1,跳转到MM地址

(5)位运算

ANDA,R?

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

的值

如下为COP2000实验软件截图:

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

第2章详细设计方案

2.1算法与程序的设计与实现

本课设采用伟福COP2000实验仪软件和计算机实现6位十进制BCD码相加功能,利用伟福COP2000的指令集编程实现。

(a)存数:

将两个数据分为三组共6部分存储到内存单元中。

存入的内存单元分别是0f0h、0f1h、0f2h、0f3h、0f4h、0f5h。

(b)设计进位位单元与计数单元。

并且分别置0,存储到0f6h与0f7h中。

(c)这一部分为程序的核心部分。

首先将内存单元0f2h与0f5h数据取出来放到内存R0与R1中,然后将计数单元加1,此时COP2000中要想判断进位只能判断最高位进位,所以需要将两个最低位数据左移四位,在两个数相加之前,需要加上进位位,此时进位位为0,两个左移四位的数据相加后,相加结果有进位,则跳转到ttt1,将两个最低位相加结果加上60H,进位位置1,然后右移四位,将最低位运算结果放到R2中,将计数器中的数与2相减,此时计数单元数据为1,1减2发生借位,所以执行JCt1,跳到t1,将最低两位结果放到0e0h单元保存。

然后程序跳转到tt2,最后将最低两位数与f0相与,最低两位数后四位清零,得到高四位,然后加上进位数,再将两个高四位数相加,判断是否有进位,若高四位相加有进位,跳转到ttt4中,将结果加上60,进位位置1,然后在进行判断,现在计数器中存储1,1减2发生借位,跳转到t2,将最低两位数的高位运算结果放到e0单元,然后取出中间两位数。

如果相加结果不发生进位则判断结果是否大于90,若结果大于90,则跳转到ttt5,将结果减10存储到内存中,同时进位位置1,然后跳转到ttt6,将计数单元里面存储的1减2,发生借位,跳转到t2,将最低两位数高位运算结果放入e1单元,然后将中间两位存储到R0与R1中。

如果相加结果小于9,跳转到ttt3,若结果小于90,将进位位置0跳转到ttt6,将计数单元里面存储的1减2,发生借位,跳转到t2,执行同上。

(d)中间数与最高两位数据运算结果同(c)。

(e)将最低两位数运算的结果存储到R2中,将中间两位运算的结果存到R1中,将最高两位运算结果存储到R0中。

2.2流程图的设计与实现

1.

存数过程。

如图2.2.1所示

 

图2.2.1存数据过程流程图

2.设计进位位单元与计数单元。

如图2.2.2所示

 

图2.2.2设计进位位单元与置数单元流程图

3.程序核心部分流程图。

如图2.2.3所示

图2.2.3核心部分流程图

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

3.1程序调试

1.写指令时忘记在十六进制以字母开头的数前面加上0。

2.累加器A中的数据忘了及时保存在寄存器或者内存单元中,导致数据丢失,发生错误。

3.在写指令时犯了非常低级的错误,把ADD指令与AND指令弄混淆了,写AND指令时写成ADD指令,发现单步调试结果不对,仔细观察,发现马虎写错了。

4.在刚刚编写指令,还不是十分熟练的时候,有时候直接把内存单元的值直接写到寄存器里面,没有通过累加器A,全是马虎造成的。

3.2程序测试及结果分析

给出的数据:

296579与324856

运行结果为:

621435如图3.3.1所示

图3.3.1测试结果显示

 

测试数据为:

258579与364936

运行结果为:

623515如图3.3.2所示

图3.3.2测试结果显示

 

参考文献

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

高等教育出版社,2008

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

高等教育出版社,2006

[3]COP2000实验指导书

附录(源代码)

mova,#29h;输入被加数

mov0f0h,a

mova,#65h

mov0f1h,a

mova,#79h

mov0f2h,a

mova,#32h;输入加数

mov0f3h,a

mova,#48h

mov0f4h,a

mova,#56h

mov0f5h,a

mova,#00h;计数器置零

mov0f6h,a

mova,#00h;进位位初始化

mov0f7h,a

mova,0f2h;取低位字节数

movr0,a

mova,0f5h

movr1,a

jmptt1

t1:

mova,r2;将最低两位数低位运算结果放入e0单元

mov0e0h,a

jmptt2

t2:

mova,r2;将最低两位数高位运算结果放入e1单元

mov0e1h,a

mova,0f1h;取中间两位数分别放入r0与r1中

movr0,a

mova,0f4h

movr1,a

jmptt1

t3:

mova,r2;将中间两位数低位运算结果放入e2单元

mov0e2h,a

jmptt2

t4:

mova,r2;将中间两位数高位运算结果放入e3单元

mov0e3h,a

mova,0f0h;取最高两位数

movr0,a

mova,0f3h

movr1,a

jmptt1

t5:

mova,r2;将最高两位数低位运算结果放入e4单元

mov0e4h,a

jmptt2

t6:

mova,r2;将最高两位数高位运算结果存入e5单元

mov0e5h,a

mova,0e0h;将最低两位数运算结果存入r2

adda,0e1h

movr2,a

mova,0e2h;将中间两位数运算结果存入r1

adda,0e3h

movr1,a

mova,0e4h;将最高两位数运算结果存入r0

adda,0e5h

movr0,a

loop:

jmploop

tt1:

mova,0f6h;计数器加1

adda,#01h

mov0f6h,a

mova,r0;r0左移四位

rla

rla

rla

rla

movr2,a

mova,r1;r1左移四位

rla

rla

rla

rla

movr3,a

adda,0f7h;加上进位

adda,r2;r2加上r3结果放入累加器

jcttt1;若相加结果有进位跳转ttt1

movr2,a;若相加结果无进位判断结果是否大于9

mova,#90h

suba,r2

jcttt2;若相加结果大于9跳转ttt2

mova,#00h;将计数器置零

mov0f7h,a

jmpttt3;若相加结果小于9跳转ttt3

ttt1:

adda,#60h;将累加器中数据加上60放入r2中

movr2,a

mova,#10h;进位位加1

mov0f7h,a

jmpttt3;跳转ttt3

ttt2:

;将结果减10放入r2中

mova,r2

suba,#0a0h

movr2,a

mova,#10h;进位位置1

mov0f7h,a

ttt3:

mova,r2;右移四次低位结果将结果放入r2中

rra

rra

rra

rra

movr2,a

mova,0f6h;将计数器中的数与2相减

suba,#02h

jct1;若计数器中的数为1则借位跳转t1

jzt3;若计数器中的数为2则跳转t3

jmpt5;否则跳转t5

tt2:

mova,r1;将最低8位数与f0相与,得到高四位

anda,#0f0h

movr3,a

mova,r0

anda,#0f0h

movr2,a

adda,0f7h;加上进位

adda,r3;高四位相加

jcttt4;若高四位相加发生进位跳转ttt4中

movr2,a;若无进位判断结结果是否大于90

mova,#90h

suba,r2

jcttt5;若结果大于90跳转ttt5

mova,#00h;若结果小于9,将进位位置0跳转到ttt6

mov0f7h,a

jmpttt6

ttt4:

adda,#60h;高四位加上60结果放入r2中

movr2,a

mova,#10h;进位位置1

mov0f7h,a

jmpttt6

ttt5:

mova,r2;将结果-10存入r2中

suba,#0a0h

movr2,a

mova,#10h;进位位置1

mov0e7h,a

jmpttt6;跳转到ttt6

ttt6:

mova,0f6h;计数器与2相减

suba,#02h

jct2;若结果为-1跳转t2

jzt4;若结果为0跳转t4

jmpt6;若结果为1跳转t6

课程设计总结:

通过这次课设,我首先明白了COP2000的使用方法,怎么用汇编语言编写指令程序。

我通过查阅相关资料、通过询问老师和同学,知道了COP2000只能判断最高位是否有进位,所以在判断最低位是否有进位时要左移四位。

巧妙地设计了计数单元,用JC、JZ与JMP来进行判断。

以前我通过书籍只是看到了MOV等指令,对其不了解,还有十六进制当以字母开头要加上0,现在用在COP2000里面进行实现,当输入错时,会提醒编译错误,我更好的理解了相关内容。

当自己经过2天的调试,终于达到课设任务书上的要求了。

通过这么多天对组原课程设计的了解,让我对计算机这个专业又有了更多的了解,我相信只要认真努力做一件事,成功就在眼前。

指导教师评语:

 

指导教师(签字):

      年月日

课程设计成绩

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

当前位置:首页 > 教学研究 > 教学计划

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

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