FP暫存器及frame pointer介紹

2021-07-04 00:01:24 字數 1084 閱讀 6392

理論上來說,arm的15個通用暫存器是通用的,但實際上並非如此,特別是在過程呼叫的過程中。

pcs(procedure call standard for arm architecture)就定義了過程呼叫中,暫存器的特殊用途。

role in the procedure call standard

r15 pcthe program counter.

r14 lrthe link register.

r13 spthe stack pointer.

r12 ip the intra-procedure-call scratch register. (可簡單的認為暫存sp,沒啥用)

實際上,還有乙個r11是optional的,被稱為fp,即frame pointer。

1,stack frame

stack我們都知道,每乙個程序都有自己的棧。考慮程序執行時發生函式呼叫的場景,母函式和子函式使用的是同乙個棧,在通常的情況下,我們並不需要區分母函式和子函式分別使用了棧的哪個部分。但是,當我們需要在執行過程中對函式呼叫進行backtrace的時候,這一資訊就很重要了。

簡單的說,stack frame就是乙個函式所使用的stack的一部分,所有函式的stack frame串起來就組成了乙個完整的棧。stack frame的兩個邊界分別由fp和sp來限定。

在程式執行過程中(通常是發生了某種意外情況而需要進行除錯),通過sp和fp所限定的stack frame,就可以得到母函式的sp和fp,從而得到母函式的stack frame(pc,lr,sp,fp會在函式呼叫的第一時間壓棧),以此追溯,即可得到所有函式的呼叫順序。

3,gcc關於stack frame的優化選項

看起來fp只是在backtrace的時候有用,所以如果我們沒有backstrace的需求,我們是否可以不使用fp。

**:

暫存器(通用暫存器)

因為學習使用的是王爽的 組合語言 第3版 因此也只能提到8086cpo的暫存器。對於其他而言,原理都是相通的。對於8086暫存器,有14個暫存器,主要是 ax bx cx dx si di sp bp ip cs ss ds es psw。一 通用暫存器 8086的通用暫存器有ax bx cx dx...

暫存器,標誌暫存器

涉及硬體傳輸資料的,往往包含以下內容 1.資料傳輸引腳 資料放 2.控制引腳 怎麼控制 3.狀態引腳 結果如何 暫存器相當於cpu內部的儲存單元,可能是連續排列,相當於 c語言中的陣列。一 8個通用暫存器 16 bit accumulate axah alr0 count cxch clr1 dat...

CS 暫存器 和 IP 暫存器

下面將要介紹的是一組非常非常重要的暫存器,即 cs ip cs ip 兩個暫存器指示了 cpu 當前將要讀取的指令的位址,其中cs 為 段暫存器,而ip 為指令指標暫存器。什麼叫做指示了 cpu 當前將要讀取的指令呢?在 8086 cpu 中,為什麼 cpu 會自動的執行指令呢?這些指令肯定是存放在...