1. 什麼是彙編語言?
計算機處理器,執行的是 二進制的 10101010001,這些機器碼對應的助記符就是彙編指令。
處理器 fetch 到的指令是 1001010101, 可能就是 對應彙編語言中 ADD 的加法指令, 處理器執行 加法操作,並把結果輸出到目的寄存器。
ARM (RISC)指令長度固定爲 32 bits。
2. ARM 指令集
ARM 指令集可以分爲下面六類:
3. 常見 ARM 彙編指令定義:
3.1 MOV 數據傳送指令
MOV<cc> <S> Rd, <op1>
Rd 是目的寄存器,<op1> 是操作數。
注意 MOV 指令,op2 如果是 立即數,立即數必須小於 65535(0xFFFF),所以如果給 int i = 0x11111111;ARM 彙編對應的是以下兩條指令:
S:0x80002040 : MOV r1,#0x1111
S:0x80002044 : MOVT r1,#0x1111
[ARM 官方文檔庫] http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489c/Cjagdjbf.html
3.2 ADD:
3.3 LDM:
3.4 加載寄存器指令 LDR:
在 ARM 中,word 長度是 32 bits, half word 是 16 bits, Byte 是 8 bits.
3.5 數據傳送指令 MOV:
3.6 Store 多個 Register 指令 STM:
3.7 Store Register 指令 STR:
4. Offset Addressing & Pre-Index Addressing & Post-Index Addressing
4.1 Offset Addressing:
Offset Addressing 指令例子: LDR R0, [R1, #4] 這種尋址方式,不會改變 Base 寄存器 R1 的值。(只尋址,不改 Base 寄存器)
4.2 Pre-Index Addressing
Pre-Index Addressing 指令例子: LDR R0, [R1, #4]! 這種尋址方式,會改變 Base 寄存器 R1 的值。
先將尋址的內容加載到 R0 寄存器,再將尋址的地址回寫到 Base 寄存器 R1。(先尋址,後改 Base 寄存器)
4.3 Post-Index Addressing
Post-Index Addressing 指令例子: LDR R0, [R1], #4 這種尋址方式,會改變 Base 寄存器 R1 的值。
先將 Base 寄存器 R1內容加載到 R0 寄存器,再將尋址的地址回寫到 Base 寄存器 R1,(先讀 Base 寄存器,後改 Base 寄存器)
[] 內存尋址
5. ARM 指令總結:
參考文獻:
ARM_AssyLang.pdf