概述
几个重要的arm指令详解
- STR(store)
使用格式:STR{条件} Rd,[Rbase]
存储Rd到Rbase所包含的有效地址 - LDR(load)
使用格式:LDR{条件} Rd,[Rbase] 或者伪 指令LDR{条件} Rd,=value
加载地址Rbase中的值到Rd中;伪指令拆分为几个真正的指令,加载value到 Rd中 - STMDB(store many decrease before )
使用格式:STMDB{条件}{类型} Rn{!}, <寄存器列表>{^}
多个数据预先增加存储,寄存器按从最低到最高的编号次序与到从低端到高端的
内存之间传送数据 - LDMIA(load many increase after)
使用格式:LDMIA{条件}{类型} Rn{!}, <寄存器列表>{^}
多个数据过后减少加载,寄存器按从最低到最高的编号次序与到从低端到高端的内存之间传送数据。用是否存在‘!’来控制写回操作,即PC执行完这条指令是否回到操作之前的地址值。^表示恢复 PSR 位。 - B(Branch) 分支
使用格式:B{条件} <地址>
程序计数器 PC跳转到该地址处执行,例如:B main //跳转到主函数 - BL(Branch witch Link)带链接的分支
使用格式:B{条件} <地址>
和B指令的唯一区别是BL跳转之前把下一条指令的地址存入到lr寄存器中,PC跳转执行完后,lr寄存器的值赋值给PC,PC回到跳转前把下一条指令的地址处
注意:STR和LDR不能用于寄存器与寄存器之间的传输数据,寄存器与寄存器之间交换数据用MOV
ATPCS规则
1. 子程序通过寄存器R0~R3来传递参数. 这时寄存器可以记作: A1~A4 , 被调用的子程序在返回前无需恢复寄存器R0~R3的内容.
2. 在子程序中,使用R4~R11来保存局部变量.这时寄存器R4~R11可以记作: V1~V8 .如果在子程序中使用到V1~V8的某些寄存器,子程序进入时必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值,对于子程序中没有用到的寄存器则不必执行这些操作.在THUMB程序中,通常只能使用寄存器R4~R7来保存局部变量.
3. 寄存器R12用作子程序间scratch寄存器,记作ip; 在子程序的连接代码段中经常会有这种使用规则.
4. 寄存器R13用作数据栈指针,记做SP,在子程序中寄存器R13不能用做其他用途. 寄存器SP在进入子程序时的值和退出子程序时的值必须相等.
5. 寄存器R14用作连接寄存器,记作lr ; 它用于保存子程序的返回地址,如果在子程序中保存了返回地址,则R14可用作其它的用途.
6. 寄存器R15是程序计数器,记作PC ; 它不能用作其他用途.
7. ATPCS中的各寄存器在ARM编译器和汇编器中都是预定义的.
最后
以上就是粗犷方盒为你收集整理的几个重要的arm指令详解的全部内容,希望文章能够帮你解决几个重要的arm指令详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复