1. 程式人生 > >以stm32f407為例,學習cortex-m4通用暫存器的用法

以stm32f407為例,學習cortex-m4通用暫存器的用法

測試程式碼如下:

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中。