《計算機體系結構》教學課件教案第2章 計算機指令集結構設計_第1頁
《計算機體系結構》教學課件教案第2章 計算機指令集結構設計_第2頁
《計算機體系結構》教學課件教案第2章 計算機指令集結構設計_第3頁
《計算機體系結構》教學課件教案第2章 計算機指令集結構設計_第4頁
《計算機體系結構》教學課件教案第2章 計算機指令集結構設計_第5頁
已閱讀5頁,還剩108頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第二章計算機指令集結構設計

計算機的指令集結構也稱為指令系統(tǒng),它是硬件

機器所支持的全部指令集合,它是機器語言程員

所看到的機器的最主要的屬性之一。

指令集結構設計的最基本問題是軟硬件劃分。

指令集結構設計包括確定指令格式、類型、操作

以及操作數(shù)的訪問方式等

2.1指令集結構的分類

2.1.1指令集結構分類

根據(jù)五個因素對計算機指令集結構進行分類:

(1)在CPU中操作數(shù)的存儲方法

(2)指令中顯式表示的操作數(shù)個數(shù)

⑶操作數(shù)的尋址方式

(4)指令集所提供的操作類型

⑸操作數(shù)的類型和大小

CPU中操作數(shù)的存儲方法,是各種指令集結構

之間最主要的區(qū)別所在。

I.CPU中用來存儲操作數(shù)的存儲單元主要有:

?堆棧

?累加器

?寄存器/存儲器

2.指令中的操作數(shù)可以顯式給出,也可以隱式地給出。

3.CPU對操作數(shù)的不同存取方式

CPU對操作數(shù)的不同存取方式

CPU提供的每條ALU指令顯式表示的運算結果的訪問顯式操作數(shù)的

暫存器操作數(shù)個數(shù)目的地過程

堆棧0堆棧Push/Pop

累加器1累加器Load/Store累加器

寄存器/存2/3寄存器或存Load/Store寄存器

儲器儲器或存儲器

4.根據(jù)CPU內(nèi)部存儲單元類型進行分類,可以分為:

?堆棧型指令集結構

偏?累加器型指令集結構

?通用寄存器型指令集結構

葡例C=A+B表達式在這三種類型指令集結構上的

實現(xiàn)方法。假設A、B、C均是保存在存儲器單元中,

且A和B的值在運算過程中一直被保持。

C=A+B表達式在這三種類型指令集結構上的實現(xiàn)方法

堆棧累加器寄存器寄存器

(寄存器一存儲器)(寄存器一寄存器)

PUSHALOADALOADRI,ALOADRI,A

PUSHBADDBADDR1,BLOADR2,B

ADDStoreCStoreC,R1AddR3,R1,R2

POPCStoreC,R3

三種類型指令集結構的優(yōu)缺點

指令集結優(yōu)點缺點

構類型

堆棧型是一種表示計算的堆棧不能被隨機訪問,從而很難生

簡單模型;指令短小。成有效代碼。同時,由于堆棧是瓶頸,

所以很難被高效地實現(xiàn)。

累加器型減小了機器的內(nèi)部由于累加器是唯一的暫存器,這種

狀態(tài);指令短小。機器的存儲器通信開銷最大。

寄存器型是代碼生成最一般所有操作數(shù)均需命名,且顯式表示,

的模型。因而指令比較長。

<

s

a

窗2.1.2通用寄存器型指令集結構的分類

早期的計算機中采用堆棧指令集結構和累加器指

令集結構比較多,但現(xiàn)代CPU,通用寄存器型指令

為集結構已成為指令集結構的主流,原因:

1.通用寄存器型指令集結構的主要優(yōu)點

(1)使編譯器有效地使用寄存器;

(2)在表達式求值方面,比其它類型指令集結構

具有更大的靈活性;

(3)寄存器可以用來存放變量。

?減少存儲器的通信量,加快程序的執(zhí)行速度。

(因為寄存器比存儲器快)

?可以用更少的地址位來尋址寄存器,從而可

以有效改進程序的目標代碼大小。

2.CPU需要設置多少個寄存器呢?

主要由編譯器使用寄存器的情況來決定

絳?為表達式求值保留一些寄存器

?為傳遞參數(shù)保留一些寄存器

?用剩下的寄存器來保存變量

狗3.兩種主要的指令特性能夠?qū)⑼ㄓ眉拇嫫髦噶罴Y構

(GPR)進一步細分

(1)ALU指令到底有兩個或是三個操作數(shù)?

?有三個操作數(shù)的指令:兩個源操作數(shù)

一個結果操作數(shù)

?有兩個操作數(shù)的指令:一個操作數(shù)既作為源操

作數(shù),也作為目的操作數(shù)。

(2)在ALU指令中,有多少個操作數(shù)可以用存儲器來尋

址,也即有多少個存儲器操作數(shù)?

一般來說,ALU指令有0?3個存儲器操作數(shù)。

ALU指令中,存儲器操作數(shù)個數(shù)和操作數(shù)個數(shù)的

所有可能組合,以及相應的機器實例

ALU指令中存儲器操ALU指令中操作數(shù)的機器實例

作數(shù)個數(shù)最大個數(shù)

02IBMRT-PC

3SPARC,MIPS

12PDP-10,IBM360,

Motorola68000

3IBM360的部分指令

22PDP-11,部分IBM360

指令

3

33VAX

(3)通用寄存器指令集結構進一步細分為三種類型:

?寄存器--寄存器型(R-R:register-register)

?寄存器--存儲器型(R-M:register-memory)

?存儲器--存儲器型(M-M:memory-memory)

(4)常見的三種通用寄存器型指令集結構的優(yōu)缺點

注:表中(m.n)的含義是,指令的n個操作

數(shù)中有m個存儲器操作數(shù)。

指令集結構優(yōu)點缺點

類型

簡單,指令字長固和指令中含有對存儲器操作數(shù)訪

寄存器一寄定,是一種簡單的代問的結構相比,指令條數(shù)多,因而

存器型(碼生成模型,各種指其目標代碼較大。

0,3)令的執(zhí)行時鐘周期數(shù)

相近。

可以直接對存儲器指令中的操作數(shù)類型不同。在一

寄存器一存操作數(shù)進行訪問,容條指令中同時對一個寄存器操作數(shù)

儲器型(易對指令進行編碼,和存儲器操作數(shù)進行編碼,將限制

1,2)且其目標代碼較小。指令所能夠表示的寄存器個數(shù)。由

于指令的操作數(shù)可以存儲在不同類

型的存儲器單元,所以每條指令的

執(zhí)行時鐘周期數(shù)也不盡相同。

存儲器一存是一種最緊密的編指令字長多種多樣。每條指令的

儲器型(碼方式,無需“浪費”執(zhí)行時鐘周期數(shù)也大不一樣,對存

3,3)寄存器保存變量。儲器的頻繁訪問將導致存儲器訪問

瓶頸問題。

2.2尋址技術

1.尋址方式是指令對操作數(shù)的訪問方式

?在一個計算機系統(tǒng)中,機器語言的尋址方式通常有

多種

?當前通用寄存器結構的指令集結構中所使用的一些

尋址方式

尋址方式指令實例含義

寄存器尋址AddR4,R3Regs[R4]<—Regs[R4]+Regs[R3]

立即值尋址AddR4,#3Regs[R4]—Regs[R4]+3

偏移尋址AddR4,1OO(R1)Regs[R4]<—Regs[R4]+Mem[100+Regs[RI]]

寄存器間接尋址AddR4,(RI)Regs[R4]<—Regs[R4]+Mem[Regs[RI]]

索引尋址AddR3,(RI+Regs[R3]<—Regs[R3]+Mem[Regs[Rl]+Regs[R2]]

R2)

直接尋址或絕對尋AddRI,(1001)Regs[RI]—Regs[RI]+Mem[1001]

存儲器間接尋址AddRI,@(R3)Regs[RI]<—Regs[Rl]+Mem[Mem[Regs[R3]]]

自增尋址AddRI,(R2)+Regs[RI]<—Regs[RR+Mem[Regs[R2]]

Regs[R2]<—Regs[R2]+d

自減尋址AddRI,-(R2)Regs[R2]<—Regs[R2]—d

Regs[Rl]<—Regs[RI]+Mem[Regs[R2]]

縮放尋址AddRegs[RI]—Regs[RI]+Mem[100+Regs[R2]+

RI,100(R2)[R3]Regs[R3]*d]

第寄存器尋址:變量值在寄存器中。

布「立即值尋址:常量訪問

覦偏移尋址:訪問局部變量

偏寄存器間接尋址:用指針訪問變量(指針值在

寄存器中)

索引尋址:數(shù)組訪問

直接尋址或絕對尋址:靜態(tài)變量訪問

編存儲器間接尋址:用指針訪問變量(指針值在

狗存儲器中)

自增尋址:遍歷數(shù)組,有時用于實現(xiàn)棧

結構

自減尋址:遍歷數(shù)組,有時用于實現(xiàn)棧

結構

縮放尋址:數(shù)組訪問

1.在通用寄存器指令集結構中,一般是利用尋址方

式指明指令中的操作數(shù)是一個常數(shù)、一個寄存器

操作數(shù),抑或是一個存儲器操作數(shù)。

3.尋址方式使用情況統(tǒng)計結果

(VAX指令集結構的機器:gcc、Spice和Tex基準程序)

立即值尋址方式和偏移尋址方式的使用頻率十分高。

4.各種偏移量字段大小的使用情況

寄存器一寄存器型指令集結構的機器上(MIPS)

運行SPECint92基準程序集

(compress、espresso、eqntott>gcc>li)

運行SPECfp92基準程序集

(dudoc>ear、hydro2d>mdljdp2>su2cor)

X軸的標記是對偏移量大小進行10g2(?)運算所

得,

也就是偏移量字段的位數(shù)。

程序所使用的偏移量大小分布十分廣泛;

較小的偏移量和較大的偏移量均占有相當大的比例;

將偏移量字段的大小設置為12?16位。這種長度可

葡以支持上述75%-99%基于偏移尋址方式的數(shù)據(jù)訪

問中偏移量大小的表示。

5.在一種Load/Store型指令集結構上,一些指令使用

立即值尋址方式的頻率。

□整型平均□浮點平均

比較指令和ALU指令使用立即值尋址方式十分頻繁。

6.不同立即值大小的使用分布情況

將立即值的大小設置為8?16位,可以覆蓋所有

使用立即值尋址方式指令的50%?80%。

有..in「

2.3指令集結構的功能設計

1.指令集中操作的分類

操作類型實例

算術和邏整數(shù)的算術和邏輯操作:力口、減、與、或等。

輯運算

數(shù)據(jù)傳輸Load/Store

控制分支、跳轉、過程調(diào)用和返回、自陷等。

系統(tǒng)操作系統(tǒng)調(diào)用、虛擬存儲器管理等。

浮點浮點操作:力口、乘等。

十進制十進制加、十進制乘、十進制到字符的轉換。

字符串字符串移動、字符串比較、字符串搜索等。

圖形象素操作、壓縮/解壓操作等。

2.一種指令集結構中的指令到底要支持哪些類型的

a

徭操作?

四這就是指令集結構功能設計的基本問題。

偏兩種截然不同的方向:

徜?復雜指令集計算機(CISC)

強化指令功能,實現(xiàn)軟件功能向硬件功能轉移。

?精簡指令集計算機(RISC)

盡可能地降低指令集結構的復雜性,以達到簡

化實現(xiàn),提高性能的目的。

當今指令集結構功能設計的一個主要趨勢。

2.3.1ClSC計算機指令集結構的功能設計

?CISC的含義是復雜指令集計算機(Complex

InstructionSetComputer)

起源于1964年的IBM360系列機

以后有DEC公司的PDP-11、VAX11/730、VAX11/750、

VAX11/780

到九十年代IBM390系列機

微機方面有Intel80x86,Motorola68020等

<

aCISC的主要特點:

徭1)指令系統(tǒng)復雜,表現(xiàn)在:

四指令數(shù)多,一般大于100條

尋址方式多,一般大于4種

緇指令格式多,一般大于4種

狗2)絕大多數(shù)指令需要多個機器時鐘周期方可完成

3)各種指令都可訪問存儲器

4)采用微程序控制

5)有專用寄存器

6)難以進行優(yōu)化編譯

CISC結構追求的目標:

強化指令功能,減少程序的指令條數(shù),

提高性能的目的。

增強指令功能主要是從如下幾個方面著手:

一、面向目標程序增強指令功能

?提高運算型指令功能

?提高傳送指令功能

?增加程序控制指令功能

二、面向高級語言和編譯程序改進指令系統(tǒng)

1.增加對高級語言和編譯系統(tǒng)支持的指令功能

?對源程序中各種高級語言語句進行使用頻

度的統(tǒng)計與分析,對于使用頻度高的語句,

可以設置專門的指令或采取措施增加相應

指令的功能,以提高其編譯速度和執(zhí)行速度。

?從面向編譯程序,尤其是從優(yōu)化代碼生成

的角度進行考慮,增加指令集結構的規(guī)整

性來改進指令系統(tǒng)。

規(guī)整性:沒有或盡可能減少例外的情況和特殊的

應用,以及所有運算都能對稱、均勻地

在存儲器單元或寄存器單元之間進行。

2.高級語言計算機指令系統(tǒng)

(1)面向高級語言(HL)的機器

縮小機器語言和高級語言的語義差距。

(2)間接執(zhí)行型高級語言機器

高級語言和機器語言是一一對應的,用匯編

的方法(可以用軟件實現(xiàn),也可以用硬件實現(xiàn))

把高級語言源程序翻譯成機器語言程序。

(3)直接執(zhí)行型高級語言機器

高級語言就作為機器語言,直接由硬件或

固件對高級語言源程序的語句逐條進行解釋以

執(zhí)行它。

三、面向操作系統(tǒng)的優(yōu)化實現(xiàn)改進指令系統(tǒng)

操作系統(tǒng)的實現(xiàn)在很大程度上取決于體系結

構的支持。

1.主要表現(xiàn)在對以下方面的支持

?中斷處理

?進程管理

?存儲管理和保護

?系統(tǒng)工作狀態(tài)的建立與切換

設置指令

如2.

狒?支持系統(tǒng)工作狀態(tài)和訪問方式轉移的指令

?支持進程轉移的指令

曲?支持進程同步和互斥的指令

狗CISC結構存在的缺點:

(1)在CISC結構的指令系統(tǒng)中,各種指令的使用頻

率相差懸殊。

(2)CISC結構指令系統(tǒng)的復雜性帶來了計算機體系

結構的復雜性,這不僅增加了研制時間和成

本,而且還容易造成設計錯誤。

⑶CISC結構指令系統(tǒng)的復雜性給VLSI設計增加了

刎很大負擔,不利于單片集成。

礴(4)CISC結構的指令系統(tǒng)中,許多復雜指令需要很

盤復雜的操作,因而運行速度慢。

(5)在CISC結構的指令系統(tǒng)中,由于各條指令的功

能不均衡性,不利于采用先進的計算機體系結

構技術(如流水技術)來提高系統(tǒng)的性能。

例如,80x86處理器支持幾百條指令,但常用的指令

只有十條,使用頻率占96%

Intel80X861:常用的十條指令

執(zhí)行頻率排序80X86指令指令執(zhí)行頻率(%執(zhí)行指令總數(shù))

1Load22%

2條件分支20%

3比較16%

4Store12%

5加8%

6與6%

7減5%

8寄存器一寄存器間數(shù)據(jù)移4%

9調(diào)用1%

10返回1%

合計96%

2.3.2RISC計算機指令集功能的設計

RISC的含義是精簡指令集計算機(ReducedInstruction

SetComputer)

起源于1975年的IBM801小型計算機

1979年由加州大學伯克萊分校Patterson教授等提出RISC

這一術語,并研制出RISC-1,RISC-II計算機

隨后,斯坦福大學于1981年、1986年分別推出了MIPS

RISC計算機和MIPS2000RISC計算機

1987年SUN公司基于伯克萊分校RISC計算機提出的SPARC系

列工作站,使得工作站成為高速小型/微型計算機的代表,

RISC技術在工作站中被普遍采用。

1988年Motorola推出的MC88000RISC計算機,RISC技術

以背普遍接受。

使得計算機體系結構更加簡單、更加合理和

更加有效,克服CISC結構的缺點,使機器速度更

快,程序運行時間縮短,從而提高計算機系統(tǒng)的

性能。

?RISC的主要特點:

一.精簡指令系統(tǒng)

1)指令條數(shù)少,一般小于100條

2)基本尋址方式少,一般2~3種

3)指令格式少,一般2~3種

4)指令長度一致(32位)

二.以寄存器-寄存器方式工作,除了Load/Store

指令訪問存儲器外,其余指令只訪問寄存器

三.除了Load/Store指令訪問存儲器外,所有指令

在一個機器時鐘周期完成,并采用流水線技術

四.使用較多的通用寄存器,一般至少32個,不允

許有專用寄存器

五.大多采用硬聯(lián)線控制,少用或不用微程序?qū)崿F(xiàn)

六.采用針對體系結構特點的優(yōu)化編譯技術,防止

或減少流水線中出現(xiàn)的相關性,保證流水線暢通。

方r設計原則

魏?選取使用頻率最高的指令,并補充一些最有

用的指令;

?每條指令的功能應盡可能簡單,并在一個機

器周期內(nèi)完成;

?所有指令長度均相同;

?只有Load和Store操作指令才訪問存儲器,

其它指令操作均在寄存器之間進行;

?以簡單有效的方式支持高級語言。

2.3.3控制指令

控制指令:是指能夠改變計算機控制流,也即被處

理的指令序列的執(zhí)行順序的指令。

控制流的各種改變情況:

1)轉移指令

2)過程調(diào)用和返回

3)協(xié)同程序

4)中斷和自陷

徭轉移指令還分兩種:

ft

1)無條件轉移指令:跳轉(Jump)

德2)有條件轉移指令:分支或條件分支(Branch或

ConditionalBranch)

1.控制指令的使用頻率

(一臺Load/Store型指令集結構的機器:

SPECint92>Specfp92基準程序)

改變控制流的大部分指令是條件分支指令。

2.常用的三種表示分支條件的技術及其優(yōu)缺點

表示分支測試分支條件的方法優(yōu)點缺點

條件的技

條件碼在程序的控制下,由ALU操作設可以自由設置CC是額外狀態(tài),條件碼限制了

(CC)置特殊的位。分支條件。指令順序,因為必須從一條指令

將分支條件信息傳送到分支指令。

條件寄存根據(jù)比較結果測試條件寄存器。簡單占用了一個寄存器。

比較且分比較操作是分支指令的一部分,一條指令完成分支指令的操作增多。

支通常這種比較是受一定限制的。了兩條指令的功能。

3.分支目標地址的表示

PC一相對尋址:在指令中提供一個和程序計數(shù)

器(PO的值相加的偏移量。

(1)有效地縮短指令中表示目標地址的字段的

長度;

(2)使得代碼在執(zhí)行時與它被載入的位置無關。

關鍵問題是:

轉移目標離當前控制指令的偏移量有多大?

4.過程調(diào)用和返回的狀態(tài)保存

兩種方法來保存寄存器的內(nèi)容:

(1)“調(diào)用者保存”方法

在一個調(diào)用者調(diào)用別的過程時,必須保存調(diào)用

者所要保存的寄存器,以備調(diào)用結束返回后,能夠

再次訪問調(diào)用者。

(2)“被調(diào)用者保存”方法

被調(diào)用的過程必須保存它要用的寄存器,保證

不會破壞過程調(diào)用者的程序執(zhí)行環(huán)境,并在過程調(diào)

用結束返回時,恢復這些寄存器的內(nèi)容。

2.4操作數(shù)的類型、表示和大小

操作數(shù)類型:機器語言所支持的數(shù)據(jù)類型

操作數(shù)類型是軟硬件主要界面之一

常用的操作數(shù)類型有:整數(shù)、浮點數(shù)、十進制、字符、字

符串、向量、堆棧等。

礴操作數(shù)表示:操作數(shù)表示是指可以由硬件直接識別、指令

系統(tǒng)可以直接處理的數(shù)據(jù)類型。

狗操作數(shù)表示也是軟硬件主要界面之

目前常用的表示:

(1)字符:用ASCII碼表示,為一個字節(jié)大??;

(2)整數(shù):用二進制補碼表示,其大小可以是8位、

16位或32位。

(3)浮點操作數(shù):單精度浮點(32位大小)和雙精

度浮點(64位大小).

(4)字符串:將字符串中的每個字符當作一個字節(jié)

來看待。

5)十進制操作數(shù)

?壓縮十進制

用4位二進制數(shù)編碼數(shù)字0?9,然后將兩個十進制

數(shù)字壓縮在一個字節(jié)中存儲。

?二進制編碼十進制

將十進制數(shù)字直接用字符串來表示

操作數(shù)類型的兩種表示方法

(1)操作數(shù)的類型由操作碼的編碼指定。

這是最常見的一種方法。

(2)數(shù)據(jù)可以附上由硬件解釋的標記,由這些標記指

定操作數(shù)的類型,從而選擇適當?shù)倪\算。

操作數(shù)大小

?字節(jié)

?半字(16位)

?單字(32位)

?雙字(64位。

訪問不同操作數(shù)大小的頻率

測試統(tǒng)計SPECint92基準程序和SPECfp92基準

程序?qū)ψ止?jié)、半字、單字和雙字四種大小的操作數(shù)

訪問情況。

基準程序?qū)巫趾碗p字的數(shù)據(jù)訪問具有較高的頻率,所以

如果選擇操作數(shù)字段的長度為32位,那么它可以有效支持

8、16、32位整型操作數(shù),以及32位浮點操作數(shù)的表示。

當然,如果定義操作數(shù)字段長度為64位,則更具有一般性。

2.5指令集格式的設計

?指令由操作碼和地址碼組成。

?指令集格式的設計

確定操作碼字段和地址碼字段的大小及其組合

形式,以及各種尋址方式的編碼方法。

?設計原則

1.盡可能地增加寄存器數(shù)目和尋址方式類型;

2.充分考慮寄存器字段和尋址方式字段對指令平均字

長的影響,以及它們對目標代碼大小的影響;

3.設計出的指令集格式能夠在具體實現(xiàn)中容易處理。

2.5.1尋址方式的表示方法

1.兩種表示尋址方式的方法

(1)將尋址方式編碼于操作碼中,由操作碼在描述指

令操作的同時,也描述了相應操作的尋址方式;

(2)為每個操作數(shù)設置一個地址描述符,

由該地址描述符表示相應操作數(shù)的尋址方式。

2.選擇哪種表示尋址方式的方法?

由兩個因數(shù)決定:

⑴指令集結構所采用的尋址方式種類及其適用范圍

⑵操作碼與尋址方式之間的獨立程度

2.5.2指令集格式的選擇

為三種指令集編碼格式:

?變長編碼格式

?固定長度編碼格式

?混合型編碼格式

1.變長編碼格式

?有效減少指令集結構的平均指令長度,降低目標代碼

的長度。

?使得各條指令的字長和執(zhí)行時間大不一樣。

多數(shù)CISC計算機的指令集結構均是采用這種編碼格式。

2.固定長度編碼格式

將操作類型和尋址方式組合編碼在操作碼中,所有指

令的長度是固定唯一的。

操硝地礎1地礎2地礎3

3.混合型編碼格式

通過提供一定類型的指令字長,期望能夠兼

顧降低目標代碼長度和降低譯碼復雜度兩個目標。

混贅儡楸

浮點數(shù)表示

每個浮點數(shù)均由三部分組成:符號位S、指數(shù)部

分E和尾數(shù)部分M

1)單精度格式(32位):S=1位,E=8位,M=23位

2)雙精度格式(64位):S=1位,E=ll位,M=52位

以單精度格式來說明

S:取值0或1,表示浮點數(shù)值的正或負

M:表示尾數(shù)值為1.M

E:當取值1~254時,經(jīng)移碼表示指數(shù)-126~+127

(減127)

當取值0時,若M=0,表示0

若MM,表示非規(guī)格化數(shù),尾數(shù)

值為0.M

當取值255時,若M=0,表示8

若MM,表示非數(shù)值

例如:

1011111111000.......

=

S=l,E=127,M=0.5

=>

值=(-1)11x2127-127x1.5=—l.5

0100000010100.......

=

S=0,E=129,M=0.25

n

值=(-1*1x2129T27x1.25=5

書「

魏將保

EH8ii

2352

3264

指饕碼=127=1023

-126?n27-1022?+1023

^^^HE126=1022

蠅彩耀e哨摩薨炙9

狗2芻

中1幽Hbl023

最魏露藪_2

「381?-^9(B

1010TT^UJ0

2.6編譯技術與計算機體系結構設計

本節(jié)從編譯技術的觀點討論指令集結構設計的關鍵目標:

?哪些指令集結構特性可以為生成高質(zhì)量的程序目標

代碼提供保證?

?如何才能非常容易地為指令集結構編寫出相應的高

效編譯器?

2.6.1現(xiàn)代編譯器的結構和相關技術

現(xiàn)代編譯器結構

裕中嬴靠

編譯器設計者的目標

(1)保證編譯器的正確性,使得所有有效的程序必須

能夠被正確地編譯

(2)編譯出的代碼在目標機器上的執(zhí)行速度要盡可能快

⑶編譯的速度

(4)對程序調(diào)試的支持

(5)各種語言之間互操作的可能性

徵由于高級語言和低級語言之間存在很大的語義差

別,在完成這樣一個復雜轉換過程中要兼顧這些內(nèi)容

翹是很復雜的一件事。為了確保正確性,現(xiàn)代編譯器一

德般都采用多遍掃描的方法:每一遍掃描都將一種比較

高級的表示形式轉換成一種比較低級的表示形式,最

終達到機器語言形式。

編同樣,優(yōu)化過程通常也是采用這樣一種多遍掃描

方法,每一遍掃描進行一種類型的優(yōu)化處理,直至所

頒有優(yōu)化處理執(zhí)行完。

這種多遍掃描方法引出了一個“按序轉換問題嗎

前一步轉換并不知道它是否一定適合后一步轉換,它

只能基于某種假設,有一定的盲目性。

例“全局公共子表達式消去法”

設法找出在同一表達式中出現(xiàn)的公共子表達

式,并把第一次公共子表達式計算出的值存放在

一個臨時變量中,然后它利用該臨時變量的值消

去表達式中的其它相同公共子表達式的計算。

關鍵:該臨時變量一定要分配給某一寄存器。

問題:后續(xù)的優(yōu)化處理不一定能完成這樣的寄存器分

寄存器分配

寄存器分配算法均是基于“圖著色法”發(fā)展而來的。

圖著色法的基本思想:

根據(jù)將要分配給寄存器的各個可能候選變量和

它們的使用范圍,構造相干圖,然后再用該圖來分配

寄存器。

編譯器所實現(xiàn)的優(yōu)化的幾種類型

(1)高級優(yōu)化

通常是對原始程序進行優(yōu)化,并將優(yōu)化結

果送到后續(xù)的優(yōu)化掃描中。

(2)局部優(yōu)化

僅僅是一系列在線性的程序段(也稱為基本

塊)中進行的優(yōu)化。

(3)全局優(yōu)化

在局部優(yōu)化的基礎上,考慮到各種分支情況,

對循環(huán)和分支進行一系列的優(yōu)化轉換。

(4)寄存器分配

(5)基于機器的優(yōu)化

目的是充分利用機器結構的一些特點

進行代碼優(yōu)化。

一些實際優(yōu)化方法

優(yōu)化類型和方法說明

高級優(yōu)化處于或接近源代碼級別,與機器獨立無關

過程集成用過程體代替過程調(diào)用語句。

局部優(yōu)化線性代碼序列內(nèi)的優(yōu)化

消去公共子表達式設法找出在同一表達式中出現(xiàn)的公共子表達式,并把第一次公共子表達式計算出的值存放在一

個臨時變量中,然后它利用該臨時變量值消去表達式中的其它相同公共子表達式的計算。

常數(shù)傳遞將所有被賦值為常數(shù)的變量用該常數(shù)的值代替?

降低堆棧的高度對表達樹進行重新組織,盡量減少表達式求值時所需要的資源。

全局優(yōu)化非線性代碼序列的優(yōu)化

消去公共子表達式和局部優(yōu)化中的消去公共子表達式優(yōu)化類似。

拷貝傳遞如果變量A已經(jīng)賦值為X,則用X代替所有地方的A。

代碼移動如果在循環(huán)中的某段代碼均是計算相同的值,則將這段代碼移到循環(huán)的外部。

消去索引變量簡化/消去在循環(huán)中的數(shù)組地址計算。

基于機器的優(yōu)化依賴于機器的特點

降低計算量比如,可以用加操作和移位操作來代替一個常數(shù)的乘操作。

流水線調(diào)度重新組織指令序列以提高流水線性能。

分支偏移的優(yōu)化選擇能夠達到分支目標的最短分支偏移量。

8.優(yōu)化對程序執(zhí)行性能的影響

進行的優(yōu)化性能提高的百分比

只進行過程集成10%

只進行局部優(yōu)化5%

局部優(yōu)化+寄存器分配26%

局部優(yōu)化+全局優(yōu)化14%

局部優(yōu)化+全局優(yōu)化+寄存器分配63%

局部優(yōu)化+全局優(yōu)化+寄存器分配+過81%

程集成

2.6.2現(xiàn)代編譯技術對計算機體系結構設計的影響

要認識編譯技術對計算機體系結構的影響必須

了解這樣兩個問題:

?如何分配和尋址變量?

=用多少個寄存器分配變量比較合適。

?優(yōu)化技術對指令使用頻度有何影響?

=什么樣的指令更需加快執(zhí)行速度。

1.高級語言用來分配數(shù)據(jù)的三個不同區(qū)域

(1)堆棧

用來分配局部變量,可以不通過指針訪問。

(2)全局數(shù)據(jù)區(qū)

用來分配靜態(tài)說明的對象,可以不通過指針訪問。

(3)堆

主要用來動態(tài)分配一些不適合放在堆棧中的對象,

通過指針訪問。

?將寄存器分配給堆棧和全局數(shù)據(jù)區(qū)中未曾采用指針訪

問的對象。

?對于分配給堆的對象,不能將寄存器分配給它們。

例如考慮如下代碼序列,其中表示返回一個

變量的地址,則是取該地址處保存的值:

p=&a取變量a的地址,并將其保存在p中;

a=…直接對變量a進行賦值;

*p=…利用指針p對a進行賦值;

...a...訪問a。

在上述代碼序列中,就不能夠?qū)⒆兞縜分配

給寄存器,否則就會生成錯誤的代碼。

如2.將存儲器訪問分成五類

於(1)未分配的訪問

四(2)對全局變量的訪問

德(3)Load/Store訪問

將存儲器中的內(nèi)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論