批量Load/Store指令理解(关于内存地址变化方式)
来源:互联网 发布:201淘宝开店成功经验 编辑:程序博客网 时间:2024/06/05 05:38
在ARM的批量Load/Store指令中,地址变化方式有四种:事前递增,事前递减,事后递增,事后递减。这四种地址变化方式和存取方向加起来一共有8种操作方式;同时,每一种操作方式都有两条不同指令进行表示,分为堆栈方式和其它方式,如下表:
pre-increment load
LDMED
LDMIB
post-increment load
LDMFD
LDMIA
pre-decrement load
LDMEA
LDMDB
post-decrement load
LDMFA
LDMDA
pre-increment store
STMFA
STMIB
post-increment store
STMEA
STMIA
pre-decrement store
STMFD
STMDB
post-decrement store
STMED
STMDA
对于任何一种指令,内存和寄存器的映射关系是一致的,即:高地址内存和高位寄存器相对应。例如指令stmfd sp!,{r0,r1,r2,r3},r0存放在低地址的内存中,指令ldmed sp!,{r0,r1,r2,r3},r0存放低地址内存储存的内容。
对于堆栈方式的指令,后面两个字母指明了堆栈的使用方式。E和F表示堆栈指针变化是事前还是事后,A和D表示了堆栈的地址是递增还是递减。对于F(full)方式,表示堆栈指针SP所指的内存地址会存放数据,如果有数据需要入堆栈的话,需要事先把指针进行计算后进行存储,如果有数据需要出堆栈的话,直接先内存中读取数据,之后再进行指针计算。对于E(empty)方式,表示堆栈指针SP所指的内存地址不会存放数据,如果有数据需要入堆栈的话,先进行存储之后再把指针进行计算,如果有数据需要出堆栈的话,需要事先对指针进行计算后进行读取。对于A(ascending)方式,表示有数据入栈的时候SP指针是增加的,如果有数据需要入堆栈的话,堆栈指针需要递增,如果有数据需要出堆栈的话,堆栈指针需要递减。对于D(descending)方式,表示有数据入栈的时候SP指针是递减的,如果有数据需要入堆栈的话,堆栈指针需要递减,如果有数据需要出堆栈的话,堆栈指针需要递增。例如,堆栈方式为FA,那如果进行STM操作的话应该是事前递增,进行LDM操作的话就是事后递减。
对于其它方式的指令,后面两个字母直接指明了进行批量Load/Store操作的时候,指针的操作方式。四种组合为Increment After, Increment Before, Decrement After, Decrement Before。例如,进行LDM操作,如果是
IA方式,把SP指向的内容读取到寄存后再进行递增操作,如果是DB方式,先对指针SP进行递减操作后再读取操作。
- 批量Load/Store指令理解(关于内存地址变化方式)
- 批量Load/Store指令的寻址方式
- Load/Store内存访问指令
- 四极管:Load /Store内存访问指令
- ARM的Load/Store指令
- ARM的Load/Store指令
- ARM的Load/Store指令
- 理解MIPS指令集中的ll (load linked) 和 sc (store conditional)指令
- ARM指令详解之Load/Store指令
- ARMv8 Load / store 指令学习重要笔记
- 内存地址的变化
- 关于Load的理解
- 关于地址总线-寻址空间-IO内存-IO端口理解(s3c2440例)
- [转]关于内存地址的个人理解和操作原理
- 关于adr指令的理解(转载)
- 深入理解内存地址
- 内存地址对齐方式
- 【汇编指令】arm指令集之但寄存器数据load/store (加载存储)
- wpf listview的数据绑定(dataset)与selectedItem的数据
- W. :递归版插入排序
- java 多态性总结
- 6 ways of doing locking in .NET (Pessimistic and optimistic)
- Calculator
- 批量Load/Store指令理解(关于内存地址变化方式)
- Berkeley DB 的LSN重置
- SQL Server事务全攻略
- 读控制论的一些思考
- SharedObject本地保存子swf
- PowerTip of the Day from powershell.com上周汇总(十)
- 快速上手的记录
- MFC中ASSERT()和VERIFY()区别
- 新建远程桌面 地方法