【arm】arm優化基本知識(寄存器、指令集、調用規則以及彙編格式)

Date: 2018.7.1


一、參考

https://developer.arm.com/products/architecture/a-profile/docs/den0018/a
arm neon介紹:
https://developer.arm.com/technologies/neon
http://www.javashuo.com/article/p-zqfgqdes-eh.htmlhtml

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#spa

ARM之彙編學習—如何編寫ARM彙編程序:
https://blog.csdn.net/tigerjibo/article/details/6201716.net

二、arm寄存器和neon寄存器

當前主要講述32位arm處理器寄存器:
arm32位寄存器:15個通用寄存器R0~R14,R15是程序計數器PC。htm

NEON寄存器:blog


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

注:NEON的這三種寄存器是重疊的,物理地址是同樣的。
三、ATPCS調用規則

ATPCS規定寄存器的使用規則以下:
1). 子程序經過R0~R3來傳遞參數;ip

2). 子程序使用R4~R11來保存局部變量;get

3). 寄存器R12用做scratch寄存器,記爲ip(發現Linux內核中的彙編直接使用ip這個it

符號);

4). R13爲SP

5). R14爲LR

6). R15爲PC

四、參數調用規則

1). 參數個數超過4個時,使用R0~R3傳遞參數;超過4個時,其餘參數使用數據棧傳遞,最後一個字先入棧。
2). 子程序返回結果,32位結果存入R0中,如果64位結果,低位存入R0中,高位存入R1中。

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

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

後續繼續更新

相關文章
相關標籤/搜索