单片机核心学习:(三)ARM架构(下)

本文详细介绍了ARM架构中的内存访问指令,包括LDR/STR、LDM/STM及其各种地址模式,以及数据处理指令如加法、位操作等,并探讨了跳转指令在函数调用中的应用。
摘要由CSDN通过智能技术生成

目录

一、内存访问指令

1、LDR/STR

2、LDM/STM

3、栈的四种方式

二、数据处理指令

常用的数据处理指令

三、跳转指令

1、分支和跳转指令

2、练习


一、内存访问指令

读内存指令LDR/LDM:参考《DEN0013D_cortex_a_series_PG.pdf》P340P341

写内存指令STR/STM:参考《DEN0013D_cortex_a_series_PG.pdf》P377P378

  • LDR:Load Register(把某个地址上的值加载到CPU寄存器);LDM:Load Multiple Register(一次可访问多个地址);
  • STR:Store Register(把CPU寄存器的值保存到某个地址上去);STM:Store Multiple Register(一次可访问多个地址)。

addr_mode:

  • IA - Increment After,  每次传输后才增加Rn的值(默认,可省)
  • IB - Increment Before, 每次传输前就增加Rn的值(ARM指令才能用)
  • DA – Decrement After,  每次传输后才减小Rn的值(ARM指令才能用)
  • DB – Decrement Before, 每次传输前就减小Rn的值
  • ! : 表示修改后的Rn值会写入Rn寄存器,

    如果没有"!", 指令执行完后Rn恢复/保持原值

  • ^ : 会影响CPSR, 在讲异常时再细讲

1、LDR/STR

MOV		R0, #0x20000
MOV		R1, #0x10
MOV		R2, #0x12
STR		R2, [R0]              ; R2的值存到R0所示地址
STR		R2, [R0, #4]          ; R2的值存到R0+4所示地址
STR		R2, [R0, #8]!         ; R2的值存到R0+8所示地址, R0=R0+8
STR		R2, [R0, R1]          ; R2的值存到R0+R1所示地址
STR		R2, [R0, R1, LSL #4]  ; R2的值存到R0+(R1<<4)所示地址
STR		R2, [R0], #0X20       ; R2的值存到R0所示地址, R0=R0+0x20
MOV		R2, #0x34
STR		R2, [R0]              ; R2的值存到R0所示地址
LDR		R3, [R0], +R1, LSL #1 ; R3的值存到R0所示地址,R0的值等于R0+(R1<<1)所示地址

2、LDM/STM

addr_mode:

  • IA - Increment After,  每次传输后才增加Rn的值(默认,
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值