单片机C51汇编指令之寻址方式学习心得

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

暂时只介绍这几种基本的寻址方式,后面应该会继续更新。

如有错误,望大家指出。

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值