以前闲聊的时候朋友说有一种方法,不需要中间变量,就可以将两个变量的内容交换。
开始我觉得这方法挺玄乎,不过我并不是不相信没有这样的方法,而是认为可能需要某些特定条件,后来闲暇的时候仔细想了想,发现确实存在这样的方法,大多数单片机的汇编指令都可以实现。
肯定不是有多个寄存器的单片机,比如除了累加器外还有偏移寄存器,实现就非常简单。
LDX a
LDY b
TAX b
TAY a
只要四条汇编指令就可以实现,但这肯定不是我们所说的方法。
来看看真正的代码。
LDA x表示将变量x的内容装入累加器
XOR x表示累加器的内容与变量x的内容进行异或
STA x表示将累加器的内容存进变量x
具体代码,假定是交换a,b两变量,初始内容为a0,b0
累加器内容 a变量内容 b变量内容
LDA a ; a0 a0 b0
XOR b ; a0^b0 a0 b0
STA a ; a0^b0 a0^b0
b0
XOR b ; a0^b0^
b0=a0 a0^b0 b0
STA b ; a0
a0^b0 a0
XOR a ; a0^
a0^b0=b0 a0^b0 a0
STA a ; b0 b0 a0
嘿嘿,是不是已经实现了交换?
这种方法对于实际应用意义并不大,不过可以加强程序员对逻辑运算的理解,有时候逻辑运算可以发挥一些出人意料的功效,这里利用的就是对于同一个数连续异或两次,原数保持不变。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。