以前闲聊的时候朋友说有一种方法,不需要中间变量,就可以将两个变量的内容交换。
开始我觉得这方法挺玄乎,不过我并不是不相信没有这样的方法,而是认为可能需要某些特定条件,后来闲暇的时候仔细想了想,发现确实存在这样的方法,大多数单片机的汇编指令都可以实现。
肯定不是有多个寄存器的单片机,比如除了累加器外还有偏移寄存器,实现就非常简单。
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
嘿嘿,是不是已经实现了交换?
这种方法对于实际应用意义并不大,不过可以加强程序员对逻辑运算的理解,有时候逻辑运算可以发挥一些出人意料的功效,这里利用的就是对于同一个数连续异或两次,原数保持不变。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
韩国加码布局下一代功率半导体
光模块与泛机器人成新引擎,芯海科技年度战略合作伙伴奖揭晓
微软研发致胜策略
微型热敏打印机
STK4352功放电路
长安大学飞思卡尔智能车大赛宣传片
语音控制智能车
手机首轮涨价潮最快将在一周内来袭
第四届飞思卡尔智能车竞赛西部赛区摄像头组第一名
伟福的e6000w
《VxWorks开发人员指南丛书》又出新作
STK443功放电路
为uCOS51 增加Shell 界面
腾讯或被迫出售海外游戏公司股权
Ayar Labs获5亿美元融资,推动光子技术落地2028人工智能系统
伟福调试软件E2000w 3.2版
STK457功放电路
STK436功放电路
STK441功放电路
PCIM Asia Shenzhen 2026国际研讨会,聚焦电力电子赋能AI与数据中心,共筑绿色高效能源生态
鱼MM的餐馆准备的如何啦?
提供ARM everyone套件调查
Rambus推出新HBM4E控制器IP,直击人工智能内存瓶颈
自动躲避障碍物的智能车
存储器现货价格最新动态:DRAM 现货价高于合约价,二季度议价前市场情绪谨慎
苹果M5系列芯片首发“三层核心”架构,引入全新“超级核心”
Omdia报告:2025年苹果在欧洲创下27%的历史最高市场份额
uclinux-20030909 for lom-arm7
第四届飞思卡尔智能车竞赛华南赛区摄像头组第二名
linux下烧写LOM-ARM7开发板上Flash的程序