一.彙編語言的基本語法
/************************彙編指令的基本結構*****************************/
標號
操作碼
操作數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 |