第5章 指令系統(tǒng)_第1頁(yè)
已閱讀1頁(yè),還剩70頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第5章 指令系統(tǒng),5.1 指令系統(tǒng)的發(fā)展5.2 指令格式5.3 數(shù)據(jù)表示5.4尋址方式(編址方式)5.5 指令類型5.6 指令系統(tǒng)的兼容性(略)5.7 RISC和CISC(略)5.8 指令系統(tǒng)舉例(略)5.9 機(jī)器語言、匯編語言和高級(jí)語言(略),,學(xué)習(xí)目的1. 了解指令格式、數(shù)據(jù)表示。2. 掌握不同尋址方式(編址方式)中部件之間的動(dòng)作關(guān)系,可能的時(shí)間分配。3. 了解指令類型、指令系統(tǒng)的兼容性和精簡(jiǎn)指令系統(tǒng)計(jì)算機(jī)(

2、RISC)、復(fù)雜指令系統(tǒng)計(jì)算機(jī)(CISC)的有關(guān)概念、特性等。,本章重難點(diǎn),1、指令系統(tǒng)的定義、作用2、指令格式3、尋址方式,5.1 指令系統(tǒng)的發(fā)展,計(jì)算機(jī)系統(tǒng): 硬件(hardware)+軟件(software) 硬件: 中央處理機(jī)(CPU)、存儲(chǔ)器、外部設(shè)備 軟件: 程序 (最終轉(zhuǎn)換成一系列機(jī)器指令后在計(jì)算機(jī)上執(zhí)

3、 行),指令系統(tǒng)的定義:一臺(tái)計(jì)算機(jī)能直接識(shí)別并執(zhí)行的機(jī)器指 令的集合。指令系統(tǒng)的作用:指令系統(tǒng)是硬件設(shè)計(jì)的任務(wù)書,是軟件設(shè)        計(jì)的基礎(chǔ),與計(jì)算機(jī)的性能有密切關(guān)系。,1. 20世紀(jì)50年代和60年代早期: 指令系統(tǒng)一般只有定點(diǎn)加減、邏輯運(yùn)算、數(shù)據(jù)傳送和轉(zhuǎn)移等十幾至幾十條最基本的指令,而且尋址方式簡(jiǎn)單。2.到60年代中、后期:  除了具有以上最基本的指令以外,還設(shè)

4、置了乘除法運(yùn)算指令、浮點(diǎn)運(yùn)算指令、十進(jìn)制運(yùn)算指令以及字符串處理指令等,指令數(shù)多達(dá)一、二百條,尋址方式也趨于多樣化。3. 60年代出現(xiàn)了系列(series)計(jì)算機(jī)。  原因:為了繼承已有的軟件,減少軟件的開發(fā)費(fèi)用. 系列計(jì)算機(jī):是指基本指令系統(tǒng)相同,基本體系結(jié)構(gòu)相同的一系列計(jì)算機(jī)?! ∪鏘BM370系列,VAX—11系列,IBMPC(XT/AT/286/386/486/Pentium)微機(jī)系列等?! ?yōu)點(diǎn):在舊機(jī)種上運(yùn)行各種軟

5、件可以不加任何修改地在新機(jī)種上運(yùn)行。(向下兼容),隨著VLSI技術(shù)的發(fā)展,硬件結(jié)構(gòu)越來越復(fù)雜,所支持的指令系統(tǒng)也趨于多用途、強(qiáng)功能化?!≈噶钕到y(tǒng)的改進(jìn)是圍繞著縮小指令與高級(jí)語言的語義差異以及有利于操作系統(tǒng)的優(yōu)化而進(jìn)行的?!?CISC(復(fù)雜指令系統(tǒng)計(jì)算機(jī))的問題: (1)設(shè)計(jì)周期長(zhǎng),正確性難以保證且不易維護(hù)等; (2) 需要大量硬件支持的大多數(shù)較復(fù)雜的指令卻利用率很低,造成硬件資源的極大浪費(fèi)?! ?為了解決這個(gè)問

6、題,在70年代末人們提出了便于VLSI實(shí)現(xiàn)的精簡(jiǎn)指令系統(tǒng)計(jì)算機(jī),簡(jiǎn)稱RISC(精簡(jiǎn)指令系統(tǒng)計(jì)算機(jī))?!ISC:Complex instruction set computer RISC: reduced instruction set computer,5.2 指令格式,計(jì)算機(jī)的指令格式與機(jī)器的字長(zhǎng)、存儲(chǔ)器的容量及指令的功能都有很大的關(guān)系?! ≡O(shè)計(jì)指令格式的要求:   (1)使指令能給出足夠的信息   (2

7、)其長(zhǎng)度又盡可能地與機(jī)器的字長(zhǎng)相匹配,以便節(jié)省存儲(chǔ)空間,縮短取指時(shí)間,提高機(jī)器的性能。,5.2.1 指令格式,一條指令就是要機(jī)器語言的一個(gè)語句,它是一組有意義的二進(jìn)制代碼,通常提供兩方面的信息:一是指明操作的性質(zhì)及功能,這一部分稱為操作碼。二是給出與操作數(shù)有關(guān)的信息,如:直接給出操作數(shù)本身或指明操作數(shù)的地址等。因?yàn)榇蠖鄶?shù)情況下,指令中給出的是操作數(shù)的地址,因此,這一部分稱為地址碼。 指令的基本格式為:

8、,操作碼字段 地址碼字段,,,,二 .地址碼結(jié)構(gòu) 計(jì)算機(jī)執(zhí)行一條指令所需要的全部信息都必須包含在指令中,對(duì)于一般的指令來說,除去操作碼(OP)之外,指令還應(yīng)包含以下信息: (1)第一操作數(shù)地址,用A1表示 (2)第二操作數(shù)地址,用A2表示 (3)操作結(jié)果存放地址,用A3表示 (4)下條將要執(zhí)行指令的地址,用A4表示 這些

9、信息可以在指令中明顯給出,稱為顯地址,也可依照某種事先的約定,用隱含方式給出,稱為隱地址。 下面介紹幾種指令格式。,1.四地址指令,前述的四個(gè)地址信息在地址碼字段中明顯給出。格式:含義: (A1)OP(A2)?A3 (A4)=下一條將要執(zhí)行指令的地址說明: (Ai)表示存放在一地址Ai中的內(nèi)容優(yōu)點(diǎn):直觀,下條指令的地址明顯,不適合轉(zhuǎn)移指令缺點(diǎn):指令太長(zhǎng),因?yàn)橹苯咏o出了后繼指令地址

10、,程序不能根據(jù)操作結(jié)果靈活轉(zhuǎn)移,這種格式不切實(shí)際。,2.三地址指令,執(zhí)行程序時(shí),大多數(shù)指令按順序從主存中逐條取出執(zhí)行,只有遇到轉(zhuǎn)移指令時(shí),程序的執(zhí)行順序才會(huì)改變。 為了壓縮指令的長(zhǎng)度,要以用一個(gè)程序計(jì)數(shù)器PC(program counter)來存放指令地址。每執(zhí)行一條指令,PC就自動(dòng)加1(該指令只占一個(gè)主存單元),指出將要執(zhí)行的下一條指令,當(dāng)遇到執(zhí)行轉(zhuǎn)移指令時(shí),則用轉(zhuǎn)移地址修改PC的內(nèi)容,這樣,指令中就不必給出A4了

11、。 格式: 含義: (A1)OP (A2)?A3 (PC)+1 ?PC(隱含) 特點(diǎn): 指令仍然很長(zhǎng),只在字長(zhǎng)較長(zhǎng)的大、中型機(jī)中使用,而小型、微型機(jī)中很少使用。,OP,,,,A1,A2,A3,3.二地址指令,三地址指令執(zhí)行完后,主存的兩個(gè)操作數(shù)均不會(huì)被破壞,可供再次使用,然而通常不一定 要完全保留兩個(gè)操作數(shù)。例:把第一操作數(shù)地址同時(shí)兼作存放結(jié)果的地址,這樣即可得到二地址指令。

12、 格式: 含義: (A1)OP (A2)?A1 (PC)+1 ?PC(隱含) A1:目的操作數(shù)地址 A2:源操作數(shù)地址 特點(diǎn):二地址指令在計(jì)算機(jī)中得到廣泛的應(yīng)用,但要注意:指令執(zhí)行之后,目的操作數(shù)地址中原存的內(nèi)容已被破壞了?!?例: MOV  AL,BL,OP A1 A2,,,4.一地址指令,(1)格式:

13、(2)功能: 1)單操作數(shù)運(yùn)算 A1既是操作數(shù)的地址,又是結(jié)果存放的地址?! ±?1、-1、求反等 含義: OP(A1)?A1 (PC)+1 ?PC(隱含) 例:INC AL   DEC CL 2)雙操作數(shù) 約定:隱含的一個(gè)操作數(shù)放在一個(gè)專用寄存中(AC-累加器) 含義: (AC)OP(A1)?(AC) (PC)

14、+1 ?PC(隱含)例: MUL   BL    ((AL)*(BL) ? (AX)),OP A1,,5. 零地址指令,格式: 無操作數(shù):如空操作NOP、停機(jī)指令HLT   默認(rèn)操作數(shù):如讀取標(biāo)志指令LAHF,將標(biāo)志寄存器FLAG的低8位送到AH寄存器中。,OP,適應(yīng)范圍: 零地址、一地址和兩地址指令具有指令短,執(zhí)行速度快,硬件實(shí)現(xiàn)簡(jiǎn)單等特點(diǎn),多為結(jié)構(gòu)較簡(jiǎn)單,字長(zhǎng)較短的小型、微型機(jī)所采用;  而兩

15、地址、三地址和多地址指令具有功能強(qiáng),便于編程等特點(diǎn),多為字長(zhǎng)較長(zhǎng)的大、中型機(jī)所采用。,指令和數(shù)據(jù)的聯(lián)系和區(qū)別:聯(lián)系:都是以二進(jìn)制碼的形式存儲(chǔ)的。區(qū)別:   指令的地址是由程序計(jì)數(shù)器(PC)規(guī)定的,而數(shù)據(jù)的地址是由指令規(guī)定的。在程序執(zhí)行過程中,要避免修改指令,但可以修改數(shù)據(jù)。,一.指令字長(zhǎng)定長(zhǎng)指令:便于控制變長(zhǎng)指令:合理利用存儲(chǔ)空間二.操作碼格式 指令系統(tǒng)中的每一條指令都有一個(gè)唯一確定的操作碼,指令不同,其操作碼的編碼也不同

16、。為了能表示整個(gè)指令系統(tǒng)的全部指令,指令的操作碼字段應(yīng)當(dāng)具有足夠的位數(shù)?! 〖俣ǎ褐噶钕到y(tǒng)有m條指令,指令的操作碼字段的位數(shù)有N位,則m?2N,即 N?log2m. ?我們希望用盡可能短的操作碼字段來表達(dá)全部的指令。   指令操作碼的編碼可以分為以下兩種形式。,5.2.2 指令操作碼的擴(kuò)展技術(shù),1. 定長(zhǎng)操作碼各指令的操作碼的位置、位數(shù)固定相同(即操作碼的長(zhǎng)度固定,且集中放在指令字的一個(gè)字段中)。 特點(diǎn):這種格式對(duì)于簡(jiǎn)化硬件設(shè)計(jì)

17、,減少指令譯碼時(shí)間非常有利,在字長(zhǎng)較長(zhǎng)的大、中型機(jī)和超級(jí)小型機(jī)以及RISC上廣泛采用。,2.擴(kuò)展操作碼(變長(zhǎng)) 各指令操作碼的位置、位數(shù)不固定,根據(jù)需要變化(即操作碼的長(zhǎng)度可變,且分散得放在指令字的不同字段中) 。   特點(diǎn):這種格式能夠有效地壓縮程序中操作碼的平均長(zhǎng)    度,在字長(zhǎng)較短的微型機(jī)上廣泛采用。 如Z80、     Intel8086/Pentium等,操作碼的長(zhǎng)度都是可變的。,例.(方法一) 指令字長(zhǎng)16位,可

18、含有3、2、1或0個(gè)地址,每個(gè)地址占4位。(見教材P130~131),操作碼 地址碼,,,15~ 12 11~ 8 7 ~ 4 3 ~ 0,,0000 X Y Z 1110 X Y Z,,,1111 0000 Y Z 1111 1110 Y Z,三地址指令 15條,二地址指令 15條,,1111 1111 0000 Z 1111 11

19、11 1110 Z,一地址指令 15條,1111 1111 1111 0000 1111 1111 1111 1111,零地址指令 16條,,可表示61條指令,例. (方法二)指令字長(zhǎng)16位,可含有3、2、1或0個(gè)地址,每個(gè)地址占4位。(見教材P130~131),操作碼 地址碼,,,15~ 12 11~ 8 7 ~ 4 3 ~ 0,,0000 X Y Z 1110

20、 X Y Z,,,1111 0000 Y Z 1111 1101 Y Z,三地址指令 15條,二地址指令 14條,,1111 1110 0000 Z 1111 1111 1110 Z,一地址指令 31條,1111 1111 1111 0000 1111 1111 1111 1111,零地址指令 16條,,可表示76條指令,可變長(zhǎng)度的指令系統(tǒng)的設(shè)計(jì),到底使用何種擴(kuò)展方法有一個(gè)重

21、要的原則: 就是使用頻度(即指令在程序中的出現(xiàn)概率)高的指令應(yīng)分配短的操作碼;使用頻度低的指令相應(yīng)地分配較長(zhǎng)的操作碼。(霍夫曼編碼法) 作用:有效地縮短操作碼在程序中的平均長(zhǎng)度,節(jié)省存儲(chǔ)器空間,縮短了經(jīng)常使用的指令的譯碼時(shí)間,因而可以提高程序的運(yùn)行速度。,假某計(jì)算機(jī)模型:7條指令(I1~I(xiàn)7),程序中出現(xiàn)的概率用Pi表示,則可考慮表5.1所示的方案,這就是擴(kuò)展操作碼,使用頻率高的指令的操作碼為2位,低的用4位

22、。這不是壓縮到最小代碼的方案,因?yàn)樵谟?jì)算機(jī)中的操作碼還是希望有一定的規(guī)整性,否則會(huì)引起硬件實(shí)現(xiàn)的復(fù)雜化。另外,內(nèi)存中存放的指令長(zhǎng)度一般是字節(jié)的整數(shù)倍,所以操作碼與地址碼兩部分長(zhǎng)度之和是字節(jié)的整數(shù)倍。在考慮OP長(zhǎng)度時(shí)還要考慮地址碼的要求。,由此可見,操作碼擴(kuò)展技術(shù)是一種重要的指令優(yōu)化技術(shù),它可以縮短指令的平均長(zhǎng)度,減少程序的總位數(shù)以及增加指令字所能表示的操作信息。當(dāng)然,擴(kuò)展操作碼比固定操作碼譯碼復(fù)雜,使控制器的設(shè)計(jì)難度增大,且需更多的硬件

23、來支持。,5.2.3 指令長(zhǎng)度與字長(zhǎng)的關(guān)系,字長(zhǎng):指計(jì)算機(jī)能直接處理的二進(jìn)制數(shù)據(jù)的位數(shù),它是計(jì)算機(jī)的一個(gè)重要技術(shù)指標(biāo)?! ∽饔?字長(zhǎng)決定了計(jì)算機(jī)的運(yùn)算精度,字長(zhǎng)越長(zhǎng),計(jì)算機(jī)的運(yùn)算精度越高。,一般機(jī)器的字長(zhǎng)都是字節(jié)長(zhǎng)度(即8位)的l,2,4或8倍數(shù),也就是8,16,32或64位。如80年代微型機(jī)的字長(zhǎng)多為8位,16位和32位,大中型機(jī)的字長(zhǎng)多為32位和64位,因此,一個(gè)字中可以存儲(chǔ)1,2,4或8個(gè)字符。隨著集成度的提高,機(jī)器字長(zhǎng)也在增

24、長(zhǎng),16位微機(jī)已趨于淘汰。,,指令的長(zhǎng)度:主要取決于操作碼的長(zhǎng)度、操作數(shù)地址的長(zhǎng)度和操作數(shù)地址的個(gè)數(shù)。各指令的長(zhǎng)度不是固定的,但也不是任意的?! ≈噶畹拈L(zhǎng)度通常為字節(jié)的整數(shù)倍。,地址碼長(zhǎng)度決定了指令直接尋址能力。這對(duì)于字長(zhǎng)較短(8位或16位)的微型機(jī)來說,遠(yuǎn)遠(yuǎn)滿足不了實(shí)際需求。擴(kuò)大尋址能力的方法:1)增加機(jī)器字長(zhǎng)來增加地址碼的長(zhǎng)度;2)采用地址擴(kuò)展技術(shù),把存儲(chǔ)空間分成若干段,用基址加位移量的方法來增加地址碼的長(zhǎng)度。,指令的長(zhǎng)度

25、與機(jī)器的字長(zhǎng)沒有固定的關(guān)系,它既可以小于或等于機(jī)器的字長(zhǎng),也可以大于機(jī)器的字長(zhǎng)。前者稱為短格式指令,后者稱為長(zhǎng)格式指令,一條指令存放在地址連續(xù)的存儲(chǔ)單元中?! ≡谕慌_(tái)計(jì)算機(jī)中可能既有短格式指令又有長(zhǎng)格式指令,但通常是把最常用的指令(如算術(shù)邏輯運(yùn)算指令、數(shù)據(jù)傳送指令)設(shè)計(jì)成短格式指令,以便節(jié)省存儲(chǔ)空間和提高指令的執(zhí)行速度。,5.3 數(shù)據(jù)表示,1.操作數(shù)的類型  邏輯(布爾)數(shù)、定點(diǎn)數(shù)(整數(shù))、浮點(diǎn)數(shù)(實(shí)數(shù))、十進(jìn)制數(shù)、字符串、數(shù)組

26、等2.操作數(shù)的存儲(chǔ)方式   一個(gè)數(shù)據(jù)的位數(shù)>1字節(jié)或1個(gè)字的寬度,這個(gè)數(shù)據(jù)就需要存儲(chǔ)在相鄰的多個(gè)字節(jié)的位置上。按照高位數(shù)據(jù)和低位數(shù)據(jù)在存儲(chǔ)器中的存儲(chǔ)次序,可分為大數(shù)端(big endian)和小數(shù)端(little endian)兩種存儲(chǔ)方式?! ⒆畹妥止?jié)存儲(chǔ)在最小地址位置的存儲(chǔ)方式稱為小數(shù)端方式?! ⒆畹妥止?jié)存儲(chǔ)在最大地址位置的存儲(chǔ)方式稱為大數(shù)端方式。  許多新型計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)都同時(shí)支持大數(shù)端和小數(shù)端數(shù)據(jù)存儲(chǔ)方式。,例:十

27、進(jìn)制數(shù)1000000,用十六進(jìn)制數(shù)據(jù)表示為:F4240H,  在32位數(shù)據(jù)類型中存儲(chǔ)為000F4240H。,(1)小數(shù)端存放,40  42  0F 00,,,,0  1  2  3,存儲(chǔ)器地址編號(hào),(2)大數(shù)端存放,00 0F 42 40,,,,0  1  2  3,目前計(jì)算機(jī)所用數(shù)據(jù)字長(zhǎng)一般為32位。存儲(chǔ)器的地址,一般按字節(jié)表示。計(jì)算機(jī)的指令系統(tǒng)可支持對(duì)字節(jié)、半字、字、雙字的運(yùn)算,有些計(jì)算機(jī)有位處理指令。 為便于硬件實(shí)現(xiàn),一般

28、要求多字節(jié)數(shù)據(jù)對(duì)準(zhǔn)邊界,如P132圖5.2(a)所示。當(dāng)所存數(shù)據(jù)不能滿足此要求時(shí),則填充一個(gè)至多個(gè)空白字節(jié)。 也有的計(jì)算機(jī)不要求對(duì)準(zhǔn)邊界,但可能增加訪問存儲(chǔ)器次數(shù),而且還有可能要對(duì)高低字節(jié)的位置進(jìn)行調(diào)整。,3.數(shù)據(jù)對(duì)齊方式,在數(shù)據(jù)對(duì)齊存儲(chǔ)方式下,要求一個(gè)數(shù)據(jù)字占據(jù)完整的一個(gè)字的存儲(chǔ)位置。而不能分成兩部分。 例:一個(gè)32位的字   在按字對(duì)齊方式下,它的地址應(yīng)當(dāng)是4的倍數(shù),即其地址的二進(jìn)制碼的最低兩位為00,這樣它占據(jù)的存儲(chǔ)

29、器位置是地址為:4n、4n+1、4n+2、4n+3(n為自然數(shù))。在32位寬的存儲(chǔ)中,這個(gè)字可以一次讀取或?qū)懭搿?在不按字對(duì)齊方式下,它的地址就如出現(xiàn):4n-1、4n、4n+1、4n+2的情況。這樣的數(shù)據(jù)在32位寬的存儲(chǔ)中,需要分兩次讀取或?qū)懭搿?例:,,,,,,,,,0,4,8,12,16,字節(jié)地址,3  2  1   0,,,,,數(shù)據(jù)字的存儲(chǔ)地址為8,,,,,,,,,0,4,8,12,16,字節(jié)地址,3  2  1   0,,,

30、,,,數(shù)據(jù)字的存儲(chǔ)地址為9分兩次讀/寫,5.4 尋址方式(P133),存放操作數(shù)的部件:ALU的某個(gè)寄存器、存儲(chǔ)器、指令 程序的指令代碼:一般在存儲(chǔ)器中 尋址方式:根據(jù)指令中給出的地址碼字段尋找真實(shí)的操作數(shù)以及下一條要執(zhí)行的指令地址的方式。,1.直接尋址,操作數(shù)的地址直接在指令中給出,操作數(shù)在存儲(chǔ)器中 例:MOV AX,[2000],尋址方式字段,A—有效地址,2.寄存器尋址,操作數(shù)在寄存器中,寄存器號(hào)在指令中

31、給出。例:MOV AX,BX優(yōu)點(diǎn):地址碼短,從寄存器中存取數(shù)據(jù)比從存儲(chǔ)器中存取快得多. 寄存器尋址方式可以縮短指令長(zhǎng)度、節(jié)省存儲(chǔ)空間,提高指令的執(zhí)行速度,在計(jì)算機(jī)中得到廣泛應(yīng)用。,OP  R,,指令,操作數(shù),寄存器R,3.基址尋址,在計(jì)算機(jī)中設(shè)置一個(gè)專用的基址寄存器,或由指令指定一個(gè)通用寄存器為基址寄存器,操作數(shù)的地址由基址寄存器的內(nèi)容和指令的地址碼A相加得到,地址碼A通常被稱為位移量(disp),也可用其他方法獲得位移量。例

32、:MOV AX,50[BX],在MASM中這叫寄存器相對(duì)尋址,,注1:基址尋址主要用以解決程序在存儲(chǔ)器中的定位(邏輯地址 物理地址)和擴(kuò)大尋址空間(基址+位移量)等問題。注2:通常基址寄存器中的值只能由系統(tǒng)程序設(shè)定,由特權(quán)指令執(zhí)行,而不能被一般用戶指令所修改,因此確保了系統(tǒng)的安全性。,,4.變址尋址,指令地址碼部分給出的地址A和指定的變址寄存器X的內(nèi)容通過加法器相加,所得的和作為地址從存儲(chǔ)器中讀出所需的操作數(shù)。這是幾乎所有計(jì)算

33、機(jī)都采用的一種尋址方式,當(dāng)計(jì)算機(jī)中還有基址寄存器時(shí),那么在計(jì)算有效地址時(shí)還要加上基址寄存器的內(nèi)容。 例:MOV AX,table[SI],變址寄存器的值為:1~m,該圖表示變址操作對(duì)處理一維數(shù)組的支持。利用變址操作與循環(huán)執(zhí)行程序的方法對(duì)整個(gè)數(shù)組進(jìn)行運(yùn)算,在整個(gè)執(zhí)行過程中,不改變?cè)绦颍虼藢?duì)實(shí)現(xiàn)程序的重入性時(shí)有好處的。,二維數(shù)組也可用變址操作實(shí)現(xiàn),需要兩個(gè)變址寄存器。有些計(jì)算機(jī)的指令系統(tǒng)的變址寄存器由自動(dòng)增量或自動(dòng)減量功能。,

34、,5.間接尋址,根據(jù)指令的地址碼所取出的內(nèi)容是操作數(shù)的地址或指令的地址,這種方式稱為間接尋址或間址。   根據(jù)地址碼取出的是寄存器地址還是存儲(chǔ)器地址,間接尋址又可分為寄存器間接尋址和存儲(chǔ)器間接尋址兩種方式?! ±篗OV AX,[BX] 間接尋址有一次間址和多次間址兩種情況。  對(duì)于存儲(chǔ)器一次間址情況,需訪問兩次存儲(chǔ)器才能取得數(shù)據(jù),第一次從存儲(chǔ)器讀出操作數(shù)地址,第二次讀出操作數(shù)。,例:MOV AX,[BX]

35、 int *p;(一級(jí)間址) int **p;(二級(jí)間址),例: 直接尋址:JMP near ptr A1 間接尋址:JMP dword ptr [2000],6.相對(duì)尋址,把程序計(jì)數(shù)器PC的內(nèi)容(即當(dāng)前執(zhí)行指令的地址)與指令的地址碼部分給出的位移量(disp)之和作為操作數(shù)的地址或轉(zhuǎn)移地址,稱為相對(duì)尋址。   主要用于轉(zhuǎn)移指令,執(zhí)行本條指令后,將轉(zhuǎn)移到(PC)+disp,(PC)為程序計(jì)數(shù)器

36、的內(nèi)容。例: JMP SHORT PTR L1  相對(duì)尋址有兩個(gè)特點(diǎn): (1)轉(zhuǎn)移地址不是固定的,它隨著PC值的變化而變化,并且總是與PC相差一個(gè)固定值disp,因此無論程序裝入存儲(chǔ)器的任何地方, 均能正確運(yùn)行,對(duì)浮動(dòng)程序很適用?! ?2)位移量可正、可負(fù),通常用補(bǔ)碼表示。如果位移量為n位,則這種方式的尋址范圍在(PC)-2(n-1)到(PC)+2(n-1) -1之間。   計(jì)算機(jī)的程序和數(shù)據(jù)一般是分

37、開存放的,程序區(qū)在程序執(zhí)行過程中不允許修改。在程序與數(shù)據(jù)分區(qū)存放的情況下,不用相對(duì)尋址方式來確定操作數(shù)地址。,,PC的內(nèi)容為1000,指令的位移量(相對(duì)距離)為35。故其相對(duì)地址為1035。這個(gè)地址是不固定的,隨PC的值變化而變化,并且相對(duì)地差一個(gè)固定值。因此,無論程序裝入存儲(chǔ)器的任何區(qū)域,只要這個(gè)差值不變,程序均能正確運(yùn)行。由于程序在內(nèi)存空間里是浮動(dòng)的,又稱浮動(dòng)尋址。,例如:,7.立即數(shù),所需的操作數(shù)由指令的地址碼部分直接給出,就稱為

38、立即數(shù)(或直接數(shù))尋址方式。 例:   其匯編符號(hào)記為:MOV Ri,#1536 這種方式的特點(diǎn)是取指時(shí),操作碼和一個(gè)操作數(shù)同時(shí)被取出,不必再次訪問存儲(chǔ)器,提高了指令的執(zhí)行速度,但不能修改,通常用于寄存器或存儲(chǔ)單元賦初值或提供一個(gè)常數(shù)等。,,,8.堆棧尋址: 堆棧操作使用一種特殊的數(shù)據(jù)傳送指令,即壓入指令(PUSH)和彈出指令(POP)。 若采用

39、“向上生成”的堆棧,其操作過程如下:? ? 壓入指令:PUSH OPR,是把OPR(設(shè)長(zhǎng)度為一個(gè)字節(jié)) 壓入堆棧。其操作是: (SP)-1 →SP ; OPR →(SP) 。 ? 彈出指令:POP OPR,是從堆棧彈出一個(gè)數(shù)據(jù)(長(zhǎng)度為一個(gè)字節(jié))送OPR,操作是: ((SP))→OPR ;(SP)+1 → SP 。,以上這些尋址方式,在計(jì)算機(jī)中可以組合使用?!±缭谝粭l指令中可以同時(shí)實(shí)現(xiàn)

40、基址尋址與變址尋址,其有效地址為:  基址寄存器內(nèi)容+變址寄存器內(nèi)容+指令地址碼A,假如用戶用高級(jí)語言編程,根本不用考慮尋址方式,因?yàn)檫@是編譯程序的事。  但若用匯編語言編程,則應(yīng)對(duì)它有確切的了解,才能編出正確而又高效的程序。此時(shí)應(yīng)認(rèn)真閱讀指令系統(tǒng)的說明書,因?yàn)椴煌?jì)算機(jī)采用的尋址方式是不同的,即使是同一種尋址方式,在不同的計(jì)算機(jī)中也有不同的表達(dá)方式或含義。,5.5 指令類型(P137),指令系統(tǒng)決定了計(jì)算機(jī)的基本功能,因此指令系

41、統(tǒng)的設(shè)計(jì)是計(jì)算機(jī)系統(tǒng)設(shè)計(jì)中的一個(gè)核心問題。,5.5.1 指令的分類及功能,一臺(tái)計(jì)算機(jī)的指令系統(tǒng)通常有幾十條至幾百條指令,按其所完成的功能可分為:算術(shù)邏輯運(yùn)算指令、 移位操作指令、浮點(diǎn)運(yùn)算指令、十進(jìn)制運(yùn)算指令、 字符串處理指令、向量運(yùn)算指令、數(shù)據(jù)傳送指令、 轉(zhuǎn)移指令、堆棧操作指令、輸入輸出指令、特權(quán)指令等。 下面分別說明各類指令的功能。,1.算術(shù)邏輯運(yùn)算指令,(1

42、)算術(shù)(定點(diǎn)數(shù)運(yùn)算即相當(dāng)于高級(jí)語言中對(duì)整數(shù)(integer)的處理,根據(jù)算術(shù)運(yùn)算的結(jié)果置狀態(tài)位,一般有Z(結(jié)果為0)、N(結(jié)果為負(fù))、V(結(jié)果溢出)、C(產(chǎn)生進(jìn)位或借位)四個(gè)狀態(tài)位。 ):+、-、*、/ ADD、ADC、SUB、SBB、MUL、IMUL、DIV、IDIV 例:ADD AX,BX (2)邏輯:與、或、非(求反)、異或(按位加)等有些計(jì)算機(jī)還設(shè)置有位操作指令,如位測(cè)試(測(cè)試指定位的值)、位清除(把指定位清零)、位求反

43、(取某位的反值)指令等?!ND、OR、NOT、XOR、BIT、CLI等例如: AND AX,BX,2.移位操作指令,移位操作指令分為算術(shù)移位、邏輯移位和循環(huán)移位三種。,例:SHL AL,1,3.浮點(diǎn)運(yùn)算指令,高級(jí)語言中的實(shí)數(shù)(real)經(jīng)常是先轉(zhuǎn)換成浮點(diǎn)數(shù)的形式而后再進(jìn)行處理。某些機(jī)器沒有設(shè)置浮點(diǎn)運(yùn)算指令而用子程序?qū)崿F(xiàn),其速度較低。因此主要用于科學(xué)計(jì)算的計(jì)算機(jī)應(yīng)該設(shè)置浮點(diǎn)運(yùn)算指令,一般能對(duì)單精度(32位)、雙精度(64位)數(shù)據(jù)進(jìn)行

44、處理。,4.十進(jìn)制運(yùn)算指令,例:AAA 在人機(jī)交互作用時(shí),輸入輸出的數(shù)據(jù)都是以十進(jìn)制形式表示的。在某些數(shù)據(jù)處理系統(tǒng)中輸入輸出的數(shù)據(jù)很多,但對(duì)數(shù)據(jù)本身的處理卻很簡(jiǎn)單。在不具有十進(jìn)制運(yùn)算指令的計(jì)算機(jī)中,首先將十進(jìn)制數(shù)據(jù)轉(zhuǎn)換成二進(jìn)制數(shù),再在機(jī)器內(nèi)運(yùn)算;爾后又轉(zhuǎn)換成十進(jìn)制數(shù)據(jù)輸出。因此,在輸入輸出數(shù)據(jù)頻繁的計(jì)算機(jī)系統(tǒng)中設(shè)置十進(jìn)制運(yùn)算指令能提高數(shù)據(jù)處理的速度。,5.字符串處理指令,例:MOVS

45、 早期的計(jì)算機(jī)主要用于科學(xué)計(jì)算和工業(yè)控制,指令系統(tǒng)的設(shè)置側(cè)重于數(shù)值運(yùn)算,只有少數(shù)大型機(jī)才有非數(shù)值處理指令。而隨著計(jì)算機(jī)的不斷發(fā)展,應(yīng)用領(lǐng)域不斷擴(kuò)大,計(jì)算機(jī)更多地應(yīng)用于信息管理、數(shù)據(jù)處理、辦公室自動(dòng)化等領(lǐng)域,這就需要有很強(qiáng)的非數(shù)值處理能力。因此,越來越重視非數(shù)值指令的設(shè)置,甚至像Intel8086微處理器都配置了這種指令,使它能夠直接用硬件支持非數(shù)值處理?!  ∫话惆ㄗ址畟魉?、字符串比較、字符串查詢、字符串轉(zhuǎn)換等指令。

46、,6.?dāng)?shù)據(jù)傳送指令,這類指令用以實(shí)現(xiàn)寄存器與寄存器,寄存器與存儲(chǔ)器單元,存儲(chǔ)器單元與存儲(chǔ)器單元之間的數(shù)據(jù)傳送。 對(duì)于存儲(chǔ)器來講,數(shù)據(jù)傳送包括了對(duì)數(shù)據(jù)的讀(相當(dāng)于取數(shù)指令)或?qū)?相當(dāng)于存數(shù)指令)操作。數(shù)據(jù)傳送時(shí),數(shù)據(jù)從源地址傳送到目的地址,而源地址中的數(shù)據(jù)保持不變,因此實(shí)際上是數(shù)據(jù)復(fù)制。 數(shù)據(jù)傳送指令一次可以傳送一個(gè)數(shù)據(jù)或一批數(shù)據(jù),如Intel8086的MOVS指令,一次傳送一

47、個(gè)字或字節(jié),而當(dāng)加上重復(fù)執(zhí)行前綴(REP)后,一次可以把多達(dá)64KB的數(shù)據(jù)塊從存儲(chǔ)器的一個(gè)區(qū)域傳送到另一個(gè)區(qū)域。 有些機(jī)器設(shè)置了數(shù)據(jù)交換指令,完成源操作數(shù)與目的操作數(shù)互換,實(shí)現(xiàn)雙向數(shù)據(jù)傳送。,7.轉(zhuǎn)移類指令,這類指令用以控制程序流的轉(zhuǎn)移。在大多數(shù)情況下,計(jì)算機(jī)是按順序方式執(zhí)行程序的,但是也經(jīng)常會(huì)遇到離開原來的順序轉(zhuǎn)移到另一段程序或循環(huán)執(zhí)行某段程序的情況。 按轉(zhuǎn)移的性質(zhì),轉(zhuǎn)移指令分為無條件轉(zhuǎn)移

48、、條件轉(zhuǎn)移、過程調(diào)用與返回、陷阱(trap)等幾種。,8.堆棧及堆棧操作指令,例:PUSH AX   堆棧(stack)是由若干個(gè)連續(xù)存儲(chǔ)單元組成的先進(jìn)后出(first in last out,簡(jiǎn)稱FILO)存儲(chǔ)區(qū),第一個(gè)送入堆棧中的數(shù)據(jù)存放在棧底,最近送入堆棧中的數(shù)據(jù)存放在棧頂。棧底是固定不變的,而棧頂卻是隨著數(shù)據(jù)的入棧和出棧在不斷變化。為了表示棧頂?shù)奈恢?,有一個(gè)寄存器或存儲(chǔ)器單元用于指出棧頂?shù)牡刂?,這個(gè)寄存器或存儲(chǔ)器

49、單元就稱為堆棧指針(stack pointer,簡(jiǎn)稱SP)。任何堆棧操作只能在棧頂進(jìn)行。,而在一般計(jì)算機(jī)中,堆棧主要用來暫存中斷和子程序調(diào)用時(shí)現(xiàn)場(chǎng)數(shù)據(jù)及返回地址,用于訪問堆棧的指令只有壓入(即進(jìn)棧)和彈出(即退棧)兩種,它們實(shí)際上是一種特殊的數(shù)據(jù)傳送指令。  壓入指令:PUSH   把指定的操作數(shù)送入棧頂  彈出指令:POP   把棧頂?shù)臄?shù)據(jù)取出  在一般的計(jì)算機(jī)中,堆棧從高地址向低地址擴(kuò)展,即棧底的地址總是大于或等于棧頂?shù)牡?/p>

50、址(也有少數(shù)計(jì)算機(jī)剛好相反)。,堆棧圖例(進(jìn)棧)PUSH AX,,,,,,sp,,,,,,push ax,,,,,,,Sp,,AL,AH,,,,,高地址,低地址,進(jìn)棧方向,,(sp) (SP)-2 ((sp)+1,(sp)) (AX),,,9.輸入輸出(I/O)指令,例:IN 、OUT  計(jì)算機(jī)所處理的一切原始數(shù)據(jù)和所執(zhí)行的程序(除了固化在ROM中的以外)均來自外部設(shè)備的輸入,處理結(jié)果需通過外

51、部設(shè)備輸出?! ≥斎胼敵鲋噶畹囊话愀袷饺缦拢?操作碼,寄存器名,外部設(shè)備中的寄存器地址或設(shè)備碼,其長(zhǎng)度一般為8~16位,可以表示256~64K個(gè)設(shè)備寄存器,輸入指令完成從A地址所指定的外部設(shè)備寄存器中讀入一個(gè)數(shù)據(jù)到REG寄存器中;  輸出指令剛好相反,是把REG寄存器中的數(shù)據(jù)送到A地址所指定的外部設(shè)備寄存器中?! 〈送?,I/O指令還可用來發(fā)送和接收控制命令和回答信號(hào),用以控制外部設(shè)備的工作。  有些計(jì)算機(jī)采用外部設(shè)備與

52、存儲(chǔ)器統(tǒng)一編址的方法把外部設(shè)備寄存器看成是存儲(chǔ)器的某些單元,任何訪問存儲(chǔ)器的指令均可訪問外部設(shè)備,因此不再專設(shè)I/O指令。,10.特權(quán)指令,某些指令使用不當(dāng)會(huì)破壞系統(tǒng)或其他用戶信息,因此為了安全起見,這類指令只能用于操作系統(tǒng)或其他系統(tǒng)軟件,而不提供給用戶使用,稱為特權(quán)指令。 一般來說,在單用戶、單任務(wù)的計(jì)算機(jī)中不一定需要特權(quán)指令,而在多用戶、多任務(wù)的計(jì)算機(jī)系統(tǒng)中,特權(quán)指令卻是必不可少的。它主要用于系統(tǒng)資源的分配和管理,

53、包括改變系統(tǒng)的工作方式、檢測(cè)用戶的訪問權(quán)限、修改虛擬存儲(chǔ)器管理的段表、頁(yè)表和完成任務(wù)的創(chuàng)建和切換等。 在某些多用戶的計(jì)算機(jī)系統(tǒng)中,為了統(tǒng)一管理所有的外部設(shè)備,輸入輸出指令也作為特權(quán)指令,不允許用戶直接使用。需輸入輸出時(shí),可通過系統(tǒng)調(diào)用,由操作系統(tǒng)來完成。,11.其他指令,(1)向量指令 (2)多處理機(jī)指令 (3)控制指令   包括等待指令、停機(jī)指令、空操作指令、開中斷、關(guān)中斷、置條件碼指令等。,5.5.2

54、 雙字長(zhǎng)運(yùn)算(子程序舉例),有時(shí)候,需對(duì)雙字長(zhǎng)操作數(shù)進(jìn)行運(yùn)算,而機(jī)器本身并沒有雙字長(zhǎng)指令,這樣就需要通過子程序予以實(shí)現(xiàn)。,1.雙字長(zhǎng)加法運(yùn)算 假設(shè)在寄存器R1,R2和R3,R4分別存放兩個(gè)雙字長(zhǎng)操作數(shù),其中R1,R3為高位。加法運(yùn)算可分為兩種情況討論:,(1)假設(shè)機(jī)器設(shè)置有ADD(加法指令)和ADC(加進(jìn)位的加法指令),則執(zhí)行下列兩條指令后在R3、R4中得到運(yùn)算結(jié)果。 指 令

55、 操 作 說 明 K:ADD R2,R4 ;低位相加,R4←(R3)+(R4),并根據(jù)運(yùn)算結(jié)果置進(jìn)位位C K+1:ADC R1,R3 ;高位相加,并加進(jìn)位位C, R3←(R1)+(R3)+C,(2)假設(shè)機(jī)器僅設(shè)置ADD指令,而沒有ADC指令,則應(yīng)執(zhí)行下列程序: 指 令 操 作 說

56、 明 K:ADD R2,R4;低位相加,R4←(R2)+(R4),并根據(jù)運(yùn)算結(jié)果置進(jìn)位位C K+1:BCC K+3;如C=0,程序轉(zhuǎn)移到K+3,如C=1,順序執(zhí)行下一條指令K+2:ADD #1,R1 ; R1←(R1)+1K+3:ADD R1,R3;高位相加,R3←(R1)+(R3) 在R3、R4中得到運(yùn)算結(jié)果。,2.雙字長(zhǎng)減法運(yùn)算 假設(shè)在R1,R2和R3,R4分別存放雙字長(zhǎng)被減數(shù)和減數(shù),

57、其中R1,R3為高位,R2,R4為低位。求兩數(shù)之差。 現(xiàn)舉例說明,設(shè)操作數(shù)字長(zhǎng)為4位,那么雙字長(zhǎng)為8位,且設(shè)定為不帶符號(hào)位的正數(shù). 被減數(shù)X:0010 1100, 減數(shù)Y:0001 1010。 計(jì)算得:[-Y]補(bǔ)=11100110 [X-Y]補(bǔ)=X+[-Y]補(bǔ) =00101100+11100110=00010010。,高位

58、 低位 0 0 l 0 1 1 0 0 +) 1 1 1 0 0 1 1 0 0 0 0 1 0 0 1 0 進(jìn)位,,,,在上例中低位向高位產(chǎn)生進(jìn)位信號(hào)。但在計(jì)算機(jī)中對(duì)低位進(jìn)行減法運(yùn)算時(shí)因低位夠減,所以不產(chǎn)生借位,即C=0。高位部分實(shí)際上相當(dāng)于補(bǔ)碼相減。,若減數(shù)為0

59、001 1110,則(-Y)補(bǔ)=11100010, (X-Y)補(bǔ)=X+(-Y)補(bǔ)=00101100+11100010 =00001110。 高位 低位 0 0 l 0 1 1 0 0 +) 1 1 1 0 0 1 1 0 0 0 0 0 1 1 1 0 在上例中,

60、低位無進(jìn)位信號(hào),但此時(shí)低位不夠減,向高位借位,所以C=1。高位部分相當(dāng)于反碼相減。,,,雙字長(zhǎng)減法運(yùn)算步驟可歸納如下: (1)低位相減:若不夠減,置C=1; 夠減,置C=0。 (2)高位相減:若上次運(yùn)算后,C=0,減數(shù)取補(bǔ)碼; C=1,減數(shù)取反碼。 一般機(jī)器中設(shè)置有按補(bǔ)碼運(yùn)算的減法指令。,假如機(jī)器沒有設(shè)置減反碼指令,則程序可安排如下: 指 令

61、 操 作 說 明 K: SUB R2,R4 ; R4←(R2)-(R4),并根據(jù)運(yùn)算結(jié)果置借位C K+1:BCC K+3; 若C=0,轉(zhuǎn)移到K+3 K+2:ADD #1,R3 ;R3←(R3)+1 K+3: SUB R1,R3 ;R3←(R1)--(R3) 在R3、R4中得到兩數(shù)之差。,課后作業(yè),1 某指令系統(tǒng)指令長(zhǎng)16位,每個(gè)操作數(shù)的地址碼長(zhǎng)6

62、位,指令分為無操作數(shù)、單操作數(shù)和雙操作數(shù)三類。若雙操作數(shù)指令有K條,無操作數(shù)指令有L條,問單操作數(shù)指令最多可能有多少條?2 基址寄存器的內(nèi)容為2000H(H表示十六進(jìn)制),變址寄存器內(nèi)容為03A0H,指令的地址碼部分是3FH,當(dāng)前正在執(zhí)行的指令所在地址為2B00H,請(qǐng)求出變址編址(考慮基址)和相對(duì)編址兩種情況的訪存有效地址(即實(shí)際地址)。,,3 接上題(1) 設(shè)變址編址用于取數(shù)指令,相對(duì)編址用于轉(zhuǎn)移指令,存儲(chǔ)器內(nèi)存放的內(nèi)容如下:

63、 地址內(nèi)容003FH 2300H2000H 2400H203FH 2500H 233FH 2600H23A0H2700H23DFH2800H2B00H 063FH請(qǐng)寫出從存儲(chǔ)器中所取的數(shù)據(jù)以及轉(zhuǎn)移地址。(2) 若采取直接編址,請(qǐng)寫出從存儲(chǔ)器取出的數(shù)據(jù)。,,4 在下面有關(guān)尋址方式的

64、敘述中,選擇正確答案填入( )內(nèi)。根據(jù)操作數(shù)所在位置,指出其尋址方式:操作數(shù)在寄存器中,為(A)尋址方式;操作數(shù)地址在寄存器中稱為(B)尋址方式;操作數(shù)在指令中,稱為(C)尋址方式;操作數(shù)地址(主存)在指令中,為(D)尋址方式。操作數(shù)的地址,為某一寄存器中的內(nèi)容與位移量之和則可以是(E)、(F)、(G)尋址方式。供選擇的答案:A、B、C、D、E、F、G:① 直接② 寄存器③ 寄存器間接④ 基址⑤ 變址 ⑥ 相對(duì)⑦ 堆棧⑧ 立即數(shù)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論