4、索引后缀(IA,IB,DA,DB)和堆栈后缀(FD,FA,ED,EA)

本文介绍了ARM指令中索引后缀IA, IB, DA, DB以及堆栈后缀FD, FA, ED, EA的含义和使用场景。通过实例解析了这些后缀在数据块传送和堆栈操作中的应用,帮助读者更好地理解ARM指令系统。" 103431029,6874604,离散信号周期计算与MATLAB绘图解析,"['MATLAB', '数字信号处理', '离散信号']
 一直以来对这几个东西都比较模糊,今天把它总结了下

1.索引后缀(IA,IB,DA,DB)----用于数据块的传送,地址基址不能用SP(R13)寄存器
   先说明字母代表含义,方便记忆  
I--Icrement   A---After   B--Before  D--Decrement
这样就清楚含义了    IA---事后递增,即每次传递后基址加4,指向下一个字,递增方式
                    IB---事先递增,即每次传递前基址加4,指向本次传送的字,递增方式
                    DA---事后递减,即每次传递后地址减4,指向下一个字,递减方式
                    DB---事前递减,即每次传递前地址减4,指向本次传送的字,递减方式
概念就这么多,拿出实例来验证下
      LDMIA R6,{R0,R4,R7} ; [R6]-->R0,[R6+4]-->R4, [R6+8]-->R7
有时候在寄存器列表后面加个^玩意,知道啥东西不,承接上面例子GO ON
      LDMIA R6,{R0,R4,R7}^ ; ^的作用可大了:处理器同时把SPSR拷贝到CPSR中,并强制处理器回到用户模式(注意了:只在数据块传递中使用,切忌在用户模式中)
要是还不清楚再举个例子   LDMFD SP! {R12,R15}; 加载R15,同时CPSR不变
                         LDMFD SP! {R12,R15}^;加载R15,同时SPSR传送到CPSR
2.堆栈后缀(FD,FA,ED,EA)----地址基址必须使用SP(R13),堆栈堆栈嘛肯定是使用堆栈区了
    同样先了解字母含义
 F---Full  D---Descending(减)   E--Empty  A---Ascending(增)
    然后谈谈满栈和空栈
满栈(full stack)----栈指针指向栈顶元素(即最后一个入栈的数据元素)
空栈(empty stack)----栈指针指向与栈顶元素相邻的一个可用数据单元,也就是说栈指针指向第一个没用使用的地址或者空位置
  PS:之前我误解满栈就是堆满了,空栈就是空了没了到 ,希望不要再有人有这种白痴的理解
例子:   中断后保护现场  STMFD SP!,{R0-R5,LR};把R0-R5和LR保存到堆栈中
         中断返回        LDMFD SP!,{R0-R5,PC};把数据出栈到R0-R5和PC中

一点废话:如 LDMIA R6,{R0,R4,R7} ;有时候不记得是哪是寄存器哪是存储器了,LDM是数据块加载,肯定是从内存加载到寄存器嘛,就把{}内的当作寄存器,前面的R6当作存储器就是了,记住{}内是寄存器就得了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值