復(fù)雜指令集的發(fā)展史
CISC早期的計算機部件比較昂貴,主頻低,運算速度慢。為了提高運算速度,人們不得不將越來越多的復(fù)雜指令加入到指令系統(tǒng)中,以提高計算機的處理效率,這就逐步形成復(fù)雜指令集計算機體系。為了在有限的指令長度內(nèi)實現(xiàn)更多的指令,人們又設(shè)計了操作碼擴展。然后,為了達到操作碼擴展的先決條件——減少地址碼,設(shè)計師又發(fā)現(xiàn)了各種尋址方式,如基址尋址、相對尋址等,以最大限度地壓縮地址長度,為操作碼留出空間。Intel公司的X86系列CPU是典型的CISC體系的結(jié)構(gòu),從最初的8086到后來的Pentium系列,每出一代新的CPU,都會有自己新的指令,而為了兼容以前的CPU平臺上的軟件,舊的CPU的指令集又必須保留,這就使指令的解碼系統(tǒng)越來越復(fù)雜。CISC可以有效地減少編譯代碼中指令的數(shù)目,使取指操作所需要的內(nèi)存訪問數(shù)量達到最小化。此外CISC可以簡化編譯器結(jié)構(gòu),它在處理器指令集中包含了類似于程序設(shè)計語言結(jié)構(gòu)的復(fù)雜指令,這些復(fù)雜指令減少了程序設(shè)計語言和機器語言之間的語義差別,而且簡化了編譯器的結(jié)構(gòu)。
為了支持復(fù)雜指令集,CISC通常包括一個復(fù)雜的數(shù)據(jù)通路和一個微程序控制 CISC器。微程序控制器由一個微程序存儲器、一個微程序計數(shù)器(MicroPC)和地址選擇邏輯構(gòu)成。在微程序存儲器中的每一個字都表示一個控制字,并且包含了一個時鐘周期內(nèi)所有數(shù)據(jù)通路控制信號的值。這就意味著控制字中的每一位表示一個數(shù)據(jù)通路控制線的值。例如,它可以用于加載寄存器或者選擇ALU中的一個操作。此外每個處理器指令都由一系列的控制字組成。當(dāng)從內(nèi)存中取出這樣的一條指令時,首先把它放在指令寄存器中,然后地址選擇邏輯再根據(jù)它來確定微程序存儲器中相應(yīng)的控制字順序起始地址。當(dāng)把該起始地址放入MicroPC中后,就從微程序內(nèi)存中找到相應(yīng)的控制字,并利用它在數(shù)據(jù)通路中把數(shù)據(jù)從一個寄存器傳送到另一個寄存器。由于MicroPC中的地址并發(fā)遞增來指向下一個控制字,因此對于序列中的每個控制器都會重復(fù)一遍這一步驟。最終,當(dāng)執(zhí)行完最后一個控制字時,就從內(nèi)存中取出一條新的指令,整個過程會重復(fù)進行。由此可見,控制字的數(shù)量及時鐘周期的數(shù)目對于每一條指令都可以是不同的。因此在CISC中很難實現(xiàn)指令流水操作。另外,速度相對較慢的微程序存儲器需要一個較長的時鐘周期。由于指令流水和短的時鐘周期都是快速執(zhí)行程序的必要條件,因此CISC體系結(jié)構(gòu)對于高效處理器而言不太合適的。
在計算機指令系統(tǒng)的優(yōu)化發(fā)展過程中,出現(xiàn)過兩個截然不同的優(yōu)化方向:CISC技術(shù)和RISC技術(shù)。CISC是指復(fù)雜指令系統(tǒng)計算機(Complex Instruction Set Computer);RISC是指精簡指令系統(tǒng)計算機(Reduced Instruction Set Computer)。這里的計算機指令系統(tǒng)指的是計算機的最低層的機器指令,也就是CPU能夠直接識別的指令。隨著計算機系統(tǒng)的復(fù)雜,要求計算機指令系統(tǒng)的構(gòu)造能使計算機的整體性能更快更穩(wěn)定。最初,人們采用的優(yōu)化方法是通過設(shè)置一些功能復(fù)雜的指令,把一些原來由軟件實現(xiàn)的、常用的功能改用硬件的指令系統(tǒng)實現(xiàn),以此來提高計算機的執(zhí)行速度,這種計算機系統(tǒng)就被稱為復(fù)雜指令系統(tǒng)計算機,即Complex Instruction Set Computer,簡稱CISC。
另一種優(yōu)化方法是在20世紀(jì)80年代才發(fā)展起來的,其基本思想是盡量簡化計算機指令功能,只保留那些功能簡單、能在一個節(jié)拍內(nèi)執(zhí)行完成的指令,而把較復(fù)雜的功能用一段子程序來實現(xiàn),這種計算機系統(tǒng)就被稱為精簡指令系統(tǒng)計算機.即Reduced Instruction Set Computer,簡稱RISC。RISC技術(shù)的精華就是通過簡化計算機指令功能,使指令的平均執(zhí)行周期減少,從而提高計算機的工作主頻,同時大量使用通用寄存器來提高子程序執(zhí)行的速度。從計算機誕生以來,人們一直沿用CISC指令集方式。早期的桌面軟件是按CISC設(shè)計的,并一直沿用。桌面計算機流行的x86體系結(jié)構(gòu)即使用CISC。微處理器(CPU)廠商一直在走CISC的發(fā)展道路,包括Intel、AMD,還有其他一些現(xiàn)在已經(jīng)更名的廠商,如TI(德州儀器)、Cyrix以及VIA(威盛)等。CISC架構(gòu)的服務(wù)器主要以IA-32架構(gòu)(IntelArchitecture,英特爾架構(gòu))為主,而且多數(shù)為中低檔服務(wù)器所采用。