ARM
This presentation is the property of its rightful owner.
Sponsored Links
1 / 32

ARM 處理器 PowerPoint PPT Presentation


  • 71 Views
  • Uploaded on
  • Presentation posted in: General

ARM 處理器. 定址方式. 寄存器定址. 直接由暫存器取出值操作 指令中的位址為暫存器編號 例題 : MOV R1,R2 ; R2 -> R1 SUB R0,R1,R2 ; R1 - R2 -> R0. 立即定址. 指令碼是 指令 也是 運算元 取出指令即可做運算 “#”後的值為立即值, 16 進制數值時以“ 0x” 表示 例題 : SUBS R0,R0,#1 ; R0 – 1 -> R0 MOV R0,#0xff00 ; 0xff00 -> R0. 暫存器偏移定址. 進行偏移動作

Download Presentation

ARM 處理器

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Arm

ARM處理器

定址方式


Arm

寄存器定址

  • 直接由暫存器取出值操作

  • 指令中的位址為暫存器編號

  • 例題: MOV R1,R2 ; R2 -> R1

    SUB R0,R1,R2 ; R1 - R2 -> R0


Arm

立即定址

  • 指令碼是 指令 也是 運算元

  • 取出指令即可做運算

  • “#”後的值為立即值,16 進制數值時以“0x”表示

  • 例題:SUBS R0,R0,#1 ; R0 – 1 -> R0

    MOV R0,#0xff00 ; 0xff00 -> R0


Arm

暫存器偏移定址

  • 進行偏移動作

  • 先 偏移 後 作運算

  • 第2 個運算元在與第1 個運算元結合之前

  • 例題:MOV R0,R2,LSL #3 ;

    R2 的值左移3 位,結果放入R0,

    即R0 = R2 * 8


Arm

暫存器間接定址

  • 指令中的位址碼為通用暫存器編號

  • 運算元儲存在暫存器指定位址的儲存單元中

  • 例題:LDR R1,[R2] ;將R2 中的數值作為位址,取出位址中的資料儲存在R1 中


Arm

基址定址

  • 暫存器的內容與指令中給出的偏移量相加

  • 常用於查表,陣列操作,功能指令暫存器存取等

  • 例題:LDR R2,[R3,#0x0F] ;將R3 中的數值加0x0F 作為位址,將此位址的數值儲存在R2 中


Arm

多暫存器定址

  • 一次可以傳多個暫存器值

  • 順序由小到大的順序排列,連續的暫存器可用“-”連接,否則,用“,”分隔書寫

  • 例題:LDMIA R1!,{R2-R7,R12} ;將R1 中的資料讀到R2-R7,R12,R1 自動加1


Arm

堆疊定址

  • 特定順序進行存取的儲存區

  • 例題:STMFD SP!,{R1-R7,LR} ; 將R1~R7,LR 存入


Arm

區塊複製定址

  • 將資料整段複製

  • 記憶體的某一位置複製到另一位置

  • 例題:STMIA R0!,{R1-R7} ;將R1~R7 的資料儲存到記憶體中,記憶體指標在儲存第一

    個值之後增加


Arm

相對定址

  • 指令中的位址碼欄位作為偏移量

  • 兩者相加後得到的位址即為運算元的有效位址

  • 例題:BL ROUTE1 ; 調整到ROUTE1 副程式

    BEQ LOOP ; 條件跳躍到LOOP 旗標處

    LOOP MOV R2,#2

    ROUTE1


Arm

ARM 指令集


Arm

ARM 指令集

  • 指令格式

  • 記憶體存取指令

  • 資料處理指令

  • 跳躍指令


Arm

基本格式

  • 第2 個運算元

  • 條件碼


Arm

第2 個運算元

  • 指令格式

    <opcode>{<cond>}{S}<Rd>,<Rn>

    {,<opcode2>}

    <opcode>是指令助記符號

    {<cond>}為指令執行條件


Arm

第2 個運算元

  • 靈活的使用第2 個運算元能提高代碼效率

  • 基本運算元

    #immed_8r

    Rm

    Rm,shift

    條件碼


2 immed 8r

第2 個運算元#immed_8r

  • 常數是由一個8 位的常數

  • 例題:ND R1,R2,#0x0F ;R2 與0x0F作運算,結果儲存在R1


Arm

第2 個運算元Rm

  • 算元即為暫存器的數值

  • 例題:SUB R1,R1,R2;R1-R2=>R1


2 rm shift

第2 個運算元Rm,shift

  • 暫存器的移位結果作為運算元

  • RM 值不變

  • ASR #n 算術右移n 位(1≤n≤32)

    LSL #n 邏輯左移n 位元(1≤n≤31)

  • 例題:ADD R1,R1,R1,LSL #3; R1=R1*9


Arm

條件碼

  • 相等、不相等(EQ、 NE )

  • 無符號數大於或等於、無符號數小於(CS/HS 、CC/LO )

  • 負數、正數或零(MI 、PL )

  • 溢出、沒有溢出(VS、 VC )


Arm

條件碼

  • 無符號數大於、無符號數小於或等於(HI、LS )

  • 帶符號數大於或等於、帶符號數小於(GE、 LT )

  • 帶符號數大於、帶符號數小於或等於(GT、 LE )

  • 無條件執行(AL )


Arm

條件碼

  • 例題:CMP R0,R1;R0 與R1 比較

    ADDHI R0,R0,#1;若R0>R1,則R0=R0+1

    ADDLS R1,R1,#1;若R0<=R1,則R1=R1+1


Arm

ARM 記憶體存取指令

  • LDR

  • LDM

  • SWP


Arm ldr

ARM 記憶體存取指令LDR

  • 記憶體中讀取資料放入暫存器

  • 格式:LDR{cond} {T} Rd, <地址> ;載入指定位址上的資料(字),放入Rd 中

  • 例題: LDR R2,[R5] ;

    載入R5 指定位址上的資料(字),

    放入R2 中


Arm ldm

ARM 記憶體存取指令LDM

  • 為載入多個暫存器

  • 格式:

    LDM{cond}<模式> Rn{!},reglist{^}

  • 例題:LDMIA R0!,{R3-R9} ;

    載入R0 指向位址上的多字資料,

    儲存到R3~R9 中,R0 值更新


Arm swp

ARM 記憶體存取指令SWP

  • 將一個記憶體單元(暫存器Rn 中)讀取到一個暫存器Rd 中,同時將另一個暫存器Rm 寫入到該單元中

  • 格式:

    SWP{cond}{B} Rd,Rm,[Rn]

    B 參數 ;Rd 從記憶體載入到的暫存

    器;Rm 儲存到記憶體中


Arm swp1

ARM 記憶體存取指令SWP

  • 例題:SWP R1,R1,[R0] ;

    將R1 的內容與R0 指向的儲存單元

    的內容進行交換


Arm

ARM 資料處理指令

  • 資料傳送指令

  • 算術邏輯運算指令

  • 比較指令

  • 乘法指令


Arm

資料傳送指令

  • MOV、MVN

  • 格式: MOV{cond}{S} Rd,operand2MVN{cond}{S} Rd,operand2

  • 例題:MOV R0,R1 ;R0=R1MVN R1,R2 ;將R2 取反,結果存到R1


Arm

算術邏輯運算指令

  • ADD、SUB 、RSB 、AND 、ORR

  • 格式:ADD{cond}{S} Rd,Rn,operand2ORR{cond}{S} Rd,Rn,operand2

  • 例題:ADD R1,R1,R2 ;R1=R1+R2EOR R2,R1,R0 ;R2=R1^R0


Arm

比較指令

  • CMP、CMN、TST、TEQ

  • 格式:CMP{cond} Rn,operand2TST {cond} Rn,operand2

  • 例題:CMP R1,R2 ;

    R1 與R2 比較,設定相關旗標位元TST R0,#0x01 ;

    判斷R0 的最低位是否為0


Arm

乘法指令

  • MUL 、MLA

  • 格式:MUL{cond}{S} Rd,Rm,RsMLA{cond}{S} Rd,Rm,Rs,Rn

  • 例題:MUL R1,R2,R3 ;R1=R2×R3UMLAL R0,R1,R5,R8 ;

    (R1,R0)=R5×R8+(R1,R0)


Arm

跳躍指令

  • B(跳躍 )、BL(帶鏈結的跳躍 )、BX(分支與轉換的跳躍 )

  • 格式:B{cond} label

  • 例題:B WAITA ;跳躍到WAITA 標號處BL DELAY ; 副程式使用BX R0 ;跳躍到R0,依據R0 的最低位元

    來切換處理器狀態


  • Login