armv7學習記錄

ARM架構支持跨大範圍性能點的實現。ARM處理器的架構簡單性致使了很是小的實現,而小的實現意味着設備能夠具備很是低的功耗。實現大小、性能和很是低的功耗是ARM體系結構的關鍵屬性。程序員

ARM架構是一個精簡指令集計算機(RISC)架構,由於它包含了這些RISC架構特性:小程序

  • 一個大的統一寄存器文件
  • 一種加載/存儲體系結構,其中數據處理操做只對寄存器內容進行操做,而不是直接對內存內容進行操做。
  • 簡單的尋址模式,全部加載/存儲地址僅由寄存器內容和指令字段決定

此外,ARM架構還提供:緩存

  • 將移位與算術或邏輯運算相結合的指令。
  • 自動遞增和自動遞減尋址模式,以優化程序循環。
  • 加載和存儲多個指令,
  • 以最大限度地提升數據吞吐量。
  • 許多指令的條件執行,以最大化執行吞吐量。

這些對基本RISC體系結構的加強意味着ARM處理器實現了高性能、小程序大小、低功耗和小硅區之間的良好平衡。安全

本體系結構參考手冊定義了一組實現必須遵循的行爲,以及一組軟件使用實現的規則。它沒有描述如何構建實現。架構

除非體系結構指定不一樣,不然實現的程序員可見行爲必須與程序的簡單順序執行相同。這種程序員可見的行爲不包括程序的執行時間。ide

 

指令集:性能

 ARM指令集是一組32位指令,提供全面的數據處理和控制功能。學習

  Thumb 指令集是做爲一個16位指令集開發的,帶有ARM指令集功能的子集。它提供了顯著提升的代碼密度,但性能有所下降。執行拇指指令的處理器能夠更改成執行ARM指令來處理性能關鍵段,特別是處理中斷。優化

  ARMv6T2引入了Thumb-2技術。該技術使用許多32位指令擴展了原始Thumb指令集。ARMv6T2中包含的32位Thumb指令的範圍容許拇指代碼實現與ARM代碼相似的性能,代碼密度比早期的Thumb代碼更好。spa

  在ARMv6T2中,ARM和Thumb指令集提供了幾乎相同的功能。

體系結構版本、概要文件和變體:

  自引入以來,ARM體系結構已經發生了顯著的變化,而且ARM還在繼續開發它。到目前爲止,已經定義了該體系結構的7個主要版本,用版本號I到7表示。其中,前三個版本如今已通過時了。

  ARMv7提供了三個概要文件:

ARMv7-A  :

  •   實現具備多種模式的傳統ARM體系結構。
  •   支持基於內存管理單元(MMU)的虛擬內存系統體系結構(VMSA)。
  •   ARMv7-A實現能夠稱爲VMSAv7實現。支持ARM和Thumb指令集。

ARMv7-R :實時配置文件

  •   實現具備多種模式的傳統ARM體系結構。
  •   支持基於內存保護單元(MPU)的受保護內存系統體系結構(PMSA)。
  •   ARMv7-R實現能夠稱爲PMSAv7實現。支持ARM和Thumb指令集。

ARMv7-M :在ARMv7-M體系結構參考手冊中描述的 微控制器配置文件:

  •   實現一個爲低延遲中斷處理設計的程序員模型,使用寄存器的硬件堆棧和對用高級語言編寫中斷處理程序的支持。
  •   實現ARMv7 PMSA的變體。
  •     支持ARM和Thumb指令集。

A1.5 The ARM memory model
  ARM指令將地址設置爲232個8位字節的單向地址空間。這個地址空間也被認爲是230個32位 或231個16位 半字

  該架構提供如下設施:

  • 在未對齊的內存訪問上生成異常。
  • 限制應用程序對指定內存區域的訪問。
  • 將執行指令提供的虛擬地址轉換爲物理地址。
  • 在大詞尾和小詞尾之間改變對單詞和半單詞數據的解釋
  • 控制對內存的訪問順序
  • 控制緩存。
  • 同步多個處理器對共享內存的訪問

A2.2 ARM core data types and arithmetic 

加載和存儲操做能夠向內存傳輸字節、半字或字。加載字節或半字零擴展或符號擴展數據,如在適當的加載指令中指定的那樣。

指令集包括加載和存儲操做,這些操做將兩個或多個單詞從內存中傳輸到內存。軟件可使用這些指令加載和存儲雙單詞。

 B1.3.1 ARM processor modes

模式更改能夠在軟件控制下進行,也能夠由外部或內部異常引發。

Notes on the ARM processor modes

 User mode 

  操做系統以用戶模式運行應用程序,以限制系統資源的使用。以用戶模式執行的軟件在PLO上執行。用戶模式下的執行有時被描述爲無特權執行。應用程序一般在用戶模式下執行,任何程序在用戶模式下執行:

  •   只對系統資源進行無特權訪問,這意味着它不能訪問受保護的資源。
  •   系統資源。只對內存進行無特權訪問。
  •   除非引起異常,不然沒法更改模式,請參閱B1-1164頁的異常處理。

System mode

  以系統模式執行的軟件在PLI上執行。系統模式具備與用戶模式相同的可用寄存器,而且不會由任何異常輸入。

Supervisor mode

  管理器模式是執行SVC(管理器調用)指令生成一個管理器調用異常的默認模式,該異常被帶到管理器模式。

  處理器在重置時進入管理模式。

Abort mode 

  停止模式是執行數據停止異常或預取停止異常的默認模式。

Undefined mode

  未定義模式是執行與指令相關的異常(包括任何執行未定義指令的嘗試)的默認模式。

FIQ mode

  FIO模式是執行FIO中斷的默認模式。

IRQ mode

  IRQ模式是IRQ中斷的默認模式。

Hyp mode

  Hyp模式是非安全的PL2模式,做爲虛擬化擴展的一部分實現。

  Hypervisor調用異常和Hyp Trap異常是做爲虛擬化擴展的一部分實現的異常,它們老是在Hyp模式下執行。

Monitor mode

  

B1.3.2 ARM core registers 

SP, the stack pointer
    處理器使用SP做爲指向活動堆棧的指針。在拇指指令集中,大多數指令不能訪問SP。

    惟一可以訪問SP的指令是那些設計成使用SP做爲堆棧指針的指令。

    ARM指令集提供了對SP更通用的訪問,而且它能夠用做通用寄存器。然而。ARM不同意將SP用於除堆棧指針以外的任何用途。


LR, the link register

    連接寄存器是一種特殊的寄存器,它能夠保存返回的連接信息。本手冊中描述的一些狀況要求使用LR。當軟件不須要LR進行連接時,它能夠將LR用於其餘目的。它能夠將LR稱爲R14。

PC, the program counter
    執行ARM指令時,
PC讀取當前指令加8的地址

    執行Thumb指令時,PC讀取當前指令加4的地址

    向PC寫入一個地址會致使該地址的分支。

大多數Thumb指令沒法訪問PC。

  

B1.3.3 Program Status Registers (PSRs)

  

 

開始學習彙編指令:  A8 Instruction Descriptions 

以 mov指令爲例:

32位數據爲編譯後的機器碼。

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5         __asm__ __volatile__(
 6                 "nop\n"
 7                 "mov r0,#98\n"
 8                 "mov r0,#0xff0000\n"
 9                 "mov r0,#0xf000000f\n"
10                 "nop\n"
11      
12                     
13         );  
14 
15         return 0;
16 }
mov.c

反彙編後:

1     e320f000    nop     {0}     
2     e3a00062    mov     r0, #98 ; 0x62  
3     e3a008ff    mov     r0, #16711680   ; 0xff0000
4     e3a002ff    mov     r0, #-268435441 ; 0xf000000f
5     e320f000    nop     {0}    

分析:
1110 0011 1010 0000 0000 0000 0110 0010 //e3a00062
1110 0011 1010 0000 0000 1000 1111 1111   //e3a008ff 0xff0000 循環左移16位才能獲得小於256 再除以2 放在16位開始的位置
1110 0011 1010 0000 0000 0010 1111 1111   //e3a002ff   0xf000000f 循環左移4位,除以2 放在16位開始的位置
沒有條件:1110 None (AL) d 

 

add、adc、sub、sbc、and、

mrs、msr 

ldr、ldrh、ldrb

str、strh、strb

相關文章
相關標籤/搜索