文章目錄
-
- 彙編語言長什麼的樣子呢?
- ARM彙編
-
- 指令條件和狀态Status碼
- ARM彙編尋址方式
- 資料操作(ALU操作)
- 邏輯操作(與,或,非,異或)
- 比較操作
- 記憶體操作
- 跳轉,狀态操作
- 狀态寄存器操作
- 異常産生指令
- ARM僞指令
-
- 彙編語言程式中常用的符号
- 寄存器操作
- 資料定義僞彙編
- 控制僞指令
彙編語言長什麼的樣子呢?
-
舉例:向寄存器中一個值添加100
x86:add eax,#100
68K:ADD #100,D0
ARM:add r0,r0,#100
-
舉例:從一個寄存器指針加載到寄存器
x86:mov eax,DWORD PTR[ebx]
68K:MOVE L (A0),D0
ARM:ldr r0,[r1]
- 舉例:ARM起始代碼結構
-
ARM彙編指令格式:
Operation[cond]{status} Rd,Rn, Operand2
ARM彙編
指令條件和狀态Status碼
- 條件碼(cond)
- 狀态碼(Status)
ARM彙編尋址方式
-
立即數尋址:
ADD R0,R0,#0x3F
-
寄存器尋址:
ADD R0,R1,R2
-
寄存器間接尋址
LDR R0,[R1]
STR R0,[R1]
-
寄存器移位尋址
ADD R3,R2,R1,LSL #2 (R1 左移兩位再加上R1,然後指派給R3)
-
基址位址尋址
LDR R0,[R1,#4] (把R1位址加上4所指向的值指派給R0)
LDR R0,[R1],#4(把R1位址取出的值加上4指派給R0)
LDR R0,[R1,R2]
-
多寄存器尋址
LDMIA R0,{R1,R2,R3,R4}
-
相對尋址
BL NEXT (跳轉到NEXT)
MOV PC,LR
資料操作(ALU操作)
邏輯操作(與,或,非,異或)
比較操作
記憶體操作
單寄存器讀寫指令
多寄存器讀寫指令
-
位址模式
(1)資料塊模式:IA(傳輸後位址加4),IB(傳輸前位址加4),DA(傳輸後位址減4),DB(傳輸前位址減4)
(2)堆棧模式:滿底層堆棧,EA(空遞減堆棧),FD(滿遞減堆棧),ED(空遞增堆棧),FA(滿遞增堆棧)
資料交換指令
跳轉,狀态操作
Opcode | Operands | Description | Function |
---|---|---|---|
B | 跳轉指令 | pc<-label | |
BL | 帶傳回的連接配接跳轉 | pc->-label | |
BX | 跳轉并切換狀态Thumb | ||
BLX | 帶傳回的跳轉并切換狀态Thumb |
狀态寄存器操作
狀态寄存器操作:把32位指令分為四個域:[7:0]控制位域c,[15:8]擴充位域x,[23:16]狀态位域s,[31:24]條件标志位域f
Opcode | Operands | Description | Function |
---|---|---|---|
MRS | 把程式狀态寄存器的值傳送到通用寄存器 | ||
MSR | CPSR R0 ;SPSR,R0;CPSR_c R0 | 通用寄存器到程式狀态寄存器 |
異常産生指令
Opcode | Operands | Description | Function |
---|---|---|---|
SWI | SWI 0x02 | 軟中斷指令 | |
BKPT | BKPT | 斷點中斷指令 |
ARM僞指令
在ARM彙編語言程式裡,有一些特殊指令助記符,這些助記符與指令系統的助記符不同,沒有相對應的操作碼,通常稱這些特殊指令助記符為僞指令,他們所完成的操作稱為僞操作。僞指令在源程式中的作用是為完成彙程式設計式作各種準備工作的,這些僞指令僅在彙編過程中起作用,一旦彙編結束,僞指令的使命就完成。
- 基本常用僞指令
彙編語言程式中常用的符号
-
符号命名約定:
(1)符号區分大小寫,同名的大小寫符号會被編譯器認為是兩個不同的符号。
(2)符号在其作用範圍内必須唯一。
(3)自定義的符号不能與系統的保留字相同。
(4)符号名不應與指令或僞指令同名
-
符号,變量
ARM(Thumb)彙程式設計式所支援的變量有數字變量,邏輯變量和字元串變量
-
常量
(1)數字常量一般是32位的整數,當作為無符号數時,其取值範圍為0 ~ 232-1,當作為有符号數時,其取值範圍為-231 ~ 231-1
(2)邏輯常量隻有兩種取值情況:真或假
(3)字元串常量為一個固定的字元串,一般用于程式運作時的資訊提示
-
變量代換符
程式中的變量可通過代換操作取得一個常量。代換操作符為:“”$“”
Sample:
LCLS S1
LCL S2
S1 SETS "Test!"
S2 SETS "This is a $S1" ;字元串變量S2的值為 This is a Test!
- 表達式和運算符
寄存器操作
寄存器操作
資料定義僞彙編
資料定義僞彙編
控制僞指令
Sample:
GBLL Test ;聲明一個全局的邏輯變量,變量名為Test
……
IF Test = TRUE
指令序列1
ELSE
指令序列2
ENDIF
GBLA Counter ;聲明一個全局的數學變量,變量名為Counter
Counter SETA 3 ;由變量Counter控制循環次數
……
WHILE Counter < 10
指令序列
WEND
MACRO
$OP hello world $param1,$param2
MOV R3,#0x02
MEXIT
MEND