【ARM汇编】ARM 指令集和Thumb 指令集
指令集匯總
- 關于指令集
- ARM指令集
- Thumb指令集
- 簡單的指令集操作
關于指令集
指令集是匯編的基礎,是芯片的架構,不懂指令集看著匯編就只能干瞪眼了,所以把ARM指令集全都記錄下來做個筆記。
可能會和WIN32的指令集有出入,比如WIN32中MOV可以把數據從內存中加載到寄存器中去,但在ARM的RISC結構中,MOV只能將數據從寄存器移動到寄存器,WIM32的看小甲魚的視頻。說白了X86是復雜指令集(CISC),ARM是精簡指令集(RISC)。
復雜指令集是將很多操作集成起來,精簡是可以很細節的去處理。
51的看劉健老師
ARM匯編初學者視頻
ARM指令集
ARM指令是32位的,而Thumb指令時16位的。
如果在1K的存儲空間中,可以放32條ARM指令,就可以放64條Thumb指令,因此在存放Thunb指令時,代碼密度高。
| MOV | 移動 |
| ADD | 加 |
| SUB | 減 |
| RSB | 反減 |
| CMP | 比較 |
| TST | 測試 |
| AND | 邏輯與 |
| EOR | 邏輯或 |
| LSL | 邏輯左移 |
| ASR | 算術右移 |
| MUL | 有符號長乘 |
| SMUL | 乘 |
| SMLAL | 有符號長累乘 |
| MSR | 移入狀態寄存器 |
| B | 分支 |
| BX | 分支與交換 |
| LDR | 載入字 |
| LDRH | 載入半字 |
| LDRB | 載入字節 |
| LDRSH | 載入有符號半字 |
| LDRSB | 載入有符號字節 |
| LDM | 載入乘 |
| LDRBT | 轉化載入寄存器字節 |
| LDRT | 轉化載入寄存器 |
| MCR | 移入協處理器 |
| LDC | 協處理器數據處理 |
| MVN | 移非 |
| ADC | 帶進位加 |
| SBC | 帶進位減 |
| RSC | 帶進位反減 |
| CMN | 比較取反 |
| TEQ | 測試等價 |
| BIC | 位清零 |
| ORR | 邏輯 ( 包括 ) 或 |
| MLA | 累乘 |
| UMULL | 無符號長乘 |
| UMLAL | 無符號長累乘 |
| MRS | 由狀態寄存器移出 |
| BL | 分支與鏈接 |
| SWI | 軟件中斷 |
| STR | 恢復字 |
| STRH | 恢復半字 |
| STRB | 恢復字節 |
| STRBT | 轉化保存寄存器字節 |
| STRT | 轉化保存寄存器 |
| STM | 多路保存 |
| SWPB | 交換字節 |
| MRC | 由協處理器移出 |
| STC | 由協處理器保存 |
Thumb指令集
PS:和C不同,在匯編中可不區分大小寫。
| MOV | 移動 |
| ADD | 加 |
| SUB | 減 |
| CMP | 比較 |
| TST | 測試 |
| AND | 邏輯與 |
| EOR | 邏輯或 |
| LSL | 邏輯左移 |
| ASR | 算術右移 |
| MUL | 乘 |
| B | 分支 |
| BX | 分支與交換 |
| LDR | 載入字 |
| LDRH | 載入半字 |
| LDRB | 載入字節 |
| LDRSH | 載入有符號半字 |
| LDMIA | 載入乘 |
| PUSH | 將寄存器推入堆棧 |
| MVN | 移非 |
| ADC | 帶進位加 |
| SBC | 帶進位減 |
| CMN | 比較取反 |
| NEG | 去反 |
| BIC | 位清零 |
| ORR | 邏輯 ( 包括 ) 或 |
| LSR | 邏輯右移 |
| ROR | 右轉 |
| BL | 分支與鏈接 |
| SWI | 軟件中斷 |
| STR | 保存字 |
| STRH | 保存半字 |
| STRB | 保存字節 |
| LDRSB | 載入有符號字節 |
| STMIA | 多路保存 |
| PUSH 將寄存器推入堆棧 POP | 將寄存器推出堆棧 |
Thumb不是完整的指令集
Thumb是ARM 指令集的一個子集
Thumb指令可以看做是ARM指令壓縮形式的子集,是針對代碼密度【1】的問題而提出的,它具有16為的代碼密度。Thumb不是一個完整的體系結構,不能指望處理程序只執行Thumb指令而不支持ARM指令集。因此,Thumb指令只需要支持通用功能,必要時,可借助完善的ARM指令集,例如:所有異常自動進入ARM狀態。
在編寫Thumb指令時,先要使用偽指令CODE16聲明,而且在ARM指令中要使用BX指令跳轉到Thumb指令,以切換處理器狀態。編寫ARM指令時,可使用偽指令CODE32聲明。
Thumb 指令集分為:
- 分支指令
- 數據處理指令
- 載入與保存指令
- 批量載入與保存指令
- 異常產生指令
Thumb模式下,R0~R7八個通用功能寄存器有效。與執行ARM指令時的R0~R7相同。 某些 Thumb 指令還訪問程序計數器 (ARM 寄存器 15)、鏈接寄存器 (ARM 寄存器 14) 及
堆棧指針 (ARM 寄存器 13)。其他指令對 ARM 寄存器 8 ~ 15 的訪問有所限制。
簡單的指令集操作
mov ax,18 ; 將18送入AX ax=18 mov ah,78 ;將78送入AH ah=78 add ax,8 ;將寄存器AX中的數值加上8 ax+=8 LDR R0,0x1234 ;將0x1234這個地址存放到R0中初學匯編,內容僅為筆記和參考。
總結
以上是生活随笔為你收集整理的【ARM汇编】ARM 指令集和Thumb 指令集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kuangbin字典树
- 下一篇: 纪念音视频界前辈-雷霄骅