cop实现有符号数排序.docx
- 文档编号:12336643
- 上传时间:2023-04-18
- 格式:DOCX
- 页数:17
- 大小:320.10KB
cop实现有符号数排序.docx
《cop实现有符号数排序.docx》由会员分享,可在线阅读,更多相关《cop实现有符号数排序.docx(17页珍藏版)》请在冰豆网上搜索。
cop实现有符号数排序
沈阳航空航天大学
课程设计报告
课程设计名称:
计算机组成原理课程设计
课程设计题目:
COP2000实现有符号数的排序
院(系):
计算机学院
专业:
计算机科学与技术
班级:
34010102
学号:
2013040101078
姓名:
葛轩
指导教师:
张德园
完成日期:
2016年01月14日
目录
第1章总体设计方案2
1.1设计原理2
1.2设计思路2
1.3设计环境2
第2章详细设计方案4
2.1算法与程序的设计与实现4
2.2流程图的设计与实现5
第3章程序调试与结果测试9
3.1程序调试9
列举出调试过程中存在的问题
3.2程序测试及结果分析9
参考文献11
附录(源代码)12
第1章总体设计方案
1.1设计原理
本次课程设计是利用COP2000指令集进行编程,实现对于内存中10个8bit有符号数(补码形式)的排序。
利用冒泡排序法先将内存中的10个有符号的数视为无符号数进行排序;冒泡的原理是先将十个数逐一比较,选出最大的沉底,然后在剩下的数中依次重复上一步骤。
然后利用统计十个数中正数的个数设计循环将负数从新排序。
1.2设计思路
本次课程设计是对于有符号数排序。
可以分解成两部分,一部分是将有符号的数视为无符号的数,对其进行冒泡排序;另一部分是统计十个数中正数的个数设计循环将负数从新排序。
1.3设计环境
利用伟福COP2000型计算机组成原理实验仪软件和计算机,在COP2000试验仪软件上编程实现有符号数(补码形式)的排序。
伟福COP2000试验仪软件的指令集分为如下大类:
算术运算指令、逻辑运算指令、移位指令、数据传输指令、跳转指令、中断返回指令、输入输出指令。
本程序用到的指令集为:
(1)算术逻辑运算指令
SUBA,#II-----------从累加器中减去立即数后加入累加器A中
ANDA,#II-----------累加器A“与”立即数II
ADDA,#II------------累加器A加立即数II
ADDA,R?
------------将寄存器中的数打入到累加器A中
(2)数据传送指令
MOVR?
,#II----------将立即数II送到寄存器R?
中
MOVMM,A-----------将累加器A中的值送到存储器MM地址中
MOVA,#II------------将立即数II送到累加器A中
MOVR?
,A------------将累加器A中的值送到寄存器A中
MOVA,R?
------------将寄存器R?
的值送到累加器A中
MOVA,MM-----------将存储器MM地址中的值送到累加器A中
MOV@R?
A-------------将累计器A的值送到间址存储器中
(3)跳转指令
JZMM---------------若零标志位置1,跳转到MM地址
JCMM---------------若进位标志置1,跳转到MM地址
JMPMM---------------跳转到MM
COP2000计算机组成原理实验软件截图如图1.1所示:
图1.1COP2000计算机组成原理软件
第2章详细设计方案
2.1算法与程序的设计与实现
本次课程设计采用伟福COP2000实验仪软件和计算机实现有符号数排序的功能,利用伟福COP2000的指令集编程实现。
算法具体描述:
(1)将十个有符号数存储到内存中:
将10个有符号数存入到内存中,数据存入到内存地址0B0H,0B1H,0B2H,0B3H,0B4H,0B5H,0B6H,0B7H,0B8H,0B9H中。
(2)将十个有符号数视为无符号数利用冒泡排序法排序:
首先将10个有符号数视作无符号数进行冒泡排序。
冒泡排序算法的运作如下:
1.比较相邻的元素。
如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。
在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
(3)判断正数数量n:
首先设计程序判断有多少个正数,设此时有正数n个。
将排序后的数先和80H相与,再减去80H,若此时为0,则判断这个数为负数,若不为0,则判断这个数为正数。
(4)正负数排序:
从0BnH取数放到0C0H中,0BnH后继连续地址中存的数均为负数。
再在其中设置一个循环程序,循环次数为10-n,以此将10-n个负数依次放到以0C0H开头的地址中。
从0B0H开头的地址取出正数放到负数的后面。
运算结束。
2.2流程图的设计与实现
1.将十个有符号数存储到内存中如图2.2.1所示:
图2.2.1存数流程图
2.设置冒泡排序循环次数如图2.2.2所示:
图2.2.2设置循环次数流程图
3.将十个有符号数视为无符号数利用冒泡排序如图2.2.3所示:
图2.2.3冒泡排序流程图
4.统计十个数中正数数量n如图2.2.4所示:
图2.2.4判断正数数量流程图
5.将是个数中正负数从新排序如图2.2.5所示:
图2.2.5正负数排序流程图
第3章程序调试与结果测试
3.1程序调试
问题1:
在将排好顺序的数据存储到00地址的内存中
解决方法:
由于程序一部分会占用00H地址的内存,所以将排好的数据存储到0C0H地址的内存中;
问题2:
在10个数排序过程后,会出现14个数;
解决方法:
由于程序排序过程中设定的循环次数大于十个数中的正数的个数,所以将排序过程中后面的循环次数设定为与正数的个数相等;
问题3:
此汇编程序具有局限性,只能适应四个负数;
解决方法:
统计十个数中正数的个数将其保存到内存中,然后设计循环从新排序。
3.2程序测试及结果分析
软件测试用源程序,COP2000软件,其输入采用立即数方法;
测试数据:
(1)需排序的有符号数:
5,85,84,4,62,89,96,54,46,23
排序后的有符号数:
84,85,89,96,4,5,23,46,54,62
图3.2.1结果图1
(2)需排序的有符号数:
98,1,41,32,88,72,66,87,80,5
排序后的有符号数:
80,87,88,98,1,5,32,41,66,72
图3.2.2结果图2
(3)需排序的有符号数:
81,82,83,84,85,86,87,88,89,90
排序后的有符号数:
81,82,83,84,85,86,87,88,89,90
图3.2.3结果图3
参考文献
[1]唐朔飞.计算机组成原理(第二版)[M].北京:
高等教育出版社,2008
[2]王爱英.计算机组成与结构(第四版)[M].北京:
清华大学出版社,2006
[3]白中英.计算机组成原理(第四版)[M].北京:
科学出版社,2008
附录(源代码)
mova,#20h
mov0b0h,a
mova,#87h
mov0b1h,a
mova,#25h
mov0b2h,a
mova,#21h
mov0b3h,a
mova,#95h
mov0b4h,a
mova,#41h
mov0b5h,a
mova,#46h
mov0b6h,a
mova,#51h
mov0b7h,a
mova,#63h
mov0b8h,a
mova,#93h
mov0b9h,a
mova,#9h
mov0d0h,a
mova,#0bah
movr1,a
lun:
mova,#0b0h
movr2,a
mova,#0b1h
movr3,a
qushu:
mova,@r2
movr0,a
mova,@r3
subca,r0
jcjh
dizhi:
mova,r2
adda,#1
movr2,a
mova,r3
adda,#1
movr3,a
subca,r1
jzover
jmpqushu
jh:
mova,@r2
movr0,a
mova,@r3
mov@r2,a
mova,r0
mov@r3,a
jmpdizhi
panduancishu:
mova,r1
suba,#1
movr1,a
mova,#0d0h
movr0,a
mova,@r0
suba,#1
mov@r0,a
subca,#0
jzxianshi
jmplun
over:
jmppanduancishu
xianshi:
mova,#0b0h
show:
movr0,a
mova,@r0
out
mova,r0
adda,#1
movr0,a
suba,#0bah
jzk
jmpshow
k:
mova,#0b0h
movr0,a
mova,#0b9h
movr1,a
mova,#0e0h
movr2,a
mova,#0f0h
movr3,a
mova,#00h
mov0eeh,a
mov0efh,a
loop1:
mova,@r0
anda,#80h
jzloop2
jmploop3
loop2:
mova,0eeh
adda,#01h
mov0eeh,a
mova,@r0
mov@r2,a
mova,r2
adda,#01h
movr2,a
mova,r0
suba,r1
jzloop4
mova,r0
adda,#01h
movr0,a
jmploop1
loop3:
mova,0efh
adda,#01h
mov0efh,a
mova,@r0
mov@r3,a
mova,r3
adda,#01h
movr3,a
mova,r0
suba,r1
jzloop4
mova,r0
adda,#01h
movr0,a
jmploop1
loop4:
mova,#00h
movr0,a
movr1,a
movr2,a
movr3,a
loop5:
jmploop5
课程设计总结:
主要从以下几方面总结:
1.通过这次课程设计,我学会了COP2000的使用方法和汇编语言的操作,了解了如何通过代码实现实验目的。
2.本次课程设计中达到了关于课题的基本要求,开始编辑的时候使用了机器所占的内存的范围,经过后来的多次询问和修改,才慢慢的调试出结果,虽然自己还有很多地方有所不足,但是还是很骄傲。
3.通过这次课程设计深刻的知道了自己编程的能力,尤其是在减缩代码的过程中很苦恼。
4.本次课程设计中遇到了很多问题,开始并不想改动,最后静下心来慢慢改,最后成功了。
这次课程设计让我明白做事情应该有耐心。
特备感谢老师的指导,这次课程设计是我上大学以来收获最大的一次,非常开心能够独立完成这次课程设计
指导教师评语:
指导教师(签字):
年月日
课程设计成绩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- cop 实现 符号 排序