Thumb扩展
Thumb擴展
ARM處理器已在嵌入式系統,手持計算機和其系統中得到了最大的應用,在這些系統中,系統對使用有限資源進行大量工作的要求很高。Thumb擴展是為解決資源消耗中的某些方面而創建的,已成為當今幾乎所有ARM芯片上的標準擴展。
小型系統上受限的資源之一是指令存儲器。有限的指令存儲器限制了可以在處理器上運行的程序的大小,因此想尋找減小代碼大小的方法。當可以找到編譯優化時,編譯時優化是實現此目標的一種顯而易見的方法。增大指令集的大小是另一種方法,但這通常會導致整個板上各個指令的大小增加,這將導致存儲指令所需的存儲量相應增加。可能無法通過減少編寫程序所需的指令數量來抵消。
正在尋找的質量稱為代碼密度。希望以某種方式完成同樣數量的工作,但使程序占用更少的空間。這是Thumb擴展的用處。Thumb嘗試通過允許使用大(32位)指令集,同時提供可以完成大部分工作的備用小(16位)指令集來獲得兩全其美的效果。而僅占用一半的空間。稱此概念為“代碼壓縮”,其思想是在運行之前將小型Thumb指令“解壓縮”為等效的全尺寸32位ARM指令。
Thumb指令的外觀如何,與32位指令相比如何?
下圖顯示了如何將ADD指令從Thumb轉換為ARM的示例。注意,立即操作數(Thumb中的8位)是如何用等于ARM的零填充的。還要注意,add指令在解壓縮時會采用一個附加的操作數。
較小的指令意味著必須具有較小的操作碼,并且必須具有更少或更少(或兩者都有)的操作數。Thumb通過將其大部分指令限制為使用8個通用寄存器來代替通常的15個寄存器,從而部分確保了較小的操作數。一些指令可以訪問完整的寄存器集(例如MOV),以解決較小的一些限制。寄存器組。
ARM如何知道正在運行的指令是Thumb指令還是常規ARM指令?
ARM芯片包含一個特殊的狀態位,該位告訴CPU是期望壓縮的Thumb指令還是標準的ARM指令。該位由其自己的指令BX切換,每次程序員或編譯器希望在Thumb模式和標準ARM模式之間切換時,都必須將其插入代碼中。顯而易見的結果是,在模式之間進行切換會產生一些開銷,因此切換到Thumb可能不是一個好主意,除非可以為節省兩條以上的等??效ARM代碼指令。
總結
- 上一篇: 不是都需要ARM吗?
- 下一篇: ARM系列处理器和架构