这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 汇编指令:LDM、STM详解

共17条 1/2 1 2 跳转至

汇编指令:LDM、STM详解

高工
2022-02-19 10:12:26     打赏

LDM:(load  much)多数据加载,将地址上的值加载到寄存器上

STM:(store much)多数据存储,将寄存器的值存到地址上

(1)IA:(Increase After) 每次传送后地址加4,其中的寄存器从左到右执行,例如:STMIA R0,{R1,LR} 先存R1,再存LR

(2)IB:(Increase Before)每次传送前地址加4,同上

(3)DA:(Decrease After)每次传送后地址减4,其中的寄存器从右到左执行,例如:STMDA R0,{R1,LR} 先存LR,再存R1

(4)DB:(Decrease Before)每次传送前地址减4,同上

(5)FD:  满递减堆栈 (每次传送前地址减4)

(6)FA:  满递增堆栈 (每次传送后地址减4)

(7)ED:  空递减堆栈 (每次传送前地址加4)

(8)EA:  空递增堆栈 (每次传送后地址加4)

注意:其中在数据块的传输中是STMMDB和LDMIA对应,STMMIA和LDMDB对应

而在堆栈操作是STMFD和LDMFD对应,STMFA和LDMFA对应

格式:

LDM{cond}  mode  Rn{!}, reglist{^}

STM{cond}  mode  Rn{!}, reglist{^}

其中

 Rn:基址寄存器,装有传送数据的起始地址,Rn不允许为R15;

 !:表示最后的地址写回到Rn中;

 reglist:可包含多于一个寄存器范围,用“,”隔开,如{R1,R2,R6-R9},寄存器由小到大顺序排列;

 ^:不允许在用户模式和系统模式下运行

数据块的传输-实例:

Ldr R1,=0x10000000          //传送数据的起始地址0x10000000     

LDMIB R1!,{R0,R4-R6}      //从左到右加载,相当于 LDR R0,10000004  LDR R4,10000008... ...

/*传送前地址加+4,

所以地址加4,R0=0X1000004地址里的内容,

地址加4,R4=0X10000008地址里的内容,

地址加4,R5=0X1000000C地址里的内容,

地址加4,R6=0X10000010 地址里的内容,

由于!, 最后的地址写回到R1中,R1=0X10000010   */





关键词: 汇编     指令     详解    

高工
2022-02-19 10:14:44     打赏
2楼

谢谢分享


高工
2022-02-19 11:48:41     打赏
3楼

感谢分享


专家
2022-02-19 11:50:06     打赏
4楼

汇编难搞啊


工程师
2022-02-19 12:40:50     打赏
5楼

学习一下


专家
2022-02-21 15:30:26     打赏
6楼

感谢分享


专家
2022-02-21 15:40:57     打赏
7楼

感谢分享


专家
2022-02-22 05:13:13     打赏
8楼

感谢分享


专家
2022-02-22 05:29:01     打赏
9楼

学习


专家
2022-02-22 07:59:47     打赏
10楼

谢谢楼主分享


共17条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]