ARM指令集發展概述

2021-07-30 23:44:36 字數 1743 閱讀 9373

指令集的設計是處理器結構中最重要的乙個部分,用arm的術語稱之為isa(instruction set architecture)。所有的arm cortex-m 處理器均基於thumb-2技術,在一種工作狀態中允許混合使用16位和32位指令。這一點與傳統的arm處理器如arm7tdmi不同。為了更好地理解arm處理器中不同指令集的差異,接下來我們簡單回顧一下arm指令集的發展歷史。

早期的arm處理器(在arm7tdmi處理器之前)僅支援32位arm指令集。在接下來的數年間,arm架構從版本1發展到版本4,arm指令集也隨之不斷發展。arm指令集功能強大,大多數指令支援條件執行,同時提供了很好的效能。但是與8位和16位架構的處理器相比,32位的arm指令集需要更多的儲存器空間。隨著手機等裝置對32位處理器需求的不斷增加,功耗和成本都變得十分關鍵。如何減少程式占用空間大小的問題亟待解決。

在2023年,arm推出了arm7tdmi處理器,開始支援一種新的工作狀態,可以執行一種新的16位指令集。這種16位指令集稱為thumb指令集(thumb即大拇指,一語雙關,表明它比arm指令集占用空間更小)。arm7tdmi可以工作在arm狀態(預設情況下),也可以工作在thumb狀態。正常工作時,處理器可以在軟體的控制下在arm狀態和thumb狀態間切換。程式的一部分利用arm指令來編譯,從而獲得更高的效能,其餘部分用thumb指令編譯,從而獲得更高的**密度,減少程式占用的空間。利用這種實現機制,應用程式就可以在縮緊**大小的同時獲得較高的效能。在有些情況下,thumb**可以比相同條件下的arm**減少30%的程式空間。   

在arm7tdmi處理器的設計中,利用一種對映功能可以將thumb指令翻譯成arm指令,之後進行解碼。這樣只需要乙個指令解碼器即可。arm和thumb兩種工作狀態在新的arm處理器中仍然支援,例如cortex-a處理器系列及cortex-r處理器系列。雖然thumb指令集能夠提供arm指令集所能提供的大多數功能,但是它仍然存在一些限制。例如對可操作的暫存器,定址模式都存在限制,用於資料或位址操作的立即數範圍也有所減少。             

2023年,arm推出了thumb-2技術,將16位指令集和32位指令集整合到一種工作狀態。thumb-2指令集是thumb指令集的超集。許多指令是32位的,因此可以像arm指令集一樣實現相應操作,但是它與arm指令集有不同的指令編碼方式。第乙個支援thumb-2技術的處理器是arm1156t-2處理器。 

在2023年,arm發布了cortex-m3處理器。cortex-m3處理器整合thumb-2技術,僅支援thumb工作態。與早期的arm處理器不同,cortex-m3處理器不支援arm指令集。之後更多的cortex-m處理器發布,為面向不同市場分別採用了thumb指令集的不同指令範圍。因為cortex-m3處理器不支援arm指令集,所以向後不能與傳統的arm處理器如arm7tdmi相容。換句話說,arm7tdmi上執行的二進位制映象檔案不能在cortex-m3處理器上執行。cortex-m3處理器(armv7-m)中的thumb-2指令集是arm7tdmi ( ar m v4t)處理器中的thumb指令集的超集,許多arm指令可以移植到等價的32位thumb指令,從而使應用的移植更加方便。

arm指令集仍在不斷發展當中。2023年,arm發布了armv8架構。它包含了一些新的指令集用於64位操作。當前armv8架構僅限於cortex-a處理器,cortex-m處理器暫不包含這種架構。

ARM 指令集 比較指令

譯註 cmp 和 cmp 是算術指令,teq 和 tst 是邏輯指令。把它們歸入一類的原因是它們的 s 位總是設定的,就是說,它們總是影響標誌位。compare negative cmn status op 1 op 2 cmn同於cmp,但它允許你與小負值 運算元 2 的取負的值 進行比較,比如難...

ARM指令集 SWP指令

arm指令集 swp指令 swp和swpb是arm指令集中對儲存單元的原子操作,即對儲存單元的一次讀和一次不可被分割。swp和swpb分別完成儲存器和暫存器之間 乙個字 32bit 和乙個位元組 8bit 的資料交換。swp指令主要是完成arm體系架構處理器的同步操作,在linux作業系統中實現訊號...

Arm指令集 偽指令

目錄 arm指令集 跳轉指令 資料處理 程式狀態暫存器傳輸指令 load srote指令 協處理器指令 異常中斷產生指令 gnu arm偽指令 資料定義 彙編控制 其他指令 blx register string abcd efgh hello asciz qwer sun world ascii ...