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

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

輸出結果 運算 技術分享 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通用寄存器的用法