COP实现BCD码的加法.docx
《COP实现BCD码的加法.docx》由会员分享,可在线阅读,更多相关《COP实现BCD码的加法.docx(16页珍藏版)》请在冰豆网上搜索。
COP实现BCD码的加法
沈阳航空航天大学
课程设计报告
课程设计名称:
计算机组成原理课程设计
课程设计题目:
COP2000实现BCD码的加法
院(系):
计算机学院
专业:
计算机科学与技术
班级:
学号:
姓名:
指导教师:
完成日期:
2013年1月11日
第1章总体设计方案
1.1设计原理
欲实现两个压缩BCD码的加法,且被加数,加数,和都为六位十进制数,需将两个六位十进制数输入到内存中,再分别实现加数和被加数的最低两位,中间两位,最高两位的带进位加法,并且依次将其进行十六进制到十进制的转换,输入到内存中暂存,最后将六位十进制的和输出到寄存器中显示出来。
1.2设计环境
伟福COP2000实验箱,用汇编语言编程实现BCD码的加法
COP2000计算机组成原理实验系统由实验平台、开关电源、软件三大部分组成。
实验平台上有寄存器组R0-R3、运算单元、累加器A、暂存器W、直通/左移/右移单元、地址寄存器、程序计数器、堆栈、中断源、输入/输出单元、存储器单元、微地址寄存器、指令寄存器、微程序控制器、组合逻辑控制器、扩展座、总线插孔区、微动开关/指示灯、逻辑笔、脉冲源、20个按键、字符式LCD、RS232口。
第2章详细设计方案
2.1算法与程序的设计与实现
此程序的核心在于十六进制转换为十进制BCD码的部分,以最低两位的运算为例:
一.低位
1.若低位>9,正确的BCD码应该让低位变成对应的0~9,即减A(10),再把A进给高位,由于是高位,因此高位应该是加1,即+10H-0AH=+6H
2.若低位产生进位,但这个进位是“16进1”,即低位多进了6,因此应该给低位加上6,即+6H
3.由于低位BCD码对应的十进制为0~9,不可能既产生进位又低位>9
二.高位
1.若高位>9,同理,应该让高位变成对应的0~9,即给高位减A(10),再把A进给更高位,由于是更高位,因此更高位应该是加1,即+100H-A0H=+60H
2.若高位产生进位,但这个进位是“16进1”,即高位多进了6,因此应该给高位加上6,即+60H
3.由于高位BCD码对应的十进制为0~A(可能是A是由于可能低位会进位,而高位和本来是9,则会变成A),不可能既产生进位又高位>9
三.由于COP2000中只能显示高位进位标志,而低位的进位显示不出来,所以需要把低位左移到高位,再进行运算,才能得出低位是否进位。
2.2流程图的设计与实现
2.2.1总流程图
图2.1.1总流程图
2.2.2最低两位求和流程图
是
否
和大于90H是
否
是
否
和大于90H是
否
图2.1.2最低两位求和流程图
2.2.3中间两位求和流程图
是
否
和大于90H是
否
是
否
和大于90H是
否
图2.2.3中间两位求和流程图
2.2.4最高两位求和流程图
是
否
和大于90H是
否
是
否
和大于90H是
否
图2.2.4最高两位求和流程图
第3章程序调试与结果测试
3.1程序调试
(1)由于此程序的BCD码为压缩的BCD码,每个字节存两位十进制数,而进位标志位只能判断高位是否进位,所以在判断低位是否进位时产生了难度,此时便将两位十进制数和“0F”相与,将高位置零后,低位左移四位到高位,便可以判断低位是否有进位了。
(2)最初在设计程序时没有考虑输入的数值放在内存单元位置的问题,导致输入内存中的数据与程序代码占用的内存单元中的数据相冲突,而不能完整的实现程序的功能。
解决办法就是将输入内存的数据存到一定不被事先占用过的内存单元中,避免冲突。
(3)代码中用到立即数时,忘记加“#”,或者写内存地址时忘记加“H”。
诸如此类小问题,检查代码以后便可解决。
3.2程序测试及结果分析
测试阶段,用两组数检验程序的功能,用X表示被加数,用Y表示加数。
(1)X=013579Y=024689
输出结果为038268
(2)X=987654Y=123456
输出结果为111110
(1)中,013579+024689=038268,结果正确。
(2)中,987654+123456=1111110,由于输出结果不考虑溢出,只能显示六位数,所以结果正确。
参考文献
[1]唐朔飞.计算机组成原理(第2版)[M]北京:
高等教育出版社,2008
[2]王爱英.计算机组成与结构(第4版)[M].北京:
清华大学出版社,2006
[3]白中英.计算机组成原理(第4版)[M]北京:
科学出版社,2008
附录(源代码)
00C0IN
0188E6MOV0E6H,A
03C0IN
0488E1MOV0E1H,A
06C0IN
0788E2MOV0E2H,A
09C0IN
0A88E3MOV0E3H,A
0CC0IN
0D88E4MOV0E4H,A
0FC0IN
1088E5MOV0E5H,A
1278E2MOVA,0E2H;取低八位
1480MOVR0,A
1578E5MOVA,0E5H
1781MOVR1,A
1870MOVA,R0;对低四位进行判断
195C0FANDA,#0FH
1BD4RLA
1CD4RLA
1DD4RLA
1ED4RLA
1F82MOVR2,A
2071MOVA,R1
215C0FANDA,#0FH
23D4RLA
24D4RLA
25D4RLA
26D4RLA
2783MOVR3,A
2872MOVA,R2
2913ADDA,R3
2AA035JCT1;相加有进位跳转
2C82MOVR2,A
2D7C90MOVA,#90H
2F32SUBA,R2;相加大于9跳转
30A035JCT1
3270MOVA,R0
33AC38JMPT4
T1:
;低四位之和有进位或大于9,和加6
3570MOVA,R0
361C06ADDA,#06H
T4:
;
3811ADDA,R1
39A04DJCT2;低八位的高四位之和有进位跳转
3B83MOVR3,A
3C7C90MOVA,#90H
3E33SUBA,R3;低八位的高四位之和大于9跳转
3FA04CJCT3
4173MOVA,R3
4288F0MOV0F0H,A;低八位之和存入内存
4478E1MOVA,0E1H;取中间八位
4680MOVR0,A
4778E4MOVA,0E4H
4981MOVR1,A
4AAC5CJMPLOOP1
T3:
4C73MOVA,R3
T2:
4D1C60ADDA,#60H
4F88F0MOV0F0H,A;低八位之和存入内存
5178E1MOVA,0E1H;取中间八位
5380MOVR0,A
5478E4MOVA,0E4H
5681MOVR1,A
5771MOVA,R1
5871MOVA,R1
591C01ADDA,#01H;低八位有进位向中间八位进1
5B81MOVR1,A;中间八位运算
LOOP1:
5C70MOVA,R0
5D5C0FANDA,#0FH
5FD4RLA
60D4RLA
61D4RLA
62D4RLA
6382MOVR2,A
6471MOVA,R1
655C0FANDA,#0FH
67D4RLA
68D4RLA
69D4RLA
6AD4RLA
6B83MOVR3,A
6C72MOVA,R2
6D13ADDA,R3
6EA079JCTT1
7082MOVR2,A
717C90MOVA,#90H
7332SUBA,R2
74A079JCTT1
7670MOVA,R0
77AC7CJMPTT4
TT1:
7970MOVA,R0
7A1C06ADDA,#06H
TT4:
7C11ADDA,R1
7DA091JCTT2
7F83MOVR3,A
807C90MOVA,#90H
8233SUBA,R3
83A090JCTT3
8573MOVA,R3
8688F1MOV0F1H,A;中间八位存入内存
8878E6MOVA,0E6H;取高八位
8A80MOVR0,A
8B78E3MOVA,0E3H
8D81MOVR1,A
8EAC9FJMPLOOP2
TT3:
9073MOVA,R3
TT2:
911C60ADDA,#60H
9388F1MOV0F1H,A;中间八位存入内存
9578E6MOVA,0E6H;取高八位
9780MOVR0,A
9878E3MOVA,0E3H
9A81MOVR1,A
9B71MOVA,R1
9C1C01ADDA,#01H
9E81MOVR1,A
LOOP2:
9F70MOVA,R0
A05C0FANDA,#0FH
A2D4RLA
A3D4RLA
A4D4RLA
A5D4RLA
A682MOVR2,A
A771MOVA,R1
A85C0FANDA,#0FH
AAD4RLA
ABD4RLA
ACD4RLA
ADD4RLA
AE83MOVR3,A
AF72MOVA,R2
B013ADDA,R3
B1A0BCJCTTT1
B382MOVR2,A
B47C90MOVA,#90H
B632SUBA,R2
B7A0BCJCTTT1
B970MOVA,R0
BAACBFJMPTTT4
TTT1:
BC70MOVA,R0
BD1C06ADDA,#06H
TTT4:
BF11ADDA,R1
C0A0D5JCTTT2
C283MOVR3,A
C37C90MOVA,#90H
C533SUBA,R3
C6A0D4JCTTT3
C873MOVA,R3
C988F2MOV0F2H,A
CB81MOVR1,A
CC78F1MOVA,0F1H
CE82MOVR2,A
CF78F0MOVA,0F0H
D183MOVR3,A
T:
D2ACD2JMPT;
TTT3:
D473MOVA,R3
TTT2:
D51C60ADDA,#60H
D788F2MOV0F2H,A
D981MOVR1,A
DA78F1MOVA,0F1H
DC82MOVR2,A
DD78F0MOVA,0F0H
DF83MOVR3,A
课程设计总结:
本次课程设计让我收获颇丰,起初拿到课程设计题目,不知道如何去实现设计要求,经过前几天查阅资料,老师帮助,我对这次课程设计要求有了更深的了解,知道了具体应该怎样操作,怎样去实现BCD码加法,怎样去操作COP2000实验箱。
我想说本次课程设计不但使我们复习了计算机组成原理课程的内容,还让我们复习并应用了算法设计与分析以及汇编语言课程的内容,我们加深了对计算机系统概念的理解。
最后,感谢老师对我们的悉心教导,以后我会把课堂学到的知识加以灵活运用,不辜负老师对我们的厚望。
指导教师评语:
指导教师(签字):
年月日
课程设计成绩