THUMB指令集
humb指令集可以看作是ARM指令壓縮形式的子集,它是為減小代碼量而提出,具有16bit的代碼密度。Thumb指令體系并不完整,只支持通用功能,必要時仍需要使用ARM指令,如進入異常時。其指令的格式與使用方式與ARM指令集類似,而且使用并不頻繁,Thumb指令集作一般了解。
在編寫Thumb指令時,先要使用偽指令CODE16聲明,編寫ARM指令時,則可使用CODE32偽指令聲明。
1、Thumb指令集沒有協處理器指令、信號量指令、以及訪問CPSR或SPSR的指令,沒有乘加指令及64位乘法指令等,且指令的第二操作數受到限制;
2、大多數的Thumb數據處理指令采用2地址格式;
3、除了跳轉指令B有條件執行功能之外,其他指令均為無條件執行,而且分支指令的跳轉范圍有更多限制;
4、數據處理指令是對通用寄存器進行操作,在大多數情況下,操作的結果放入其中一個操作數寄存器中,而不是放入第3個寄存器中;訪問寄存器R8~R15受到一定的限制,除MOV、ADD指令訪問R8~R15外,其他數據處理指令總是更新CPSR中ALU狀態標志,訪問寄存器R8~R15的Thumb數據處理指令不能更新CPSR中的ALU狀態指示。
5、Thumb狀態下,單寄存器加載和存儲指令只能訪問寄存器R0~R7;
6、LDM、STM指令可以將任何范圍為R0~R7的寄存器子集加載或存儲;
7、PUSH、POP指令使用棧寄存器R13作為基址堆棧操作。
8、The Thumb instruction set format:
在編寫Thumb指令時,先要使用偽指令CODE16聲明,編寫ARM指令時,則可使用CODE32偽指令聲明。
1、Thumb指令集沒有協處理器指令、信號量指令、以及訪問CPSR或SPSR的指令,沒有乘加指令及64位乘法指令等,且指令的第二操作數受到限制;
2、大多數的Thumb數據處理指令采用2地址格式;
3、除了跳轉指令B有條件執行功能之外,其他指令均為無條件執行,而且分支指令的跳轉范圍有更多限制;
4、數據處理指令是對通用寄存器進行操作,在大多數情況下,操作的結果放入其中一個操作數寄存器中,而不是放入第3個寄存器中;訪問寄存器R8~R15受到一定的限制,除MOV、ADD指令訪問R8~R15外,其他數據處理指令總是更新CPSR中ALU狀態標志,訪問寄存器R8~R15的Thumb數據處理指令不能更新CPSR中的ALU狀態指示。
5、Thumb狀態下,單寄存器加載和存儲指令只能訪問寄存器R0~R7;
6、LDM、STM指令可以將任何范圍為R0~R7的寄存器子集加載或存儲;
7、PUSH、POP指令使用棧寄存器R13作為基址堆棧操作。
8、The Thumb instruction set format:
轉載于:https://www.cnblogs.com/Mr-Shadow/archive/2013/03/09/2951532.html
總結
- 上一篇: portable-config-mave
- 下一篇: 8086的堆栈组织