51单片机学习之冒泡排序

目录

前言

一、本篇文章将使用的指令介绍

二、交换数值的实现

2.1 XCH 两个操作数的数值交换

2.2 XCHD 低4位交换

2.3 SWAP 交换高低次位

三、冒泡排序——汇编版本

3.1 小——>大的冒泡排序

3.2 大——>小的冒泡排序

总结


前言

在前面两篇文章中,对单片机有了初步的了解,下面将介绍利用汇编语言实现冒泡排序。


一、本篇文章将使用的指令介绍

MOV  传送字或字节
INC  加1,类比与C语言++
DEC  减1,类比与C语言--
JC   有进位/借位时转移,cy端为进位/借位标志位;当进位/借位时cy为1
CJNE 比较不等转移指令
DJNZ  减一不为0跳转指令
SJMP 短跳转指令
CLR  清零指令
JB   无符号小于则跳转
XCH  交换两个操作数的值指令
SETB 置1

二、交换数值的实现

2.1 XCH 两个操作数的数值交换

         交换两个操作数的值一般用XCH指令实现,下面是该指令是使用格式:

XCH的使用格式: XCH A,SRC(SRC为源操作数)

         观察格式发现第一个操作数只能是累加器A,那么如果要实现R0跟R7内是数值交换怎么做呢?由于第一个操作数被限定为A,那么就需要将R0/R7的其中一个数值给A,再与另外一个数进行交换;而给A数值的R7/R0需要再被A交换或者传数值,代码实现如下:

MOV R0,#5  ;XCH  function:exhange the vail between two number
	MOV R7,#45
	MOV A,R0
	XCH A,R7
	MOV R0,A  ;XCH A,R0
	END      ;结束标志符

        执行XCH指令后的结果为:

        此时可以发现仅仅A与R7的数值进行了交换,而R0几乎没变。这是因为仅仅对R0进行了传送数据的指令操作,而没有对R0进行另外的操作,所以在第五行需要对R0进行操作,如果执行第五行——MOV R0,A 的结果为:

         而如果执行——XCH A,R0,结果为:

         从结果来看,MOV R0,A或者XCH A,R0的最后目的都达到了,不同的区别点就是程序结束后,累加器A的数值不一样。在具体功能的实现下这两者需要加以区分。

        看完XCH的数值交换实现后,你可能会想如果不用XCH能不能实现两个操作数的数值交换呢?结果是肯定的。那么该如何实现呢,这其实与酱油,醋瓶的交换类似。设想一下,你面前由一个红色瓶装醋,一个蓝色瓶装酱油,如果要求将酱油装如红色瓶,醋装入蓝色瓶,该如何操作呢?

没错,就是在用一个空瓶作为中介,借助它实现酱油,醋瓶的交换。由此,可以实现30H单元与50H 单元的数值交换,以60H单元作为中介,代码如下:

MOV 30H,#30H  function:exhange the vail between two number
	MOV 50H,#20H
	MOV 60H,30H
	MOV 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值