专栏中心

EEPW首页 > 专栏 > 一种不需要中间变量交换两个变量内容的方法

一种不需要中间变量交换两个变量内容的方法

发布人:sjdai 时间:2010-03-13 来源:工程师 发布文章
以前闲聊的时候朋友说有一种方法,不需要中间变量,就可以将两个变量的内容交换。
开始我觉得这方法挺玄乎,不过我并不是不相信没有这样的方法,而是认为可能需要某些特定条件,后来闲暇的时候仔细想了想,发现确实存在这样的方法,大多数单片机的汇编指令都可以实现。

肯定不是有多个寄存器的单片机,比如除了累加器外还有偏移寄存器,实现就非常简单。
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 

嘿嘿,是不是已经实现了交换?
这种方法对于实际应用意义并不大,不过可以加强程序员对逻辑运算的理解,有时候逻辑运算可以发挥一些出人意料的功效,这里利用的就是对于同一个数连续异或两次,原数保持不变。

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

韩国加码布局下一代功率半导体

光模块与泛机器人成新引擎,芯海科技年度战略合作伙伴奖揭晓

2026-03-05

微软研发致胜策略

微型热敏打印机

长安大学飞思卡尔智能车大赛宣传片

视频 2010-02-01

语音控制智能车

视频 2010-02-01

手机首轮涨价潮最快将在一周内来袭

第四届飞思卡尔智能车竞赛西部赛区摄像头组第一名

视频 2010-02-01

伟福的e6000w

为uCOS51 增加Shell 界面

腾讯或被迫出售海外游戏公司股权

2026-03-05

Ayar Labs获5亿美元融资,推动光子技术落地2028人工智能系统

伟福调试软件E2000w 3.2版

PCIM Asia Shenzhen 2026国际研讨会,聚焦电力电子赋能AI与数据中心,共筑绿色高效能源生态

2026-03-05

Rambus推出新HBM4E控制器IP,直击人工智能内存瓶颈

自动躲避障碍物的智能车

视频 2010-02-01

存储器现货价格最新动态:DRAM 现货价高于合约价,二季度议价前市场情绪谨慎

苹果M5系列芯片首发“三层核心”架构,引入全新“超级核心”

EDA/PCB 2026-03-05

Omdia报告:2025年苹果在欧洲创下27%的历史最高市场份额

第四届飞思卡尔智能车竞赛华南赛区摄像头组第二名

视频 2010-02-01
更多 培训课堂
更多 焦点
更多 视频

技术专区