【arm】arm优化基本知识(寄存器、指令集、调用规则以及汇编格式)

时间:2022-07-26 18:42:59

Date: 2018.7.1


1、参考

https://developer.arm.com/products/architecture/a-profile/docs/den0018/a
arm neon介绍:
https://developer.arm.com/technologies/neon
https://blog.csdn.net/EmSoftEn/article/details/51834171

ARM程序调用规则(ATPCS)分析:
https://blog.csdn.net/rockrockwu/article/details/8043618

ARM(RISC)和x86(CISC)的技术差异:
https://www.cnblogs.com/bitter/p/4023176.html

GNU ARM 汇编指令:
http://www.360doc.com/content/14/0929/14/5268588_413228352.shtml#

ARM之汇编学习—如何编写ARM汇编程序:
https://blog.csdn.net/tigerjibo/article/details/6201716

2、arm寄存器和neon寄存器

当前主要讲述32位arm处理器寄存器:
arm32位寄存器:15个通用寄存器R0~R14,R15是程序计数器PC。

NEON寄存器:


  • Q寄存器Q0~Q15:128bit
  • D寄存器D0~D31 :64bit
  • S寄存器S0~S31 :32bit

注:NEON的这三种寄存器是重叠的,物理地址是一样的。
3、ATPCS调用规则

ATPCS规定寄存器的使用规则如下:
1). 子程序通过R0~R3来传递参数;

2). 子程序使用R4~R11来保存局部变量;

3). 寄存器R12用作scratch寄存器,记为ip(发现Linux内核中的汇编直接使用ip这个

符号);

4). R13为SP

5). R14为LR

6). R15为PC

4、参数调用规则

1). 参数个数超过4个时,使用R0~R3传递参数;超过4个时,其他参数使用数据栈传递,最后一个字先入栈。
2). 子程序返回结果,32位结果存入R0中,若是64位结果,低位存入R0中,高位存入R1中。

5、arm指令集以及gnu arm格式

参考:
http://www.360doc.com/content/14/0929/14/5268588_413228352.shtml#

后续继续更新