文章參考:
https://baike.baidu.com/item/ARM%E6%8C%87%E4%BB%A4%E9%9B%86/907786?fr=aladdin
https://blog.csdn.net/u013477200/article/details/50723555
https://blog.csdn.net/dddxxxx/article/details/47130545
ARM指令集是指計算機ARM操作指令系統。在ARM中有兩種方式可以實作程式的跳轉:一種是跳轉指令;另一種是直接向PC寄存器(R15)中寫入目标位址值。
ARM指令集可以分為跳轉指令、資料處理指令、程式狀态寄存器(PSR)處理指令、加載/存儲指令、協處理器指令和異常産生指令六大類。
ARM指令表
ADC | 帶進位的32位數加法 |
ADD | 32位數相加 |
AND | 32位數的邏輯與 |
B | 在32M空間内的相對跳轉指令 |
BEQ | 相等則跳轉(Branch if EQual) |
BNE | 不相等則跳轉(Branch if Not Equal) |
BGE | 大于或等于跳轉(Branch if Greater than or Equa) |
BGT | 大于跳轉(Branch if Greater Than) |
BIC | 32位數的邏輯位清零 |
BKPT | 斷點指令 |
BL | 帶連結的相對跳轉指令 |
BLE | 小于或等于跳轉(Branch if Less than or Equal) |
BLEQ | 帶連結等于跳轉(Branch with Link if EQual) |
BLLT | 帶連結小于跳轉(Branch with Link if Less Than) |
BLT | 小于跳轉(Branch if Less Than) |
BLX | 帶連結的切換跳轉 |
BX | 切換跳轉 |
CDP CDP2 | 協處理器資料處理操作 |
CLZ | 零計數 |
CMN | 比較兩個數的相反數 |
CMP | 32位數比較 |
EOR | 32位邏輯異或 |
LDC LDC2 | 從協處理器取一個或多個32位值 |
LDM | 從記憶體送多個32位字到ARM寄存器 |
LDR | 從虛拟位址取一個單個的32位值 |
MCR MCR2 MCRR | 從寄存器送資料到協處理器 |
MLA | 32位乘累加 |
MOV | 傳送一個32位數到寄存器 |
MRC MRC2 MRRC | 從協處理器傳送資料到寄存器 |
MRS | 把狀态寄存器的值送到通用寄存器 |
MSR | 把通用寄存器的值傳送到狀态寄存器 |
MUL | 32位乘 |
MVN | 把一個32位數的邏輯“非”送到寄存器 |
ORR | 32位邏輯或 |
PLD | 預裝載提示指令 |
QADD | 有符号32位飽和加 |
QDADD | 有符号雙32位飽和加 |
QSUB | 有符号32位飽和減 |
QDSUB | 有符号雙32位飽和減 |
RSB | 逆向32位減法 |
RSC | 帶進位的逆向32法減法 |
SBC | 帶進位的32位減法 |
SMLAxy | 有符号乘累加(16位*16位)+32位=32位 |
SMLAL | 64位有符号乘累加((32位*32位)+64位=64位) |
SMALxy | 64位有符号乘累加((32位*32位)+64位=64位) |
SMLAWy | 号乘累加((32位*16位)>>16位)+32位=32位 |
SMULL | 64位有符号乘累加(32位*32位)=64位 |
SMULxy | 有符号乘(16位*16位=32位) |
SMULWy | 有符号乘(32位*16位>>16位=32位) |
STC STC2 | 從協處理器中把一個或多個32位值存到記憶體 |
STM | 把多個32位的寄存器值存放到記憶體 |
STR | 把寄存器的值存到一個記憶體的虛位址内間 |
SUB | 32位減法 |
SWI | 軟中斷 |
SWP | 把一個字或者一個位元組和一個寄存器值交換 |
TEQ | 等值測試 |
TST | 位測試 |
UMLAL | 64位無符号乘累加((32位*32位)+64位=64位) |
UMULL | 64位無符号乘累加(32位*32位)=64位 |