STMFD 和LDMFD指令】的更多相关文章

http://blog.163.com/oy_mcu/blog/static/16864297220120193458892/ LDM/STM指令主要用于现场保护,数据复制,参数传送等. STMFD指令 STMFD  Rn{!},{reglist}{^} STMFD SP!,{R0-R7,LR} 对于这条指令伪代码的解释,网上是这么说的: SP = SP - 9×4: address = SP; for i = 0 to 7 Memory[address] = Ri; address  = ad…
根据调用规则ATPCS,程序一般都使用FD(FullDescending)类型的数据栈(满栈),那么对立的就由空栈类型的数据栈.空栈是指SP操作完后指向的地址空间是未使用的,反之满栈就是SP指向的地址已经使用了.所以对应到压栈出站时的操作就有一点点不一样.如果是满栈模型则会先执行栈指针的操作后在向栈指针指向的位置写入,反之就是先写入在移动栈指针.这里先要明确数据传输语法的基本语法格式. 数据传输指令语法格式: CMD{cond} Rn{!}, reglist{^} CMD 为命令有LDM*/ST…
简介: ARM指令中多数据传输共有两种: LDM:(load  much)多数据加载,将地址上的值加载到寄存器上 STM:(store much)多数据存储,将寄存器的值存到地址上 主要用途:现场保护.数据复制.参数传送等,共有8种模式(前面4种用于数据块的传输,后面4种是堆栈操作)如下: (1)IA:(Increase After) 每次传送后地址加4,其中的寄存器从左到右执行,例如:STMIA R0,{R1,LR} 先存R1,再存LR (2)IB:(Increase Before)每次传送前…
ARM的指令系统中关于栈指令的内容比较容易引起迷惑,这是因为准确描述一个栈的特点需要两个参数: 栈地址的增长方向:ARM将向高地址增长的栈称为递增栈(Descendent Stack),将向低地址增长的栈称为递减栈(Acendant Stack) 栈指针的指向位置:ARM将栈指针指向栈顶元素位置的栈称为满栈(Full Stack),讲栈指针指向即将入栈的元素位置的栈称为空栈(Empty Stack) 1. 栈类型 根据栈地址增长方向雨栈指针指向位置的不同,自然可以将栈分为四类: 递增栈 递减栈…
批量Load/Store指令用于实现在一组寄存器和一块连续的内存单元之间传输数据.也称为多寄存器寻址方式,即一条指令可以完成多个寄存器值的传送.这种寻址方式可以用一条指令最多完成传送16个通用寄存器的值,其语法格式为: LDM|STM{<Cond>} <addressing_mode> <Rn>{!},<registers>{^} 其中<addressing_mode> 可以有四种寻址方式: 1.IA(Increment After,事后递增方式…
LDM批量加载/STM批量存储指令可以实现一组寄存器和一块连续的内存单元之间传输数据. 允许一条指令传送16个寄存器的任意子集和所有寄存器,指令格式如下: LDM{cond}  mode  Rn{!}, reglist{^} STM{cond}  mode  Rn{!}, reglist{^} 主要用途:现场保护.数据复制.参数传送等,共有8中模式(前面4种用于数据块的传输,后面4种是堆栈操作)如下: (1)IA:每次传送后地址加4 (2)IB:每次传送前地址加4 (3)DA:每次传送后地址减4…
ARM的指令系统中关于栈指令的内容比较容易引起迷惑,这是因为准确描述一个栈的特点需要两个参数: 栈地址的增长方向:ARM将向高地址增长的栈称为递增栈(Descendent Stack),将向低地址增长的栈称为递减栈(Acendant Stack) 栈指针的指向位置:ARM将栈指针指向栈顶元素位置的栈称为满栈(Full Stack),讲栈指针指向即将入栈的元素位置的栈称为空栈(Empty Stack) 1. 栈类型 根据栈地址增长方向雨栈指针指向位置的不同,自然可以将栈分为四类:   递增栈 递减…
这里比较下容易混淆的四条指令,已经在这4条指令的混淆上花费了很多精力,现在做个小结,LDR,STR,LDM,STM这四条指令, 关于LDM和STM的说明,见另外一个说明文件,说明了这两个文件用于栈操作时的注意事项. )LDR:L表示LOAD,LOAD的含义应该理解为:Load from memory into register.下面这条语句就说明的很清楚: LDR   R1,     [R2] ; R1<——[R2] 就是把R2所指向的存储单元的内容的值(一个memory地址内的值),读取到R1…
1. 基本概念 ATPCS (ARM-Thumb Procedure Call Standard) 规定了一些子程序间调用的基本规则,这些规则包括子程序调用过程中寄存器的使用规则,数据栈的使用规则,参数的传递规则.有了这些规则之后,单独编译的C语言程序就可以和汇编程序相互调用. 使用ADS的C语言编译器编译的C语言子程序满足用户指定的ATPCS类型.而对于汇编语言来说,则需要用户来保证各个子程序满足ATPCS的要求. AAPCS (ARM Archtecture Procedure Call S…
mov: move sub: subtract cmp: compare cmpls: ls--->lower or same, le--->less or equal, hi--->higher ldr: load register lsl: logical shift left str: store register b: branch bl: branch label, change pc bne: branch not equal beq: branch equal blt: b…