COP2000实现补码数的排序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
word
某某航空航天大学
课程设计报告
课程设计名称:计算机组成原理课程设计
课程设计题目:COP2000实现补码数的排序
院〔系〕:
专业:
班级:
学号:
姓名:
指导教师:
完成日期:2016 年 1 月 15 日
目录第1章总体设计方案1
设计原理1
设计思路1
设计环境1
第2章详细设计方案3
2.1算法与程序的设计与实现3
2.2流程图的设计与实现3
第3章程序调试与结果测试5
3.1程序调试5
3.2程序测试与结果分析5
参考文献6
第1章总体设计方案
1.1设计原理
本次课程设计利用的是COP2000指令集编程实现的,是对于给定内存单元00H-0FH中的16个8bit补码数,完成从小到大的排序功能;首先利用冒泡排序法将内存中的16个数进展排序,冒泡的原理是先将16个数逐一比拟,选出最大的沉底,然后再在剩下的数中依次重复上一步骤,最后利用统计16个数中正数的个数设计循环将负数重新排序。
1.2设计思路
对于补码数,其数有正有负,对于此可以分成两局部,首先是根据数的个数确定循环次数,对于数一局部是将有符号的数视为无符号的数,对其进展冒泡排序,另一局部是统计16个数中的正数个数设计循环将负数重新排序。
1.3设计环境
利用伟福COP2000型计算机组成原理试验仪软件和计算机,在COP2000试验仪软件上编程实现补码的排序
伟福COP2000试验仪软件的指令集分为如下大类:算术运算指令、逻辑运算指令、移位指令、数据传输指令、跳转指令、中断返回指令、输入输出指令。
该程序用到的指令集如下:
〔1〕算术逻辑运算指令
ADD A,#II——————累加器A加立即数II
ADD A,R?——————将存放器中的数打入到累加器A中
AND A,#II——————累加器A与立即数II
SUB A,#II——————从累加器中减去立即数后参加累加器A中
〔2〕数据传输指令
MOV R?,#II——————将立即数II传送到存放器R?中
MOV MM,A——————将累加器A 中的值传送到存储器MM地址中MOV A,#II———————将立即数II送到累加器A中
MOV R?,A———————将累加器A中的值送到存放器A中
MOV A,R?———————将存放器R?的值送到累加器A 中
MOV A,MM——————将存放器MM地址中的值送到累加器A中MOV R?,A——————将累加器A的值送到间址存储器中
〔3〕跳转指令
JZ MM——————假如零标志位置1,跳转到MM地址
JC MM——————假如进位标志置1,跳转到MM地址
JMP MM——————跳转到MM
COP2000计算机组成原理试验软件截图如图1所示:
图1 COP2000计算机组成原理软件
第2章详细设计方案
2.1 算法与程序的设计与实现
本课设采用伟福COP2000实验仪软件和计算机实现补码数排序功能,利用伟福COP2000的指令集编程实现。
算法描述:
首先将16个补码数存入到内存中,数据存入内存地址00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH,0BH,0CH,0DH,0EH,0FH中。
对十六个数进展冒泡排序法排序,冒泡排序法的运算如下:
首先比拟相邻的元素,如果第一个比第二个打,就交换它俩;然后对每一对相邻元素进展同样的工作,从开始第一对到结尾最后一对,所以最后一个元素是最大的数;针对所有的元素重复以上的步骤,除了最后一个;同理下一轮也是通过一样的方法重复上面操作,到最后每次对越来越少的元素进展比拟,直到没有任何一对数字需要比拟。
2.2 流程图的设计与实现
1.将十六个补码数存储到内存中如图
2.2.1所示:
2.设置冒泡排序循环次数如图2.2.2所示:
3.将十六个数进展冒泡排序如图2.2.3所示:
N
第3章程序调试与结果测试
程序调试
程序中指令出现错误,代码不能正常运行,对其进展反复检查修改以与调试,使其正常工作。
3.2 程序测试与结果分析
结果展示:
需排序的补码数:22,16,0A,08,12,22,3A,45,5C,6F,80,91,A2,BC,BD,03
排序后的补码数:03,08,0A,12,16,22,22,3A,45,5C,6F,80,91,A2,BC,BD
参考文献
[1]王爱英:计算机组成与结构(第四版〕[M].:清华大学,2006
[2]白中英:计算机组成原理(第四版)[M].:科学,2008附录〔源代码〕
MOV A,#22H
MOV 00H,A
MOV A,#16H
MOV 01H,A
MOV A,#0AH
MOV 02H,A
MOV A,#08H
MOV 03H,A
MOV A,#12H
MOV 04H,A
MOV A,#22H
MOV 05H,A
MOV A,#3AH
MOV 06H,A
MOV A,#45H
MOV 07H,A
MOV A,#5CH
MOV 08H,A
MOV A,#6FH
MOV 09H,A
MOV A,#80H
MOV 0AH,A
MOV A,#91H
MOV 0BH,A
MOV A,#0A2H
MOV 0CH,A
MOV A,#0BCH
MOV 0DH,A
MOV A,#0BDH
MOV 0EH,A
MOV A,#03H
MOV 0FH,A 输入数据
MOV A,#0FH
MOV 0F0H,A 循环次数
MOV R0,#0EFH 结果存入末地址R0
LOOP1:
MOV R1,#00H 判断首地址
MOV A,0F0H
MOV 0F1H,A 内层循环次数
LOOP2:
MOV A,R1
MOV R2,A 取出值存入R2
MOV A,R1
ADD A,#01 内存地址+1
MOV R1,A
MOV A,R2
SUB A,R1 比拟大小
JC S0
S1: 交换
MOV A,R1
MOV 0F2H,A 保存后一个内存地址的值MOV A,R1
SUB A,#01H
MOV R2,A 保存前一个内存地址
MOV A,R2
MOV 0F3H,A 保存前一个内存地址的值MOV A,0F2H
MOV R2,A 后一个内存地址的值存入前一个MOV A,0F3H
MOV R1,A 前一个存入后一个
S0:
MOV A,0F1H
SUB A,#01H 内层循环-1
MOV 0F1H,A
SUB A,#00H
JZ S2 内层循环完毕
JMP LOOP2
S2:
MOV A,R1
MOV R0,A
OUT 排序最后一位存入
MOV A,R0
SUB A,#01
MOV R0,A 存数最后一位地址-1
MOV A,0F0H
SUB A,#01H 外层循环-1
MOV 0F0H,A
SUB A,#00H
JZ LAST 循环完毕JMP LOOP1
LAST:
MOV A,00H
MOV 0E0H,A
OVER:
JMP OVER
word
9 / 11。