對指令集的一點理解

指令集分兩種:複雜指令集計算機(Complex Instruction Set Computer CISC)、精簡指令集計算機(Reduced Instruction Set Computer RISC)。複雜指令集包含應用程序中不常用的特定指令;而精簡指令集只包括程序中常用的指令,特殊操作以子程序的方式實現。
CISC的代表就是X86架構的CPU,RISC的CPU包括:ARM、PowerPC等。
指令集可以理解成一種規範:(彙編 –> 機器碼 的這種“翻譯規則”) + (CPU執行機器碼的邏輯電路) = 指令集。指令集中的每一條指令對應着一條彙編指令和固定的實現電路。芯片內部其實都是電路,指令集只不過是對這些電路的功能進行抽象,然後對上層表現指令。故在同等製造水平上相比較複雜指令集來說,精簡指令集可以簡化處理器的結構,可以設計功能更復雜的CPU。
例如:
在CISC架構的CPU上,乘法運算指令:MUL ADDRA, ADDRB
這條指令可以將ADDRA和ADDRB中的數相乘並將結果儲存在ADDRA中。其中將ADDRA, ADDRB中的數據讀入寄存器,相乘和將結果寫回內存的操作全部依賴於CPU中設計的邏輯來實現。這種架構會增加CPU結構的複雜性和對CPU工藝的要求,但對於編譯器的開發十分有利。比如上面的例子,C程序中的a*=b就可以直接編譯爲一條乘法指令。
RISC架構要求軟件來指定各個操作步驟。上面的例子如果要在RISC架構上實現,將ADDRA, ADDRB中的數據讀入寄存器,相乘和將結果寫回內存的操作都必須由軟件來實現,即:
MOV A, ADDRA;
MOV B, ADDRB;
MUL A, B;
STR ADDRA, A。
這種架構可以降低CPU的複雜性以及允許在同樣的工藝水平下生產出功能更強大的CPU,但對於編譯器的設計有更高的要求。
上例轉自知乎。
總結:程序語言最後生成機器碼的過程(以C爲例):C源程序在各個CPU都是兼容的,C語言先經過編譯翻譯成彙編語言,而彙編語言和CPU就相關了,彙編語言就是由指令集中的指令組成,不同的CPU架構對應的指令集不同,因而編譯後的彙編程序就不同。編譯這個過程由編譯器完成,所以不同的硬件平臺編譯器有差別,也如上例所說CISC的編譯器開發比RISC相對簡單一點。彙編語言再經過彙編後編程機器語言,機器語言是CPU可以執行的。簡單點說:機器語言其實就是各種0/1信號,它輸入到CPU內部的邏輯電路,經過邏輯電路處理後的結果就是輸出。所以指令集就是一種規則,把我的CPU硬件基本功能抽象出來成爲指令,你高級語言需按照我的規則翻譯成對應我這個指令集的彙編語言,彙編語言也要按照我的規則生成機器碼。

錯誤的地方還請大家批評指正

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章