51单片机汇编寄存器间址指令注意事项
寄存器间址指令用得好,汇编代码省事一大半。但用的时候,坑也不少,尤其是在 51 单片机上。像R0
和R1
的限制、访问范围的区别、还有不能碰SFR
这些雷区,都得记清楚。用MOV A,@R1
之前,最好确认地址不是跑去80H
以上的特殊功能寄存器区域,不然程序直接出 Bug,调一天都不一定找到问题出在哪儿。
寄存器间址用得好,读写速度快,代码也干净。但你得搞明白,它不是什么地址都能碰,尤其 SFR 那块——地址是摆在那儿的,权限可不一样。
R0、R1是唯一能做间址寄存器的通用寄存器,也就是说R2~R7
想都别想。你要间址,就得用R0
或者R1
,不然汇编器都不带搭理你。
片内RAM
寻址挺灵活,用R0
/R1
从00H
到FFH
随便搞。但如果你想访问片外RAM
,那就得上DPTR
了,地址跨度也大,直接干到FFFFH
都行。
小提醒一下,SFR虽然也是80H+
的地址,但不能用间址方式去动它。像下面这段:
MOV R1,#80H
MOV A,@R1
看着没毛病,其实大错特错——80H
是P0
端口的物理地址,@R1
根本读不到这块。
如果你还在捣鼓51 单片机
,或者调汇编代码的时候老感觉有“灵异事件”,不妨看看这篇文章,顺带也推荐几篇相关的,知识串起来,效率高多了。
539.5KB
文件大小:
评论区