1. 程式人生 > >常用的彙編指令介紹

常用的彙編指令介紹

注意:此文件會根據學習過程中遇到的ARM彙編指令,持續更新。

LDR彙編指令:

LDR指令的格式為:
LDR{條件}  目的暫存器,<儲存器地址>
LDR指令用於從儲存器中將一個32位的字資料傳送到目的暫存器中。該指令通常用於從儲存器
中讀取32位的字資料到通用暫存器,然後對資料進行處理。當程式計數器PC作為目的暫存器時,
指令從儲存器中讀取的字資料被當作目的地址,從而可以實現程式流程的跳轉。該指令在程式設
計中比較常用,定址方式靈活多樣,請讀者認真掌握。

指令示例:
LDR R0,[R1]                  //將儲存器地址為R1的字資料讀入暫存器R0。
LDR R0,[R1,R2]              //將儲存器地址為R1+R2的字資料讀入暫存器R0。
LDR R0,[R1,#8]               //將儲存器地址為R1+8的字資料讀入暫存器R0。
LDR R0,[R1,R2]!            //將儲存器地址為R1+R2的字資料讀入暫存器R0,並將新地址R1+R2寫入R1。
LDR R0,[R1,#8]!             //將儲存器地址為R1+8的字資料讀入暫存器R0,並將新地址R1+8寫入R1。 
LDR R0,[R1],R2              //將儲存器地址為R1的字資料讀入暫存器R0,並將新地址R1+R2寫入R1。
LDR R0,[R1,R2,LSL#2]!      //將儲存器地址為R1+R2×4的字資料讀入暫存器R0,並將新地址R1+R2×4寫入R1。
LDR R0,[R1],R2,LSL#2      //將儲存器地址為R1的字資料讀入暫存器R0,並將新地址R1+R2×4寫入R1。

ARM是RISC結構,資料從記憶體到CPU之間的移動只能通過L/S指令來完成,也就是ldr/str指令。  
比如想把資料從記憶體中某處讀取到暫存器中,叧能使用ldr 
比如: 
ldr r0, 0x12345678 
就是把0x12345678這個地址中的值存放到暫存器r0中。

LDR R, label和LDR R, =label的區別:

LDR r, =label會把label表示的值載入到暫存器中,而LDR r, label會把label當做地址,把label指向的地址中的值載入到暫存器中。

譬如label的值是0x8000,LDR r, =label會將0x8000這個數字載入到暫存器中,而LDR r, label則會將記憶體地址0x8000處的值載入到暫存器中。

BIC彙編指令:

BIC指令格式為:

bic Rd, Rn, Oprand2

BIC(位清除)指令對Rn中的值和Operand2值的反碼按位進行邏輯"與"運算。BIC是邏輯"與非"指令,實現的Bit Clear的功能。

舉例:
BIC R0, R0, #0xF0000000
將R0暫存器高4位清零;

BIC R1, R1, #0x0F
將R1暫存器低4位清0;

ORR彙編指令:

指令格式為:

ORR{條件}{S} 目的暫存器,運算元1,運算元2

ORR指令用於在兩個運算元上進行邏輯或運算,並把結果放置到目的暫存器中。運算元1應該是一個暫存器,運算元2可以是一個暫存器,被移位的暫存器,或一個立即數。該指令常用於設定運算元1的某些位。

指令示例:ORR R0, R0, #3
該指令設定R0的0、1位,其餘位保持不變。
orr r0, r0, #0xd3
0xd3=1101 0111
將r0與0xd3立即數或運算,然後將結果返還給r0暫存器中,即把r0的bit[7:6]和bit[4]和bit[2:0]置為1。

STR彙編指令:

STR指令的格式為:
STR{條件} 源暫存器,<儲存器地址>
STR指令用於從源暫存器中的一個32位的字資料傳送到儲存器表示的地址中。該指令在程式設計中比較常
用,定址方式靈活多樣,使用方式可參考指令LDR。

指令示例:
STR R0,[R1], #8          //將R0中的字資料寫入以R1為地址的儲存器中,並將新地址R1+8寫入R1。
STR R0,[R1, #8]          //將R0中的字資料寫入以R1+8為地址的儲存器地址中。

持續更新中......