微处理器原理与应用实验(51单片机部分)——实验2.2 汇编程序实验2
实验内容
将片内 RAM 30H 开始的 32 个单元中分布着随机的有符号 8 位二进制数,请按从小到大的顺序进行排序,排序后的数据仍然保存到 30H 开始的 32 个单元中(低地址存放小数据)。
编程思路
首先,在程序存储器中构建一个表格,该表格具有 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
然后利用查表指令“MOVC A,@A+DPTR”将它们读取到 30H-4FH 单元中,然后再利用“冒泡法排序法”将它们排序即可。“冒泡法排序法”的基本原理是:
遍历所有 32 个数据找出其中的最大者,并记下最大数据所在的存储位置,然后将这个最大的数据放置在最后一个单元,同时,将最后一个单元原来的数据保存到这个最大值原来所处的位置,完成第一轮的排序。
然后,再遍历除了最后一个单元以外的前面 31 个单元的数据并找出其中最大者,并记下其所在位置,遍历完这一遍后将找到的最大数据保存在倒数第二个单元(对于所有数据来说它是次最大数据,所以保存在倒数第二个单元),并将倒数第二个单元原来的数据保存在刚刚找到的那个最大值原来所在的位置处,完成第二轮的排序。依次类推,用同样的方法把
所有的数据排好序即可。
流程图
实验过程
① 根据上述实验内容及程序流程图,编写汇编语言源程序,并加上相应注释,注意扩展名为“*.asm”,将其保存。
② 运行 Keil uVision2 开发环境,按照 1.1.3 节介绍的方法建立工程 simlab2.uV2,CPU为 AT89C51,不用包含启动文件 STARTUP.A51。
③ 编写好的源程序加入工程 simlab2.uV2,并设置工程 simlab2.uV2 属性,将其晶振频率设置为 12MHz,选择输出可执行文件,仿真方式为“Use Simulator”。
④ 构造(Build)工程 simlab2.uV2。如果输入有误进行修改,直至构造正确,生成可执行程序 simlab2.hex 为止。
⑤ 运行程序,并用存储器观察窗口,观察内部 RAM 30H-4FH 单元排序前后的数值。将表格中的32个随机排列的8位二进制数据搬移到30H开始的32个内部RAM单元中:
排序后:
实验源程序
1 | ORG 0000H |