1. 程式人生 > >ARM cortex M3寄存器及指令集

ARM cortex M3寄存器及指令集

png cor 另一個 堆棧 應用程序 技術分享 font 限制 帶來

1、cortex M3擁有通用寄存器R0-R15及一些特殊寄存器:

R0‐R7 也被稱為低組寄存器。所有指令都能訪問它們。它們的字長全是 32 位,復位後
的初始值是不可預料的。

R8‐R12 也被稱為高組寄存器。這是因為只有很少的 16 Thumb 指令能訪問它們, 32
位的指令則不受限制。它們也是 32 位字長,且復位後的初始值是不可預料的 。

技術分享

R13 是堆棧指針。在 CM3 處理器內核中共有兩個堆棧指針,於是也就支持兩個堆棧。
當引用 R13(或寫作 SP)時,你引用到的是當前正在使用的那一個,另一個必須用特殊的指
令來訪問(MRS,MSR 指令)。這兩個堆棧指針分別是:
1)、主堆棧指針(MSP),或寫作 SP_main。這是缺省的堆棧指針,它由 OS 內核、異常服務
例程以及所有需要特權訪問的應用程序代碼來使用。
2)、進程堆棧指針(PSP),或寫作 SP_process。用於常規的應用程序代碼(不處於異常服
用例程中時)。
要註意的是,並不是每個應用都必須用齊兩個堆棧指針。簡單的應用程序只使用 MSP
就夠了。堆棧指針用於訪問堆棧,並且 PUSH 指令和 POP 指令默認使用 SP 。

技術分享

R14:連接寄存器
當呼叫一個子程序時,由 R14 存儲返回地址
不像大多數其它處理器, ARM 為了減少訪問內存的次數(訪問內存的操作往往要 3 個以上指令周期,帶 MMU
和 cache 的就更加不確定了),把返回地址直接存儲在寄存器中。這樣足以使很多只有 1 級子程序調用的代碼無需訪
問內存(堆棧內存),從而提高了子程序調用的效率。如果多於 1 級,則需要把前一級的 R14 值壓到堆棧裏。在 ARM
上編程時,應盡量只使用寄存器保存中間結果,迫不得以時才訪問內存。在 RISC 處理器中,為了強調訪內操作越過
了處理器的界線,並且帶來了對性能的不利影響,給它取了一個專業的術語:濺出。

R15:程序計數寄存器
指向當前的程序地址。如果修改它的值,就能改變程序的執行流(很多高級技巧就在這裏面—
—譯註)


2017-06-18 14:02:38

ARM cortex M3寄存器及指令集