山东大学单片机原理与应用实验 汇编程序实验2
一、实验题目
汇编程序实验2
二、实验要求
片内RAM30H开始的32个单元中分布着随机的有符号8位二进制数,按从小到大的顺序进行排序,排序后的数据仍然保存到30H开始的32个单元中(低地址存放小数据)
三、实验过程及结果记录(截图)
1. 在程序存储器中构建一个TABLE,该表格具有32个随机产生的8位二进制数,如:TABLE :DB 1,3,9,2,17,4,11,6
DB 5,20,100,64,21,14,79,35
DB 92,7,91,23,65,16,13,18
DB 18,73,65,101,27,19,62,69
2. 利用查表指令“MOVC A,@A+DPTR”分别将表格中的数字读取到30H~4FH单元中。
3. 使用“冒泡排序法”将它们排序即可。“冒泡排序法”的基本原理是:
遍历所有32个数据找出其中最大者,并记下最大数据所在存储位置,然后将这个最大数据放置在最后一个单元,同时,将最后一个单元原来的数据保存到这个最大值原来所处的位置,完成第一轮排序。
4. 遍历除了最后一个单元以外的前面31个单元的数据并找出其中最大者,并记下其所在位置。遍历完这一遍后将找到的最大数据保存在倒数第二个单元,并将倒数第二个单元原来的数据保存在刚刚找到的那个最大值原来所在的位置处,完成第二轮排序。依次类推,用同样的方法把所有的数据排好序即可。每一轮将会把当前还未排序的最大的数冒出,因此一共需要冒泡31轮。
冒泡排序的实验结果如下:
图1:排序结果
实验整体思路如下:
图2:实验思路
四、实验源程序
ORG 0000H ;在内存的0地址处就强制转到主程序上去,绕过中断程序
AJMP MAIN ;无条件的转移到主程序
ORG 0090H ;定义代码的起始地址,避开中选程序入口
MAIN: MOV SP,#62H ;设置栈指针MOV R0,#30H ;使寄存器R0指向30H首地址MOV DPTR,#TABLE ;使DPTR指向表格开头,直接传送地址MOV R1,#00 ;设置变址寻址的初值为0+DPTRMOV R2,#20H ;设置循环次数READ: MOV A,R1 MOVC A,@A+DPTR ; DPTR为基址,A为变址,每循环一次地址+1MOV @R0,A ;把表格中内容读出到内存INC R0 ;自增一并指向下一个内存单元INC DPTR ;自增一并指向下一个内存单元DJNZ R2,READ ;R2不为零就跳转到读内存语句,共循环32次,将表格全部内容读到内存中MOV R7,#1FH ;设置外层循环次数为31次 L1: MOV R1,#30H ;让R1指向该存有数据内存的开头MOV A,R7 ;将A设置初值为31,即内层循环此数为31次,这是因为第一个数要和剩下的所有31个数进行比较MOV R6,A ;将A的数存入R6中,后面会对A进行操作,所以使用R6控制内部循环次数
L2: MOV A,@R1 ;寄存器间接寻址操作,将R1对应的内存中的内容移入累加器AMOV R5,A ;寄存器操作,将R1指向的内容读到R5中存放INC R1 ;自增一SUBB A, @R1 ;将第n个单元和第n+1个单元的内容相减JC L3 ;c是借位标志位,若不为0则说明小于,此时跳转到L3。若第n个单元中的数字大于n+1中的数字则继续执行循环MOV A,R5 ;将原来R1出的数还给A若是n单元中的数字大于n+1单元中的数字,则将两个单元中的数字交换,将较大的数字放入较小的单元XCH A,@R1 ;执行交换指令,将n+1内存单元中的小数送给n单元,此时小单元中的数先被暂存在A寄存器中。DEC R1 ;R1减1,使R1指向当前的内存单元MOV @R1,A ;将暂存在A中的的小数,送给小内存单元。因为交换指令必须有一个A,所以说对两个内存单元进行交换时,要交换两次INC R1 ;自增一 ,指向下一个内存单元
L3: DJNZ R6,L2 ;控制内层循环,每次将R6减1,不为零继续循环,每个外循环之内都有n次内循环DJNZ R7,L1 ;控制外层循环,每次将R7减1,不为零继续循环SJMP $ORG 30H ;从30H开始的地址开始写入数据
TABLE: DB 1,3,9,2,17,4,11,6 ;DB代表是字节型的数字DB 5,20,100,64,21,14,79,35 DB 92,7,91,23,65,16,13,18DB 18,73,65,101,27,19,62,69
END
初学单片机,可能存在错误之处,还请各位不吝赐教。
受于文本原因,本文相关实验工程无法展示出来,现已将资源上传,可自行下载。
山东大学单片机原理与应用实验汇编程序实验2-单片机文档类资源-CSDN下载山东大学单片机原理与应用实验汇编程序冒泡排序详解博客地址:https://blog.csdn.n更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/m0_52316372/85915485
山东大学单片机原理与应用实验 汇编程序实验2相关推荐
- 山东大学单片机原理与应用实验 3.4 矩阵键盘扫描实验
目录 一.实验题目 二.实验要求 三.实验过程及结果记录 1. 在Proteus 环境下建立图1所示原理图,并将其保存为keyscan_self.DSN 文件. 2. 编写控制源程序,将其保存为key ...
- 山东大学单片机原理与应用实验 C语言程序实验
一.实验题目 C语言程序实验 二.试验要求 片内RAM30H开始的32个单元中分布着随机的有符号8位二进制数,按从小到大的顺序进行排序,排序后的数据仍然保存到30H开始的32个单元中(低地址存放小数据 ...
- 山东大学单片机原理与应用实验 3.2 拓展并行I/O口实验
目录 一.实验题目 二.实验要求 三.实验过程及结果记录 1. 在Proteus环境下建立原理图,如图1所示,并保存为expandIO.DSN文件. 2. 将实验代码写入文本文档,并保存为expand ...
- 山东大学单片机原理与应用实验 3.7LCD 1602显示实验
目录 一.实验题目 二.实验要求 三.实验过程及结果分析 四.实验流程图 五.实验源代码 一.实验题目 3.7 LCD 1602显示实验 二.实验要求 1.画出实验的流程图 2.编写源程序并进行注释 ...
- 山东大学单片机原理与应用实验 4.5 8255并行I/O扩展及交通信号灯控制实验
目录 一.实验题目 二.实验要求 三.实验过程及结果分析 四.实验流程图 五.实验源代码 一.实验题目 4.5 8255并行I/O扩展及交通信号灯控制实验 二.实验要求 1.画出实验的流程图 2.编写 ...
- 山东大学单片机原理与应用实验 4.1 按键声光报警实验
目录 一.实验题目 二.实验要求 三.实验过程及结果 四.实验流程图 五.实验源代码 一.实验题目 4.4按键声光报警实验 二.实验要求 1.画出实验的流程图 2.编写源程序并进行注释 3.记录实验过 ...
- 单片机原理及应用流水灯实验
1.实验目的 (1)学习编译与仿真环境使用 (2)学习 P3 口的使用方法 (3)学习延时子程序的编写 2 实验内容 (1)通过对 P3 口地址的操作控制 8 位 LED 流水点亮,从而认识单片机的接 ...
- 单片机原理及应用 实验六 双机通信与PCB设计
单片机原理及应用(C51版) 实验目的及要求: 1.掌握串口通信工作原理及程序开发方法,熟悉ARES软件PCB设计过程: 2.按照P241图A.72绘制电路原理图1,将第6章实例2中2#机的查询法收发 ...
- MSP430单片机原理及应用 实验
单片机原理及应用 课程实验(二) 实验项目:MSP430简单程序设计 实验目的:学会用C语言进行简单程序设计 实验要求:掌握编写排序程序 实验内容: (1)设计一个对8个数据(0-255,任意设置)的 ...
最新文章
- 长期分享干货的技术大佬
- react native报错:Expected a component class,got[object object]
- 蒸妙集团:大健康产业时代的弄潮儿,中国熏蒸行业的领跑者!
- 如何熟悉一个开源项目
- 037-PHP如何返回闭包函数实例
- 南蛮图腾(洛谷-P1498)
- JEECGJWT异常捕获强化处理
- 2.5 VB编程基础--运算符和表达式
- ABB机器人FOR循环指令
- .m文件和 .mat文件的区别
- php+xls加密,POI Excel xlsx加密
- D38 463. Island Perimeter
- 求最小码距 (10 分)
- 常见的几种网络Hack方式
- 关于BN层的一点理解
- IDEA连接mysql又报错!Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' prope
- classpath是什么路径
- Hexo yilia 主题一揽子使用方案
- 央行数据 App - 国债 逆回购 LPR M2/M1/M0 央行负债表 Shibor 票据 MLF 查询分析 央行公开市场业务交易数据
- linux下autocad完美替代品bricscad的安装运行