大二的時候學了stm32書上一直說他是arm指令集cortex-m3微構架,上微機原理時老師又講了什麼x86指令集,天天寫彙編更是把我搞得暈頭轉向,當時一直有個疑問
寫51用的彙編和stm32的彙編,x86的彙編,他們寫起來有些形似,但是仔細看卻用以下不同的地方,有時連源運算元和目的運算元的位置都不一樣,還會有一些名字不一樣
的指令,同樣是組合語言差距怎麼就那麼大捏。
現在仔細想想他們到底是些什麼東西。
說起指令集就不得不說與他密切相關的微構架,中國為什麼一直要搞自己的cpu但一直搞不出來捏,其實也不能光說積體電路不行,另外乙個主要原因就是沒有自己的指令
集。「漢芯」就不說了純屬改logo;「龍芯」是用的mips指令集,不過用的是自己的微構架,其實這已經是我國電子事業的進步了。
先說指令集,以下是當今幾個盛興的指令集。
x86構架,主要是應用於電腦cpu,主要應用公司是intel和amd。
arm構架,是全球銷量最大的,主要應用於手機,主要廠商為:高通,ti,東芝,三星。
mips構架,和arm構架應用領域重疊。
power構架,主要公司ibm,freescale,處於衰落。
c6000構架,應用於dsp,主要廠商ti。
構架不同就會引起彙編的不同,這就解答了前面我我的疑問,構架不同引起他們的運算元個數不同,運算元順序不同,儲存方式不同,定址方式等的不同,其中各有優劣,
也有他們各自所適合的領域。
不過好的指令集應該具有以下特點:相容性,易實現,易程式設計,高效能。
下面說一下微構架,他對處理器至關重要,主要影響他的效率,速度。
先說流水線,最經典的是五級流水線,dsp具有更深的流水線,有流水線就存在冒險,冒險分為:結構冒險,資料冒險和控制冒險。
然後是分支**,所謂分支就是程式遇到判斷是有可能會發生跳轉,開始沒有執行到這裡的時候處理器並不知道會不會發生跳轉,這樣由於流水線的原因就必須**一條路來
執行,如果**錯誤那麼各級流水線就都不能用了,要重新開始流水線。所以,這個**演算法就有講究了,一般是用2位**,如果發生跳轉就加一加到3為止,如果不跳轉就
減一減到零為止,當計數器為0,1時,就**分支不執行,當為2,3時**分支執行。
亂序也是很重要的一點,什麼情況下能亂序,就是在指令之間沒用相關性的時候才能亂序,去相關性。
處理器並行設計,指令並行,資料並行,執行緒並行
ARM指令集 協處理器指令
arm 微處理器可支援多達 16 個協處理器,用於各種協處理操作,在程式執行的過程中,每個協處理器只執行針對自身的協處理指令,忽略 arm 處理器和其他協處理器的指令。arm 的協處理器指令主要用於 arm 處理器初始化 arm 協處理器的資料處理操作,以及在arm 處理器的暫存器和協處理器的暫存器...
ARM微處理器的指令集
跳轉指令 資料處理指令 程式狀態暫存器 psr 處理器 載入 儲存指令 協處理器指令 異常產生指令 adc 帶進製加法指令 add 加法指令 and 邏輯與指令 b 跳轉指令 bic 位清零指令 bl 帶返回的跳轉指令 blx 返回和狀態跳轉指令 bx 帶狀態切換的跳轉指令 cdp 協處理器資料操作...
架構 處理器 指令集與組合語言
常見的處理器架構 x86 arm power pc mips。x86是基於複雜指令集 cisc 的處理器架構。arm power pc mips是基於精簡指令集 risc 的處理器架構。所以,x86 arm power pc mips既有指令集,也有相應的處理器架構。86處理器 arm處理器 pow...