正文

指令集體系結(jié)構(gòu)(7)

大話處理器 作者:萬木楊


 

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

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

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

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

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

處理器要完成計(jì)算的任務(wù),需要具備哪些指令呢?我們用如下這個(gè)計(jì)算為例:

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

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

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

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

導(dǎo)入、導(dǎo)出指令的基本格式如下:

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

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

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

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

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

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

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

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

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

3.5.7  總結(jié)

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

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

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

易編程:編程人員容易使用該指令集進(jìn)行編程。

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


上一章目錄下一章

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