《例说8051:单片机程序设计案例教程》——2-5 寻址方式

本节书摘来异步社区《例说8051:单片机程序设计案例教程》一书中的第2章,第2.5节,作者:张义和,陈敌北,更多章节内容可以访问云栖社区“异步社区”公众号查看

2-5 寻址方式

例说8051:单片机程序设计案例教程
所谓“寻址”,简单地讲,就是找到操作数地址的方法。8051提供5种寻址方式,说明如下。

圓 直接寻址
直接寻址(direct addressing)是直接在操作数字段里,指定操作数所在位置的地址,包括特殊功能寄存器(如P1、P2、PSW等),例如:

ADD A, 40H```
将存储器40H地址的内容加到ACC里。又如:

MOV 30H, A`
将ACC的内容复制到存储器30H地址里。

圓 间接寻址
间接寻址(indirect addressing)是利用间接寄存器(Index Register,R1或R0,标示为R_i)、基址寄存器(SP或DPTR)间接指示操作数所在位置的地址,而在间接寄存器或基址寄存器之左要加上“@”符号,例如:

INC  @R0```
以R0的内容为地址,将存储器该地址的内容加1。又如:

MOVX @DPTR, A`
以DPTR的内容为地址,将ACC的内容复制到外部存储器该地址里。

圓 寄存器寻址
寄存器寻址(Register addressing)是以寄存器(即R0到R7)的内容为操作数,例如:

ANL  A, R5```
将R5的内容与ACC的内容进行AND运算,其结果放入ACC里。又如:

DJNZ R7, LOOP`
将R7的内容减1,若其结果不等于0,则跳到LOOP处;若其结果等于0,则执行下一条指令。

圓 立即寻址
立即寻址(immediate addressing)是直接在操作数字段里放置操作数,而在操作数左边必须放置一个“#”符号,例如:

ORL A, #0FH```
将0FH与ACC的内容进行OR运算,其结果放入ACC里。又如:

CJNE A, #10, LOOP`
若ACC的内容不等于10,则跳到LOOP处;若ACC的内容等于10,则执行下一条指令。

圓 变址寻址
变址寻址(index addressing)与间接寻址有点类似,不过,变址寻址同时使用变址寄存器与基址寄存器,使用ACC作为变址寄存器,以存储偏移(offset)、PC或DPTR为基址寄存器。将基址与偏移相加后,才是操作数所在位置的地址,例如:

MOVC A, @A+PC```
先将PC的内容与ACC的内容相加,以其结果为地址,再将该地址的内容复制到ACC里。又如:

JMP @A+DPTR`
先将DPTR的内容与ACC的内容相加,以结果为地址,再跳到该地址。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值