微處理機 Microprocessor (100上) ARM 內核嵌入式SOC原理 Thumb指令集 2011/10/13
What is Thumb ARM可以使用兩套指令集 –Thumb狀態:執行16位元大小的Thumb指令。 –ARM狀態:執行32位元大小的ARM指令。 –Thumb狀態:執行16位元大小的Thumb指令。 當這兩種狀態在程式中交換使用時,並不會去改變處理器的模式或是暫存器之內含值。
為什麼要用 Thumb 指令碼位元數更小,更適合嵌入式應用。 使用Thumb指令可以省下記憶體空間,可以儲存比ARM指令更多的指令。 在不需要32bit運算場合時,使用Thumb指令可以有更好的效率。
Thumb 指令限制 Thumb不是一個完整的體系結構。 Thumb只支援一般的功能,無法支援全部功能。 一般暫存器僅能使用Lo暫存器(R0~R7)。 大部分的Thumb指令皆會設定CPSR內的狀態碼。
Thumb VS ARM 效能比較 Thumb所需的存儲空間約為ARM的60%~70% Thumb使用的指令數比ARM多約30%~40%
Thumb VS ARM (cont.) 系統的性能有較高要求 系統的成本及功耗有較高要求 若兩者結合使用,充分發揮其各自的優點,會取得更好的效果
如何進入Thumb
Thumb編成模型
Thumb分歧指令 B<cond> <label> ; format 1 - Thumb target B <label> ; format 2 - Thumb target BL <label> ; format 3 - Thumb target BLX <label> ; format 3a - ARM target B{L}X Rm ; format 4 - ARM or Thumb target
分歧指令 二進制編碼
低8個通用暫存器(r0~r7)
低8個通用暫存器(r0~r7)
高8個暫存器(r8~r15)
Thumb單暫存器資料傳送指令 <op> Rd, [Rn, #<#off5>] ; <op> = LDR,LDRB,STR,STRB ; <op> = LDRH,STRH <op> Rd, [Rn, Rm] ; ; <op> = LDR,LDRH,LDRSH,LDRB,LDRSB,STR,STRH,STRB LDR Rd, [PC, #<#off8>] <op> Rd, [SP, #<#off8>] ; <op> = LDR,STR
Thumb多暫存器傳送指令 LDMIA Rn!, {<reg list>) <reg list> is a list of registers and register ranges from r0 to r7. –EX:{R1-R7}, {R2, R5, R6} LDMIA Rn!, {<reg list>) STMIA Rn!, {<reg list>} POP {<reg list>{, PC}} ;將堆疊內的資料取出到reg list{,PC}的暫存器,並更新堆疊指標 PUSH {<reg list>{, LR}} ;將reg list{, LR}的暫存器堆入堆疊中,並更新堆疊指標
實習問題 參考投影片11~15 Thumb指令 實習一: 使用Thumb 語法,將(6+8)X4+(32/16)=?用組合語言表示出來, 將運算結果指定 存放在R7暫存器中 實習二: 使用Thumb 語法,利用迴圈寫出20+21+22+23+24+25 = ? 將運 算結果指定存放在R7 暫存器中 實習三: 使用Thumb 語法,比較79 500 200 30 40 的大小,將最大的結 果存入R7暫存器中 作完請找助教檢查