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#
后续继续更新