正文

指令集體系結構(1)

大話處理器 作者:萬木楊


 

2009年6月15日,MIPS公司網(wǎng)站發(fā)布新聞,中國科學院計算所取得MIPS32和MIPS64 Architecture的授權,用于龍芯的開發(fā)和商用。在處理器領域,Architecture指處理器的指令集體系結構,Microarchitecture指處理器的微架構,也就是內(nèi)部實現(xiàn)的結構。這則新聞翻譯一下就是:龍芯采用了MIPS的指令集。

處理器是電子、信息領域最關鍵、最底層的技術,一直被國外把持著,龍芯作為我國自主研發(fā)的處理器,牽動著各方面的神經(jīng),我們都希望自己的處理器能完全自我創(chuàng)新,不被外界控制,然而,龍芯還是不得不使用了現(xiàn)存的指令集,這歸根到底,還是指令集的威力太強大,它的強大在于它背后是一個生態(tài)鏈,而不是一家公司。

指令集就像語言(漢語、英語等)一樣,定義一套語言其實并不難,難的是你要讓別人去接受你定義的語言。如果重新使用一套指令集,與之配套的編譯器、操作系統(tǒng)、各種應用軟件也都要重新編寫,這樣的工作量和難度,是無法想象的,因此使用現(xiàn)存的指令集及軟件,也是無奈的選擇。3.1  指令集是什么

3.1.1  從處理器編程模型談起——一切從模型開始

處理器的主要任務就是計算,如C = A + B,人們一看就知道這句話是什么意思,但是處理器只能認識0和1,不認識這句話,而且處理器更不知道C = A + B和C = B + A是一個意思。因此,我們要定義一套規(guī)則讓計算機能夠理解人類的意圖。

我們將A、B、C稱為操作數(shù),“+”稱為操作碼。處理器中做運算的單元稱為ALU(算術邏輯單元),操作碼代表了ALU中的一個運算。操作數(shù)存儲在存儲器(Memory)中,由于從存儲器中訪問數(shù)據(jù)很慢,因此在離ALU很近的地方放置了一些寄存器(Registers),這樣中間計算結果就可以存儲在寄存器中,不用每次都經(jīng)過存儲器。

一個基本的C = A + B操作,可以分解為下面這些小的步驟來完成:

load  R3,  #0; 從內(nèi)存地址0處取A這個值,放在R3中

load  R2,  #1; 從內(nèi)存地址1處取B這個值,放在R2中

add  R0, R3, R2; 把R3和R2相加,結果存放到R0中

store  R0,  #2; 把R0中的值存放在內(nèi)存地址2中

每行語句就是一條指令,load、add、store為操作碼,后面跟著的是操作數(shù),“;”后面為注釋,這種指令的寫法就是匯編語言的格式。處理器公司對外發(fā)布的指令集手冊,就使用匯編語言來進行描述。

由于計算機只能認識0和1這兩個數(shù)字,不認識load、add這些字,因此,這些字要被編碼為計算機能認識的格式。

我們對操作碼進行編碼,假設處理器只有4條指令,那么每條指令用2 bit即可              表示:

同樣的方法,可以對寄存器和內(nèi)存進行編碼。

這時候,我們就可以定義add這條指令在計算機中的格式:

這種經(jīng)過編碼后的指令稱之為機器語言。

處理器在讀到指令01001110時,根據(jù)指令的格式進行解碼,解出操作碼和操作數(shù),然后執(zhí)行。


上一章目錄下一章

Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號