完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本文由FPGA爱好者小梅哥编写,未经作者许可,本文仅允许网络william hill官网
复制转载,且转载时请标明原作者。
首先一句话说一下stmdb和ldmia指令的作用: stmdb和ldmia指令一般配对使用,stmdb用于将寄存器压栈,ldmia用于将寄存器弹出栈,作用是保存使用到的寄存器。 ARM指令的多数据传输(STM、LDM)中,提到:多寄存器的Load和Store指令分为2组:一组用于数据的存储与读取,对应于IA、IB、DA、DB,一组用于堆栈操作,对应于FD、ED、FA、EA,两组中对应的指令含义相同。 即: STMIB(地址先增而后完成操作)、STMFA(满递增堆栈); STMIA(完成操作而后地址递增)、STMEA(空递增堆栈); STMDB(地址先减而后完成操作)、STMFD(满递减堆栈); STMDA(完成操作而后地址递减)、STMED(空递减堆栈)。 上述各组2个指令含义相同只是适用场合不同,同理有: LDMIB、LDMED; LDMIA、LDMFD; LDMDB、LDMEA; LDMDA、LDMFA。 IA模式表示:每次传送后地址+4;(After Increase) DB模式表示:每次传送前地址-4;(Before Decrease) 多寄存器加载/存储指令共有8种模式(4个用与数据块的传输,4个用于栈操作) 举例一: [mw_shl_code=c,true]指令:stmdb sp!,{r0-r12,lr} [/mw_shl_code] 含义:sp = sp - 4,先压lr,sp = lr(即将lr中的内容放入sp所指的内存地址)。sp = sp - 4,再压r12,sp = r12。sp = sp - 4,再压r11,sp = r11......sp = sp - 4,最后压r0,sp = r0。 如果想要将r0-r12和lr弹出,可以用ldmia指令: [mw_shl_code=c,true]指令:ldmia sp!,{r0-r12,lr} [/mw_shl_code] 举例二: STMIA, 比如当前r0指向的内存地址是 0x1000,STMIA R0!,{R1-R7} 就是 首先把r1存入 0x1000,然后r2存入0x1004,然后r3存入0x1008,如果是32位的处理器就是每次加4个字节,以此类推把 r1-r7按照递增的地址存入,这个r0!就是从r0的地址开始存的意思。STMDB则是地址从r0开始减少,依次存储。 |
|
相关推荐
|
|
2002 浏览 1 评论
助力AIoT应用:在米尔FPGA开发板上实现Tiny YOLO V4
1136 浏览 0 评论
3111 浏览 1 评论
2771 浏览 0 评论
矩阵4x4个按键,如何把识别结果按编号01-16(十进制)显示在两个七段数码管上?
3064 浏览 0 评论
2225 浏览 58 评论
6107 浏览 113 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-13 18:03 , Processed in 0.381294 second(s), Total 34, Slave 27 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号