ARM指令集和常用寄存器

2021-01-15 電子產品世界

BX Rm 帶狀態切換的跳轉指令 PC

4)ARM協處理器指令

1,CDP 通知ARM協處理器執行特定的操作

2,LDC 從某一連續的內存單元將數據讀取到協處理器的寄存器中

LDC p5, c2, [R2, #4] //讀取R2+4指向內存單元的數據傳送到協處理器p5的c2寄存器中

3,STC 將協處理器的寄存器數據寫入到某一連續的內存單元中

4,MCR 將ARM處理器的寄存器中的數據傳送到協處理器的寄存器中。

5,MRC 將協處理器的寄存器中的數據傳送到ARM處理器的寄存器中。

5)ARM雜項指令

SWI immediately——24 軟中斷指令 處理器進入管理模式

MRS Rd, psr 讀狀態寄存器指令

MSR psr_fields, Rd/#immed_8r 寫狀態寄存器指令

6)ARM偽指令

ADR偽指令 小範圍的地址讀取偽指令,用於將PC相對偏移的地址值讀取到寄存器中。

ADRL偽指令 中等範圍的地址讀取偽指令,用於將PC相對偏移的地址值或基於寄存器相對偏移的地址值讀取到寄存器中。

LDR偽指令 大範圍的地址讀取偽指令,用於加載32位的立即數或一個地址到指定寄存器中。

NOP偽指令 空操作偽指令

ARM彙編程序由機器指令, 偽指令和宏指令組成,偽指令不像機器指令那樣在處理器運行期間由機器執行,而是由彙編程序

對源程序處理。

1)符號定義偽指令

GBLA全局的算術變量初始化為0 LCLA 局部的 SETA 賦值

GBLL全局的邏輯變量初始化為false LCLL 局部的 SETL 賦值

GBLS全局的字符串變量初始化空 LCLS 局部的 SETS 賦值

ARM處理器共有 37個寄存器。其中包括:

**31個通用寄存器,包括程序計數器(PC)在內。這些寄存器都是32位寄存器。

**6個狀態寄存器。這些寄存器也是32位寄存器。

ARM處理器共有7種不同的處理器模式,每一種模式中都有一組相應的寄存器組。在任何時刻,可見的寄存器包括15個通用寄存器

(R0-R14),一個或兩個狀態寄存器及程序計數器(PC)。在所有的寄存器中,有些是各模式公用一個物理寄存器,有一些寄存

器各模式擁有自己獨立的物理寄存器。

****************************************************

通用寄存器 ARM

通用寄存器分為以下三類:備份寄存器、未備份寄存器、程序計數器PC

備份寄存器

對於R8-R12備份寄存器來說,每個寄存器對應兩個不同的物理寄存器。系統為將備份寄存器用於任何的非凡用途,但是

當中斷處理非常簡單,僅僅使用R8-R14寄存器時,FIQ處理程序可以不必執行保存和恢復中斷現場的指令,從而可以使中

斷處理非常迅速。 ARM

對於R13,R14備份寄存器來說,每個寄存器對應六個不同的物理寄存器,其中的一個是系統模式和用戶模式共用的;另外

的五個對應於其他的五種處理器模式。採用下面的記號來區分各個物理寄存器:

R13_ 字串5

其中MODE可以是下面幾種模式之一:usr,svc,abt,und,irq,fiq

字串5

未備份寄存器

未備份寄存器包括R0-R7。對於每一個未備份寄存器來說,所有處理器模式下都是使用同一個物理寄存器。未備份寄存器

沒有被系統用於非凡的用途,任何可採用通用寄存器的場合都可以使用未備份寄存器。

程序計數器PC

可以作為一般的通用寄存器使用,但有一些指令在使用R15時有一些限制。由於ARM採用了流水線處理器機制,當正確讀取

了PC的值時,該值為當前指令地址值加上8個字節。也就是說,對於ARM指令集來說,PC指向當前指令的下兩條指令的地址。

由於ARM指令是字對齊的,PC值的第0位和第一位總為0。

需要注意的是,當使用str/stm保存R15時,保存的可能是當前指令地址值加8個字節,也可能保存的是當前指令地址值加12

個字節。到底哪種方式取決於晶片的具體設計。對於用戶來說,儘量避免使用STR/STM指令來保存R15的值。

當成功的向R15寫入一個數值時,程序將跳轉到該地址執行。由於ARM指令是字對齊的,寫入R15的值應滿足bits[1:0]為0b00

,具體要求arm個版本有所不同:

**對於arm3以及更低的版本,寫入R15的地址值bits[1:0]被忽略,即寫入r15的地址值將與0xFFFF FFFC做與操作。

**對於ARM4以及更高的版本,程序必須保證寫入R15的地址值bits[1:0]為0b00,否則將產生不可預知的後果。

對於Thumb指令集來說,指令是班子對齊的,處理器將忽略bit[0]。


相關焦點

  • ARM指令學習筆記
    要學arm指令集,首先要了解什麼是arm。眾所周知arm是advancedRISCmachines。而risc又是什麼東西呢?即:reducedinstructionsetcomputer,精簡指令集計算機。是一種是一種執行較少類型計算機指令的微處理器,起源於80年代的MIPS主機。
  • arm 微學術 架構_arm彙編 - CSDN
    3、學ARM彙編要學的內容    彙編指令    偽指令    偽操作 /** 代碼演示 - 最簡單的彙編程序 **/.text @代表接下來的內容放入代碼段.code 32 @代表接下來的內容翻譯成ARM指令集.global start @聲明全局start標號start:mov r0, #10 @
  • ARM 浮點運算詳解
    當使用軟浮點工具鏈編譯浮點操作時,編譯器會用內聯的浮點庫替換掉浮點操作,使得生成的機器碼完全不含浮點指令,但是又能夠完成正確的浮點操作。三:浮點協處理器:在較新版本的ARM中,可以添加協處理器。 一些ARM CPU為了更好的處理浮點計算的需要,添加了浮點協處理器。並定義了浮點指令集。
  • ARM與RISC-V架構的區別是什麼?
    ARM架構,更主要的是ARM指令集系統。不同於x86架構的複雜指令集(CISC)架構,是一種精簡指令集(RISC)架構。相對於CISC架構處理器,採用精簡指令集設計的ARM架構設計目標是能在儘量高的時鐘頻率下通過很少周期執行的指令集。 大幅減少不常用的指令,降低晶片複雜度。
  • ARM 一些特殊符號
    arm彙編程序中的符號 在arm彙編語言中,符號(symbols)可以代表地址(addresse)、變量(variables)和數字常量(numeric constants)。當符號代表地址時,又稱為標號(lable)。
  • 淺談avr和arm的區別
    AVR單片機硬體結構採取8位機與16位機的折中策略,即採用局部寄存器存堆(32個寄存器文件)和單體高速輸入/輸出的方案(即輸入捕獲寄存器、輸出比較匹配寄存器及相應控制邏輯)。提高了指令執行速度(1Mips/MHz),克服了瓶頸現象,增強了功能;同時又減少了對外設管理的開銷,相對簡化了硬體結構,降低了成本。
  • 一文看懂arm架構和x86架構有什麼區別
    本文主要介紹的是arm架構和x86架構的區別,首先介紹了ARM架構圖,其次介紹了x86架構圖,最後從性能、擴展能力、作業系統的兼容性、軟體開發的方便性及可使用工具的多樣性及功耗這五個方面詳細的對比了arm架構和x86架構的區別,具體的跟隨小編一起來了解一下。
  • AVX指令集是什麼?它的應用又有哪些?
    從MMX到SSE,再到AVXPentium MMX系列處理器上新引入的MMX指令集開創了x86處理器支持SIMD操作的先河,該指令集定義了8個64-bit寬度的寄存器,每個寄存器的64-bit容量中可以放入八個8-bit長度的整數或四個16-bit長度整數或兩個32-bit整數,CPU在識別到MMX指令集的新指令時會自動將寄存器中的數據進行分割計算,這樣一來,單個指令就成功操作了多個數據
  • ARM彙編偽指令(1)
    ARM彙編程序由機器指令、偽指令和宏指令組成。本文引用地址:http://www.eepw.com.cn/article/201611/319390.htm1,符號定義偽指令符號定義偽指令用於定義ARM彙編程序的變量、對變量進行賦值、定義寄存器名稱。
  • ARM學習筆記--GPIO接口
    對某個引腳的操作一般通過讀、寫寄存器來完成。 訪問這些寄存器是通過軟體來讀寫它們的地址。比如:S3C2410和S3C2440的GPBCON、GPBDAT寄存器地址都是0x56000010、0x56000014,可以通過如下的指令讓GPB5輸出低電平。
  • 解讀x86、ARM和MIPS三種主流晶片架構
    指令集可分為複雜指令集(CISC)和精簡指令集(RISC)兩部分,代表架構分別是x86、ARM和MIPS。而CISC體系的x86指令集因為硬體所提供的指令集較多,所以許多工作都能夠以一個或是數個指令來代替,編譯的工作因而減少了許多。  ARM指令集架構的主要特點:一是體積小、低功耗、低成本、高性能;二是大量使用寄存器且大多數數據操作都在寄存器中完成,指令執行速度更快;三是尋址方式靈活簡單,執行效率高;四是指令長度固定,可通過多流水線方式提高處理效率。
  • 控制器由指令寄存器IR、程序計數器PC和操作控制器三個部件組成!
    控制器是指揮計算機的各個部件按照指令的功能要求協調工作的部件,是計算機的神經中樞和指揮中心,由指令寄存器IR、程序計數器PC和操作控制器三個部件組成,對協調整個電腦有序工作極為重要。存儲器可以指主存、高速緩存或寄存器棧等用來保存當前正在執行的一條指令。
  • 單片機 arm 常用的接口總結
    常用的接口有spi,I2c,uart等,他們都有自己的協議規定,下面談談它們之間的聯繫與區別:1 I2C總線本文引用地址:http://www.eepw.com.cn/article/201611/321770.htm涉及到I2C的編程主要涉及到兩種情況:有專用控制器的arm晶片
  • 愛了愛了,這篇寄存器講的有點意思
    那麼這個過程勢必涉及到從存儲器中讀取和寫入數據,因為它涉及通過控制總線發送數據請求並進入存儲器存儲單元,通過同一通道獲取數據,這個過程非常的繁瑣並且會涉及到大量的內存佔用,而且有一些常用的內存頁存在,其實是沒有必要的,因此出現了寄存器,存儲在 CPU 內部。
  • 第1天-ARM彙編指令LSL/LSR/ASL/ASR
    譯註:移位操作在 ARM 指令集中不作為單獨的指令使用,它是指令格式中是一個欄位,在彙編語言中表示為指令中的選項。如果數據處理指令的第二個操作數或者單一數據傳送指令中的變址是寄存器,則可以對它進行各種移位操作。
  • ARM 彙編的mov操作立即數的疑問
    因為對arm彙編有些指令還不能理解,特別是一些相似功能指令間的區別。偶然在網上搜到「faq ARM assembly」,其中描述的幾個問題還是值得好好研究一下。2. 慢慢的發現自己也不再害怕英文的文檔了,耐心看至少也能懂個大概。
  • 發那科機器人應用-PR[ ]位置寄存器
    位置寄存器指令  位置寄存器指令,是進行位置寄存器的算術運算的指令。位置寄存器指令可進行代入、加算、減算處理,以與寄存器指令相同的方式記述。  UTOOL[ i ]:工具坐標系[i]的值  例  1: PR[1]= LPOS  2: PR[R[4]]= UFRAME[R[1]]  3: PR[GP1: 9]= UTOOL[GP1: 1]  PR[i] =(值)+(值)  PR[i] =(值)+(值)指令,代入2個值的和。
  • ARM彙編程序基本知識
    段是相對獨立的指令或者代碼序列,擁有特定的名稱。段的種類有代碼段、數據段和通用段,代碼段的內容為執行代碼,數據段存放代碼運行時需要用到的數據,通用段不包含用戶代碼和數據,所有通用段共用一個空間。OPERATION包括指令、偽操作、宏指令或偽指令。每一條操作助記符必須全部大寫或者全部小寫。在寫操作助記符前,必須有空格。OPERAND 表示操作的對象,可以使常量、變量、標號、寄存器或者表達式,不同的對象之間必須用逗號分開。
  • ARM中ADS環境下C語言和彙編語言混合編程及示例
    彙編語言是和CPU的指令集緊密相連的,作為涉及底層的嵌入式系統開發,熟練對應彙編語言的使用也是必須的。這裡主要討論C和彙編的混合編程,包括相互之間的函數調用。下面分四種情況來進行討論,不涉及C++語言。