历史上的今天
今天是:2025年03月20日(星期四)
2020年03月20日 | 单片机C51汇编指令之寻址方式学习心得
2020-03-20 来源:eefocus
1.寄存器寻址
指令举例:MOV A,R0
该指令功能:将寄存器R0中的内容送累加器A中
详细说明:假设R0中的内容是16进制数20H,那么执行这条指令之后,累加器A中的内容是20H 即十进制数:32
2.直接寻址
指令举例:MOV A,30H
该指令功能:将地址单元30H中的内容送累加器A中
详细说明:假设地址单元30H中的内容是20H,那么执行该指令之后,累加器A中的内容是:20H 即十进制数32
3.寄存器间接寻址
指令举例:MOV A,@R0
该指令功能:将R0指向的内存单元中的内容送累加器A中
详细说明:为和寄存器直接寻址区别,汇编语言中,寄存器间接寻址中的寄存器前面会加上一个@以示区别,假设R0中的内容是10H,(10H)=20H,那么执行完该指令之后,累加器A中的内容是20H,即有A=@R0=(10H)=20H,这有点类似于高级语言中的指针,@R0指向内存地址单元10H,而10H中的内容是20H,该指令的功能就是将@R0所指向的内存地址单元10H中的内容送累加器A中。
4.立即数寻址
指令举例:MOV A,#30H
该指令功能:将立即数30H送累加器A
详细说明:为和直接寻址区别开来,汇编语言中利用#区别常数和内存地址,我们知道,寄存器直接寻址中,后面一个操作数中存储的是内存单元地址,而在立即数寻址中,后一个操作数是一个常数,所以该指令的功能最直接,相当于高级语言中的赋值操作,即将常数30H送累加器A,完成该指令之后,累加器A中的内容是:30H
注意:立即数寻址中有一条特殊的指令MOV DPTR,#立即数,这里的立即数是16位的,即该立即数可以有有16个二级制位
5.变址寻址
指令举例:MOVC A,@A+DPTR
该指令功能:将累加器A中的内容和DPTR的值(DPTR中的是内存地址)相加得到一个内存地址,将该内存地址中的内容送累加器A中
详细说明:假设该指令执行之前:A=54H,DPTR=3F21H,那么@A+DPTR=(3F75H),假设内存地址3F75中的内容是20H,那么执行完该指令之后,A中的值为20H
注意:这里的操作码是MOVC而不是MOV,且变址寻址的指令只有三条:
MOVC A,@A+DPTR
MOVC A,@A+PC
JMP @A+DPTR
并且该指令只用于程序存储器,即ROM
暂时只介绍这几种基本的寻址方式,后面应该会继续更新。
如有错误,望大家指出。
史海拾趣
|
上市不重要;商业模式重要 商业模式是影响一个企业发展、融资、上市非常重要的因素。不同商业模式的企业应选择不同的上市地。反之,欲在不同地方或者同一地方不同市场上市的企业应根据自己的融资需求预先设计自己独特的 ...… 查看全部问答> |
|
开始入门DSP的一些注意事项 本文来自于HELLODSP。 在作硬件之前,需要看的资料有: 1.芯片数据手册,描述该器件的引脚信号、片上资源、电气指标和机械特性(如封装等),在做硬件前必看(TMS320F281x数据手册SPRS174J) 2.某一系列DSP的CPU和指 ...… 查看全部问答> |
|
请教各位,常用定位芯片有哪些。我现在打算做一个与无线网络有关的东西。要在上位机上得到网络中每个zigbee模块的具体位置,当zigbee模块的位置发生变化时,上位机软件上各个节点的相对位置也会发生改变。但是我的zigbee ...… 查看全部问答> |
|
最近做一个LM3S8962控制的NRF24L01 收发模块,移植了51的代码 结果出现很多问题 论坛里也没找到相关帖子,各位大侠有谁做过这个模块 望不吝赐教 最好有源代码 比较相近的也行 多谢啦!! [ 本帖最后由 CC_心雨 于 2011-4-11 17:23 编辑 ]… 查看全部问答> |
|
$(\'swf_Na9\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://player.youku.com/player.php/sid/XMjY3NzUwOTk2/v.sw ...… 查看全部问答> |




