正文

指令集體系結構(7)

大話處理器 作者:萬木楊


 

3.5.4  大小端——小問題,大折騰

在不同的處理器中,相同的數(shù)據在存儲器中的存儲格式可能不一樣。如下圖所示,數(shù)值0x12345678在大端字節(jié)序和小端字節(jié)序處理器的存儲器中存儲形式分別為:

大端、小端這兩個術語來源于小說《格利弗游記》(Gulliver’s Travels)。小人國里的小人們分成了兩大陣營:一派敲破雞蛋“大”的一頭吃雞蛋,一派敲破雞蛋“小”的一頭吃雞蛋。其實怎么吃都沒有關系,只是習慣不同。

Intel的x86處理器使用小端字節(jié)序,很多處理器既可以配置為大端,又可以配置為小端,在不同字節(jié)序計算機之間通信時,就需要注意數(shù)據格式的轉換。

3.5.5  指令類型——我們需要哪些指令

處理器要完成計算的任務,需要具備哪些指令呢?我們用如下這個計算為例:

xi為輸入信號,coeffi為濾波器系數(shù)。要讓處理器完成這些工作,首先需要兩個運算:乘法和加法。與此類似的還有移位、減法等指令,這些指令被稱為算術邏輯指令。

除了做計算外,處理器還要能實現(xiàn)循環(huán),上面這個計算循環(huán)了count次。循環(huán)是由跳轉指令來實現(xiàn)的,跳回去執(zhí)行就能實現(xiàn)循環(huán)。如右圖          所示。

循環(huán)需要在一定條件下跳出,否則就成死循環(huán)了,條件跳轉指令能完成這個功能。條件跳轉指令在一定條件下實現(xiàn)跳轉,它能實現(xiàn)分支功能,例如:“如果明天下雨,我就在家,否則,我就出去玩。”這個功能就可以用條件跳轉指令完成。跳轉指令也稱為控制指令。

解決了這些基本的運算問題后,還剩下一個問題,那就是:操作的數(shù)據在哪?操作的數(shù)據都放在存儲器中。在x86指令集中,算術邏輯指令的操作數(shù)可以是寄存器,也可以是存儲器,而在其他的RISC指令集中,算術邏輯指令的操作數(shù)只能是寄存器,因此需要先使用導入(load)指令將存儲器中的數(shù)據導入到寄存器中,運算完成后,再用導出(store)指令將寄存器中的數(shù)據導出到存儲器中。這類指令稱為數(shù)據傳送指令。不同的指令集,指令命名、寄存器命名不一樣,不過基本規(guī)則類似。

導入、導出指令的基本格式如下:

load  *A1,  A2;將存儲器某地址處的值導入到寄存器A2中,該存儲器地址記錄在寄存器A1中

store  A3,  *A4;將寄存器A3的值導出到存儲器某地址處,該存儲器地址記錄在寄存器A4中

有了這3類指令(算術邏輯指令,控制指令,數(shù)據傳送指令),處理器就能完成各種復雜的運算。

3.5.6  尋址方式——千萬里,我追尋著你

指令的操作數(shù)可以是一個具體的值,如100(稱為立即數(shù)),也可以是寄存器,也可以是存儲器。真實參與運算的值,到底是立即數(shù),還是在寄存器中,還是在存儲器中,在存儲器中的哪個位置,這些就要靠尋址方式來指定。以RISC指令集的代表MIPS為例:

add  $s1,$s2,100;源操作數(shù)是寄存器$s2和立即數(shù)100,稱為立即數(shù)尋址

add  $s1,$s2,$s2;源操作數(shù)是兩個寄存器,稱為寄存器尋址

lw   $s1,100($s2);存儲器地址為100+$s2,將這個地址處的值導入到寄存器$s1中,稱為存 儲器尋址

存儲器尋址又會分成更多的類型,RISC指令集的尋址方式較為簡單,x86的尋址方式則非常復雜,不過x86復雜的尋址方式也會在內部轉化為類似RISC的多條簡單微操作。

3.5.7  總結

指令集是處理器的臉面,就如同容貌對于人的重要性一樣,程序員在為處理器編寫程序時,指令集就是他(她)們所看到的處理器的容貌。好的指令集,應該具備如下特征:

兼容性:新一代處理器的指令集要兼容上一代的指令集。

易實現(xiàn):指令所完成的功能,在處理器硬件上要容易實現(xiàn)。

易編程:編程人員容易使用該指令集進行編程。

高性能:指令集設計合理,以使得程序的執(zhí)行效率最高。


上一章目錄下一章

Copyright ? 讀書網 ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網安備 42010302001612號