ARM彙編語言的基本語法

一.彙編語言的基本語法

/************************彙編指令的基本結構*****************************/
標號
操作碼  操作數1,操作數2,...... ;代碼註釋
/***********************代碼行結束****************************************/
      在ARM處理器彙編指令中,標號是可選項。在彙編語言中標號是讓彙編器計算程序轉移的地址。如果程序中有標號,則標號必須頂格寫。

1.立即數操作

      一般而言,立即數必須以"#"開頭,而第一個操作數將作爲當前指令執行結果的存儲空間。

/*****************ARM彙編指令的立即數操作*************************/ 
MOV   R0 ,  #0x10  ;將立即數0x10送入寄存器R0
MOV   R1 ,  #'A'  ;將字符A作爲立即數送入寄存器R1
/****************代碼行結束******************************************/
       

2.常量

     用戶可以在彙編指令中通過使用"EQU"來定義常量。

/************* ARM彙編指令EQU操作 ***********************/
;定義常量NVIC_IRQ_SETNO=0xE000E100
NVIC_IRQ_SETNO     EQU  0xE000E100 ;代碼必須頂格寫

LDR R0, = NVIC_IRQ_SETNO ;在一個立即數前面加"=",表示將一地址寫入寄存器R0中
MOV R1, #NVIC_IRQ_SETNO ;將立即數傳送到R1寄存器
STR R1, [R0] ;*R0=R1
/****************** 代碼行結束 ******************************/

由於ARM採用的是RISC結構,數據從內存到CPU之間的移動只能通過LDR/STR指令來完成。注意它們與MOV的區別。

LDR指令是和x86系列處理器所採用的CISC架構芯片區別最大的地方.在x86系列處理器中並有LDR這種指令,因爲x86中的MOV指令可以講數據從內存移動到寄存器中。

3.DCI使用

       在某些條件下,ARM編譯器可能會出現不認識某些特殊指令助記符的情況。這種情況下,需要用戶查出指令所對應的二進制機器碼,然後使用DCI指令對該指令進行編譯。
       例如:通過查詢,BKPT可用於軟中斷,主要用於彙編代碼的調試,器機器碼是0xBE00.如果編譯器在編譯的過程中無法識別BPKT指令,則可以使用下面的語句代替

/********************實現手動編譯ARM彙編指令******************************/
DCI       0xBE00
/*******************代碼行結束****************************************/

4.DCB,DCD的使用

         DCB指令用來定義遺傳字節常數,字節常熟可以使用字符串的形式來定義。DCD指令用來定義一串32爲的整數。通常這兩條指令被使用在彙編代碼中書協表格.
/*********************ARM彙編指令DCB/DCD********************************/
LDR     R3,  =MY_NUMBER
LDR     R4, [R3]


LDR     R0, =HELLO_TEXT
BL       PrintText     ;跳轉到PrintText,打印寄存器R0中的字符


MY_NUMBER    ;定義標號MY_NUMBER
DCD          0x11223344

HELLO_TEXT
DCB        "Hello\n"
/*********************代碼行結束**************************************/


5.彙編指令中的後綴

指令後綴 操作說明
運算操作符-S 執行操作運算符後,同時根據運算的結果更新寄存器APSR中的標誌位,例如:
ADDS   R0,    R1;將R0與R1中的數值相加,並更新寄存器APSR中的標誌位
EQ,NE,LT,GT等 條件判斷執行語句。
EQ=Equal,NE = Not Equal
LT=Less Than
GT = Great Than 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章