以stm32f407為例,學習cortex-m4通用寄存器的用法
阿新 • • 發佈:2018-11-12
輸出結果 運算 技術分享 tex cortex-m isp 分享圖片 controls 設置
測試代碼如下:
int add(int a, int b, int c, int d, int e, int f) { return a+b+c+d+e+f; } int main(void) { int g; g = add(1,2,3,4,5, 6);
設置斷點後,如下圖所示,進入add函數前,將函數輸入參數存入寄存器,r0=6, r1=5, r3=4, r2=3, 由於輸入參數只能用r0-r4這4個寄存器,因此,需要將r0和r1存入堆棧,然後,再將剩余的2和1兩個輸入參數存入r1和r0,然後,跳到add的地址。
下圖,跳到add的地址處了,因為,有6個參數的運算,外加輸出結果,一共需要7個寄存器,即需要r0-r3之外,還需要r4,r5,r6;所以,首先,將r4、5、6存入堆棧;同時,在add裏可能還需要調用其它函數,因此,也將lr存入堆棧(每個函數初始,都需要將lr存入堆棧)。
然後,由於r0用於存放計算結果,返回值,因此,將r0存入r4,同時,將堆棧裏的另外2兩個輸入參數,提取出來放到r5和r6中。
然後,就可以計算了,最後的計算結果在r0中。
以stm32f407為例,學習cortex-m4通用寄存器的用法