計算機(jī)組成原理-指令系統(tǒng).ppt_第1頁
計算機(jī)組成原理-指令系統(tǒng).ppt_第2頁
計算機(jī)組成原理-指令系統(tǒng).ppt_第3頁
計算機(jī)組成原理-指令系統(tǒng).ppt_第4頁
計算機(jī)組成原理-指令系統(tǒng).ppt_第5頁
已閱讀5頁,還剩91頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第3章指令系統(tǒng),1,2,指令、指令系統(tǒng)是計算機(jī)中一個最基本的概念。指令是指示計算機(jī)執(zhí)行某些操作的命令,一臺計算機(jī)的所有指令的集合構(gòu)成該機(jī)的指令系統(tǒng)。指令系統(tǒng)是計算機(jī)的主要屬性,位于硬件和軟件的交界面上。本章將討論一般計算機(jī)的指令系統(tǒng)所涉及的基本問題。,ADDC A , R1 SUB A , R1 AND A ,#55H OR A , 02H END,2020/9/19,3,2020/9/19,4,本章學(xué)習(xí)內(nèi)容,3.1 指令格式 3.2 尋址技術(shù) 3.3 堆棧與堆棧操作 3.4 指令類型,5,本章學(xué)習(xí)要求,理解:指令的基本格式以及不同地址碼(3、2、1、0地址)的雙操作數(shù)指令的區(qū)別 理解:規(guī)整型

2、指令和非規(guī)整型指令的特點(diǎn) 掌握:擴(kuò)展操作碼的方法 理解:編址單位和指令中地址碼的位數(shù)與主存容量、最小尋址單位的關(guān)系 掌握:基本的數(shù)據(jù)尋址方式和有效地址EA的計算方法 掌握:自底向上的存儲器堆棧的概念及堆棧的進(jìn)、出棧操作 理解:常用指令的特點(diǎn),6,3.1 指令格式,一臺計算機(jī)指令格式的選擇和確定要涉及多方面的因素,如指令長度、地址碼結(jié)構(gòu)以及操作碼結(jié)構(gòu)等,是一個很復(fù)雜的問題,它與計算機(jī)系統(tǒng)結(jié)構(gòu)、數(shù)據(jù)表示方法、指令功能設(shè)計等都密切相關(guān)。,7,3.1.1 機(jī)器指令的基本格式,一條指令就是機(jī)器語言的一個語句,它是一組有意義的二進(jìn)制代碼。,8,9,指令的長度是指一條指令中所包含的二進(jìn)制代碼的位數(shù),它取決于

3、操作碼字段的長度、操作數(shù)地址的個數(shù)及長度。 指令長度可以等于機(jī)器字長,也可以大于或小于機(jī)器字長。 在一個指令系統(tǒng)中,若所有指令的長度都是相等的,稱為定長指令字結(jié)構(gòu);若各種指令的長度隨指令功能而異,稱為變長指令字結(jié)構(gòu)。,10,3.1.2 地址碼結(jié)構(gòu),一條雙操作數(shù)指令的除操作碼之外,還應(yīng)包含以下信息: 第一操作數(shù)地址,用A1表示; 第二操作數(shù)地址,用A2表示; 操作結(jié)果存放地址,用A3表示; 下條將要執(zhí)行指令的地址,用A4表示。 這些信息可以在指令中明顯的給出,稱為顯地址;也可以依照某種事先的約定,用隱含的方式給出,稱為隱地址。,1.四地址指令,(A1)OP(A2)A3 A4下條將要執(zhí)行指令的地址

4、 其中:Ai表示地址,(Ai)表示存放于該地址中的內(nèi)容。,11,2.三地址指令,(A1)OP(A2)A3 (PC)+1PC(隱含) 執(zhí)行一條三地址的雙操作數(shù)運(yùn)算指令,至少需要訪問4次主存。第一次取指令本身,第二次取被操作數(shù),第三次取操作數(shù),第四次保存運(yùn)算結(jié)果。,12,3.二地址指令,(A1)OP(A2)A1 (PC)+1PC(隱含) 其中:A1為目的操作數(shù)地址,A2為源操作數(shù)地址。 二地址指令執(zhí)行之后,目的操作數(shù)地址中原存的內(nèi)容已被破壞了。 執(zhí)行一條二地址的雙操作數(shù)運(yùn)算指令,同樣至少需要訪問4次主存。,13,4.一地址指令,(Acc)OP(A1)Acc (PC)+1PC(隱含) 執(zhí)行一條一地址

5、的雙操作數(shù)運(yùn)算指令,只需要訪問兩次主存。第一次取指令本身,第二次取操作數(shù)。被操作數(shù)和運(yùn)算結(jié)果都放在累加寄存器中,所以讀取和存入都不需要訪問主存。,14,5.零地址指令,零地址的算邏類指令是用在堆棧計算機(jī)中的,堆棧計算機(jī)沒有一般計算機(jī)中必備的通用寄存器,因此堆棧就成為提供操作數(shù)和保存運(yùn)算結(jié)果的唯一場所。通常,參加算邏運(yùn)算的兩個操作數(shù)隱含地從堆棧頂部彈出,送到運(yùn)算器中進(jìn)行運(yùn)算,運(yùn)算的結(jié)果再隱含地壓入堆棧。,15,不同地址數(shù)指令的特點(diǎn)和適用場合,對于同一個問題,用三地址指令編寫的程序最短,但指令長度最長,而用二、一、零地址指令來編寫程序,程序的長度一個比一個長,但指令的長度一個比一個短。,16,17

6、,指令系統(tǒng)中的每一條指令都有一個唯一確定的操作碼,指令不同,其操作碼的編碼也不同。通常,希望用盡可能短的操作碼字段來表達(dá)全部的指令。指令操作碼的編碼可以分為規(guī)整型和非規(guī)整型兩類。,3.1.3 指令的操作碼,18,1.規(guī)整型,操作碼字段的位數(shù)和位置是固定的。 假定:指令系統(tǒng)共有m條指令,指令中操作碼字段的位數(shù)為N位,則有如下關(guān)系式: Nlog2 m 規(guī)整型編碼對于簡化硬件設(shè)計,減少指令譯碼的時間是非常有利的。 IBM 370機(jī)(字長32位)的指令可分為三種不同的長度,不論指令的長度為多少位,其中操作碼字段一律都是8位。,19,IBM 370機(jī)的指令格式,圖3-1 IBM 370機(jī)的指令格式,20

7、,2.非規(guī)整型,操作碼字段的位數(shù)不固定,且分散地放在指令字的不同位置上。 PDP-11機(jī)(字長16位)的指令分為單字長、兩字長、三字長三種,操作碼字段占416位不等,可遍及整個指令長度。 顯然,操作碼字段的位數(shù)和位置不固定將增加指令譯碼和分析的難度,使控制器的設(shè)計復(fù)雜化。,21,PDP-11機(jī)的指令格式,圖3-2 PDP-11機(jī)的指令格式,22,最常用的非規(guī)整型編碼方式是擴(kuò)展操作碼法。 讓操作數(shù)地址個數(shù)多的指令(如三地址指令)的操作碼字段短些,操作數(shù)地址個數(shù)少的指令(如一或零地址指令)的操作碼字段長些。,擴(kuò)展操作碼法,23,例如:設(shè)某機(jī)的指令長度為16位,操作碼字段為4位,有三個4位的地址碼字

8、段。 如果按照定長編碼的方法,4位操作碼字段最多只能表示16條不同的三地址指令。,24,OP,1111,1111 1111,1111 1111 1111,擴(kuò)展窗口,擴(kuò)展窗口,擴(kuò)展窗口,OP,25,例題: 設(shè)機(jī)器指令字長為16位,指令中地址字段的長度為4位。如果指令系統(tǒng)中已有11條三地址指令、72條二地址指令和64條零地址指令,問最多還能規(guī)定多少條一地址指令?,3.2 尋址技術(shù),所謂尋址,指的是尋找操作數(shù)的地址或下一條將要執(zhí)行的指令地址。尋址技術(shù)包括編址方式和尋址方式。,26,27,1.編址單位 字編址 編址單位=訪問單位 每個編址單位所包含的信息量(二進(jìn)制位數(shù))與讀或?qū)懸淮渭拇嫫?、主存所獲得的

9、信息量是相同的。早期的大多數(shù)機(jī)器都采用這種編址方式。,3.2.1 編址方式,28,字節(jié)編址 字節(jié)編址為了適應(yīng)非數(shù)值計算的需要。字節(jié)編址方式使編址單位與信息的基本單位(一個字節(jié))相一致,這是它的最大優(yōu)點(diǎn)。然而,如果主存的訪問單位也是一個字節(jié)的話,那么主存的頻帶就太窄了。 編址單位訪問單位 通常主存的訪問單位是編址單位的若干倍。 位編址 有部分計算機(jī)系統(tǒng)采用位編址方式。,29,2. 指令中地址碼的位數(shù),指令格式中每個地址碼的位數(shù)是與主存容量和最小尋址單位(即編址單位)有關(guān)聯(lián)的。主存容量越大,所需的地址碼位數(shù)就越長。對于相同容量來說,如果以字節(jié)為最小尋址單位,地址碼的位數(shù)就需要長些;如果以字為最小尋

10、址單位(假定字長為16位或更長),地址碼的位數(shù)可以減少。 例如:設(shè)某機(jī)主存容量為220 個字節(jié),機(jī)器字長32位。若最小尋址單位為字節(jié)(按字節(jié)編址),其地址碼應(yīng)為20位;若最小尋址單位為字(按字編址),其地址碼只需18位。,30,尋址可以分為指令尋址和數(shù)據(jù)尋址。尋找下一條將要執(zhí)行的指令地址稱為指令尋址,尋找操作數(shù)的地址稱為數(shù)據(jù)尋址。,3.2.2 指令尋址和數(shù)據(jù)尋址,尋址方式,31,指令尋址 順序?qū)ぶ房赏ㄟ^程序計數(shù)器PC加1,自動形成下一條指令的地址;跳躍尋址則需要通過程序轉(zhuǎn)移類指令實(shí)現(xiàn)。 跳躍尋址的轉(zhuǎn)移地址形成方式有3種:直接(絕對)、相對和間接尋址,它與下面介紹的數(shù)據(jù)尋址方式中的直接、相對和間

11、接尋址是相同的,只不過尋找到的不是操作數(shù)的有效地址而是轉(zhuǎn)移的有效地址而已。,32,數(shù)據(jù)尋址方式是根據(jù)指令中給出的地址碼字段尋找真實(shí)操作數(shù)地址的方式。 指令中的形式地址A有效地址EA 每種計算機(jī)的指令系統(tǒng)都有自己的一套數(shù)據(jù)尋址方式,不同計算機(jī)的尋址方式的名稱和含義并不統(tǒng)一,下面介紹大多數(shù)計算機(jī)常用的幾種基本尋址方式。,3.2.3 基本的數(shù)據(jù)尋址方式,尋址方式,一、指令尋址,順序,跳躍,由轉(zhuǎn)移指令指出,L0: MOV A, #01,LOOP:,SUB A, #01,JC LOOP,JZ LOOP,JMP L0,END,0,1,2,3,4,5,6,7,8,9,PC,+1,指令地址尋址方式,指令地址,

12、指令,2020/9/19,34,二、數(shù)據(jù)尋址,形式地址,指令字中的地址,有效地址,操作數(shù)的真實(shí)地址,尋址方式的要求:, 指令內(nèi)包含的地址盡可能短,以縮短指令長度。 能訪問盡可能大的存儲空間。 即能提供盡可能長的地址信息。根據(jù)程序所具有的局部性特性,大多數(shù)程序在一段時間內(nèi)都使用存儲器的一個小區(qū)域,所以,可以用短地址訪問該區(qū)域內(nèi)的任一單元的。 希望地址能隱含在寄存器中。 因?yàn)榧拇嫫鞯刂繁容^短,而寄存器長度一般與機(jī)器字長相同,在字長較長的機(jī)器中寄存器內(nèi)存放的地址可訪問很大的存儲空間,所以地址隱含在寄存器,可以減少指令長度 能在不改變指令的情況下改變地址的實(shí)際值。 即在數(shù)組、向量、線性表、字符串等數(shù)據(jù)

13、結(jié)構(gòu)的操作中,能夠?qū)崿F(xiàn)操作數(shù)地址的最大增減量。 尋址方式盡可能簡單規(guī)范,以簡化硬件設(shè)計。,2020/9/19,35,36,指令中給出的不是通常意義上的操作數(shù)地址,而是操作數(shù)本身,也就是說數(shù)據(jù)就包含在指令中,只要取出指令,也就取出了可以立即使用的操作數(shù)。 在取指令時,操作碼和操作數(shù)被同時取出,不必再次訪問主存,從而提高了指令的執(zhí)行速度。但是,因?yàn)椴僮鲾?shù)是指令的一部分,不能被修改,而且立即數(shù)的大小受到指令長度的限制,所以這種尋址方式靈活性最差,通常用于給某一寄存器或主存單元賦初值或提供一個常數(shù)。,立即尋址,37,例: MOV CX , 0B3CAH ;將16位立即數(shù)送入AX中 MOV AL,25

14、MOV BX,”AB” MOV AH, C,38,寄存器尋址指令的地址碼部分給出某一個通用寄存器的編號,這個指定的寄存器中存放著操作數(shù)。操作數(shù)S與寄存器Ri的關(guān)系為: S=(Ri) 寄存器尋址具有兩個明顯的優(yōu)點(diǎn): 從寄存器中存取數(shù)據(jù)比從主存中快得多; 由于寄存器的數(shù)量較少,其地址碼字段比主存單元地址字段短得多。,寄存器尋址,39,例: MOV BL,AL MOV CH,DL MOV DX,CX,40,指令中地址碼字段給出的地址A就是操作數(shù)的有效地址,即形式地址等于有效地址:EA=A。由于這樣給出的操作數(shù)地址是不能修改的,與程序本身所在的位置無關(guān),所以又叫做絕對尋址方式。 操作數(shù)S=(A) 這種

15、尋址方式不需作任何尋址運(yùn)算,簡單直觀,也便于硬件實(shí)現(xiàn),但地址空間受到指令中地址碼字段位數(shù)的限制。,直接尋址,41,例: MOV BX, DS:1000H 該指令中,源操作數(shù)的有效地址用數(shù)值地址表示,即將當(dāng)前數(shù)據(jù)段偏移1000H個字節(jié)的字單元內(nèi)容送入BX中,源操作數(shù)的有效地址EA是1000H.,執(zhí)行階段訪問一次存儲器,地址A 的位數(shù)決定了該指令操作數(shù)的尋址范圍,操作數(shù)的地址不易修改(必須修改A),42,間接尋址意味著指令中給出的地址A不是操作數(shù)的地址;而是存放操作數(shù)地址的主存單元的地址,簡稱操作數(shù)地址的地址。通常在指令格式中劃出一位作為直接或間接尋址的標(biāo)志位,間接尋址時標(biāo)志位=1。 在一級間接尋

16、址中, EA=(A) S=(A),間接尋址,43,間接尋址過程,一級間接尋址: 三級間接尋址: 圖3-5 間接尋址過程,例1: MOV BX,2050H 目的操作數(shù)BX是寄存器間接尋址方式。 例2: MOV AX,BP 源操作數(shù)BP是寄存器間接尋址方式。,2020/9/19,44,執(zhí)行指令階段 2 次訪存,可擴(kuò)大尋址范圍,便于編制程序,45,間接尋址要比直接尋址靈活得多,它的主要優(yōu)點(diǎn)為: 擴(kuò)大了尋址范圍,可用指令的短地址訪問大的主存空間。 可將主存單元作為程序的地址指針,用以指示操作數(shù)在主存中的位置。當(dāng)操作數(shù)的地址需要改變時,不必修改指令,只需修改存放有效地址的那個主存單元(間接地址單元)的內(nèi)

17、容就可以了。,46,寄存器間接尋址,指令中的地址碼給出某一通用寄存器的編號,在被指定的寄存器中存放操作數(shù)的有效地址,而操作數(shù)則存放在主存單元中。 S=(Ri) 圖3-6 寄存器間接尋址過程,47,變址尋址,把變址寄存器Rx的內(nèi)容與指令中給出的形式地址A相加,形成操作數(shù)有效地址,即EA=(Rx)+A。Rx的內(nèi)容稱為變址值。 S=(Rx)+A) 圖3-7 變址尋址過程,48,基址尋址,基址寄存器Rb的內(nèi)容與指令中給出的位移量D相加,形成操作數(shù)有效地址,即EA=(Rb)+D?;芳拇嫫鞯膬?nèi)容稱為基址值。指令的地址碼字段是一個位移量,位移量可正、可負(fù)。 S=(Rb)+D),49,基址尋址,圖3-8 基

18、址尋址過程,50,相對尋址,相對尋址是基址尋址的一種變通,由程序計數(shù)器PC提供基準(zhǔn)地址,指令中的地址碼字段作為位移量D,兩者相加后得到操作數(shù)的有效地址,即EA=(PC)+D。位移量指出的是操作數(shù)和現(xiàn)行指令之間的相對位置。 圖3-9 相對尋址過程,51,相對尋址方式的特點(diǎn),操作數(shù)的地址不是固定的,它隨著PC值的變化而變化,并且與指令地址之間總是相差一個固定值D。當(dāng)指令地址改變時,由于其位移量不變,使得操作數(shù)與指令在可用的存儲區(qū)內(nèi)一起移動,所以仍能保證程序的正確執(zhí)行。采用PC相對尋址方式編寫的程序可在主存中任意浮動,它放在主存的任何地方,所執(zhí)行的效果都是一樣的。 由于指令中給出的位移量可正、可負(fù),

19、所以對于指令地址而言,操作數(shù)地址可能在指令地址之前或之后。,52,頁面尋址,頁面尋址相當(dāng)于將整個主存空間分成若干個大小相同的區(qū),每個區(qū)稱為一頁,每頁有若干個主存單元。每頁都有自己的編號,稱為頁面地址;頁面內(nèi)的每個主存單元也有自己的編號,稱為頁內(nèi)地址。這樣,操作數(shù)的有效地址就被分為兩部分:前部為頁面地址,后部為頁內(nèi)地址。,53,為了能區(qū)分出各種不同尋址方式,必須在指令中給出標(biāo)識。標(biāo)識的方式通常有兩種:顯式和隱式。 顯式的方法就是在指令中設(shè)置專門的尋址方式字段,用二進(jìn)制代碼來表明尋址方式類型。 隱式的方式是由指令的操作碼字段說明指令格式并隱含約定尋址方式。,區(qū)分不同的尋址方式,54,注意,一條指令

20、若有兩個或兩個以上的地址碼時,各地址碼可采用不同的尋址方式。例如,源地址采用一種尋址方式,而目的地址采用另一種尋址方式。 MOV AX,(BX),寄存器直接尋址,寄存器間接尋址,55,2.3.4 變型或組合尋址方式,1.自增型寄存器間址和自減型寄存器間址 (1)自增尋址 寄存器Ri的內(nèi)容是有效地址,按照這個有效地址從主存中取數(shù)以后,寄存器的內(nèi)容自動增量修改。在字節(jié)編址的計算機(jī)中,若指向下一個字節(jié),寄存器的內(nèi)容+1;若指向下一個字(設(shè)字長16位),寄存器的內(nèi)容+2。 自增尋址操作的含義為: EA=(Ri) Ri(Ri)+d 其中:EA為有效地址,d為修改量,通常記作(Ri)+,加號在括號之后,形

21、象地表示先操作后修改。,56,自減尋址 自減尋址是先對寄存器Ri的內(nèi)容自動減量修改(-1或-2),修改之后的內(nèi)容才是操作數(shù)的有效地址,據(jù)此可到主存中取出操作數(shù)。 自減尋址操作的含義為: Ri(Ri)-d EA=(Ri) 通常記作-(Ri),減號在括號之前,形象地表示先修改后操作。,例:VAX11指令: MOV (R1)+,R0 寄存器R1中內(nèi)容先作為源操作數(shù)地址,讀數(shù)后R1按操作數(shù)長度增量。 例:設(shè)每次增量為1,若R11000H,指令執(zhí)行后,R11001H。 MOV -(R1),R0 寄存器R1按操作數(shù)長度減量后作為源操作數(shù)地址,并將減量結(jié)果送回R1。 例:設(shè)每次減量為1,R11000H,指令

22、執(zhí)行時先將R1減1,R10FFFH,然后按R1讀源操作數(shù)。,2020/9/19,57,58,2.擴(kuò)展變址方式(略),把變址和間址兩種尋址方式結(jié)合起來,就成為擴(kuò)展變址方式,按尋址方式操作的先后順序,有前變址和后變址兩種形式。 先變址后間址(前變址方式) 先進(jìn)行變址運(yùn)算,其運(yùn)算結(jié)果作為間接地址,間接地址指出的單元的內(nèi)容才是有效地址。所以,有效地址EA=(A+(Rx),操作數(shù)S=(A+(Rx)。,59,2.擴(kuò)展變址方式(續(xù)),先間址后變址(后變址方式) 將指令中的地址碼先進(jìn)行一次間接尋址,然后再與變址值進(jìn)行運(yùn)算,從而得到一個有效地址。所以,有效地址EA=(A)+(Rx),操作數(shù)S=(A)+(Rx)。

23、,60,3.基址變址尋址,基址變址尋址是最靈活的一種尋址方式,此時有效地址是由基址寄存器中的值、變址寄存器中的值和位移量三者相加求得的。在這三項(xiàng)中,除位移量在指令一旦確定后就不能再修改以外,基址和變址寄存器中的內(nèi)容都可以改變。 EA=(Rb)+(Rx)+D 其中:Rb為基址寄存器,Rx為變址寄存器,D為位移量。,61,3.3 堆棧與堆棧操作,堆棧是一種按特定順序進(jìn)行存取的存儲區(qū),這種特定順序可歸結(jié)為“后進(jìn)先出”(LIFO)或“先進(jìn)后出”(FILO)。,62,3.3.1 堆棧結(jié)構(gòu),1.寄存器堆棧 用一組專門的寄存器構(gòu)成寄存器堆棧,又稱為硬堆棧。這種堆棧的棧頂是固定的,寄存器組中各寄存器是相互連接

24、的,它們之間具有對應(yīng)位自動推移的功能,即可將一個寄存器的內(nèi)容推移到相鄰的另一個寄存器中去。,63,寄存器堆棧,圖3-14 寄存器堆棧結(jié)構(gòu),64,65,2.存儲器堆棧,從主存中劃出一段區(qū)域來作堆棧,這種堆棧又稱為軟堆棧,堆棧的大小可變,棧底固定,棧頂浮動,故需要一個專門的硬件寄存器作為堆棧棧頂指針SP,簡稱棧指針。棧指針?biāo)付ǖ闹鞔鎲卧?,就是堆棧的棧頂?圖3-15 存儲器堆棧結(jié)構(gòu),66,67,自底向上生成堆棧的進(jìn)棧,堆棧的棧底地址大于棧頂?shù)刂罚ǔV羔樖冀K指向棧頂?shù)臐M單元。進(jìn)棧時,SP的內(nèi)容需要先自動減1,然后再將數(shù)據(jù)壓入堆棧。,2000,1FFF,(SP)-1SP 修改棧指針,(A)(SP

25、) 將A中的數(shù)據(jù)壓入堆棧,現(xiàn)棧頂 單元,1FFF,68,自底向上生成堆棧的出棧,出棧時,需要先將堆棧中的數(shù)據(jù)彈出,然后SP的內(nèi)容再自動加1。,2000,(SP)A 將棧頂內(nèi)容彈出,送入A中,(SP)+1SP 修改棧指針,現(xiàn)棧頂 單元,1FFF,2000,自底向上生成堆棧的工作過程,2020/9/19,69,70,自頂向下生成堆棧的工作過程,(SP)+1SP 修改棧指針,(A)(SP) 將A中的數(shù)據(jù)壓入堆棧,入棧,出棧,(SP)-1SP 修改棧指針,(A)(SP) 將A中的數(shù)據(jù)彈出堆棧,71,比較:存儲器堆棧的操作方式與寄存器堆棧不同,它移動的是棧頂,而在寄存器堆棧中移動的是數(shù)據(jù)。,72,3.2

26、.2 堆棧操作,堆棧操作既不是在堆棧中移動它所存儲的內(nèi)容,也不是把已存儲在棧中的內(nèi)容從棧中抹掉,而是通過調(diào)整堆棧指針而給出新的棧頂位置,以便對位于棧頂位置的數(shù)據(jù)進(jìn)行操作。 在一般計算機(jī)中,堆棧主要用來暫存中斷斷點(diǎn)、子程序調(diào)用時的返回地址、狀態(tài)標(biāo)志及現(xiàn)場信息等,也可用于子程序調(diào)用時參數(shù)的傳遞,所以用于訪問堆棧的指令只有進(jìn)棧(壓入)和出棧(彈出)兩種。,2020/9/19,73,堆棧尋址舉例,PUSH A 前,PUSH A 后,POP A 前,POP A 后,2020/9/19,74,子程序的調(diào)用和返回,CALL SUB1,CALL SUB2,CALL SUB2,RETURN,RETURN,用堆棧

27、存放主程序的返回地址,實(shí)現(xiàn)子程序的嵌套和遞歸調(diào)用;,75,在堆棧計算機(jī)中,堆棧是保存操作數(shù)和運(yùn)算結(jié)果的唯一場所。此時的算術(shù)邏輯類指令中沒有地址碼字段,故稱為零地址指令。參加運(yùn)算的兩個操作數(shù)隱含地從堆棧頂部彈出,送到運(yùn)算器中進(jìn)行運(yùn)算,運(yùn)算的結(jié)果再隱含地壓入堆棧。如果將算術(shù)表達(dá)式改寫為逆波蘭表達(dá)式,用零地址指令進(jìn)行運(yùn)算是十分方便的。 例如:有算術(shù)表達(dá)式ab+cd,運(yùn)算結(jié)果送x,這個算術(shù)表達(dá)式可以用逆波蘭法表示成為abcd+。,3.2.2 堆棧操作(續(xù)),76,PUSH A;數(shù)據(jù)a壓入堆棧 PUSH B;數(shù)據(jù)b壓入堆棧 MUL;完成ab PUSH C;數(shù)據(jù)c壓入堆棧 PUSH D;數(shù)據(jù)d壓入堆棧 D

28、IV;完成cd ADD;完成ab+cd POP X;結(jié)果存入X單元 執(zhí)行一條零地址的雙操作數(shù)運(yùn)算指令,如果是軟堆棧,則需要訪問4次主存;如果是硬堆棧,則只需要訪問一次主存。,77,一臺計算機(jī)的指令系統(tǒng)可以有上百條指令,這些指令按其功能可以分成幾種類型。,3.4 指令類型,78,1.一般傳送指令 一般傳送指令具有數(shù)據(jù)復(fù)制的性質(zhì),即數(shù)據(jù)從源地址傳送到目的地址,而源地址中的內(nèi)容保持不變。一般傳送類指令常用助記符MOV表示,根據(jù)數(shù)據(jù)傳送的源和目的的不同,又可分為: 主存單元之間的傳送。 從主存單元傳送到寄存器。在有些計算機(jī)中,該指令用助記符LOAD表示。 從寄存器傳送到主存單元。在有些計算機(jī)里,該指令

29、用助記符STORE表示。 寄存器之間的傳送。,3.4.1 數(shù)據(jù)傳送類指令,2.堆棧操作指令,堆棧指令實(shí)際上是一種特殊的數(shù)據(jù)傳送指令,分為進(jìn)棧(PUSH)和出棧(POP)兩種,在程序中它們往往是成對出現(xiàn)的。 如果堆棧是主存的一個特定區(qū)域,那么對堆棧的操作也就是對存儲器的操作。 3.數(shù)據(jù)交換指令 前述的傳送都是單方向的。然而,數(shù)據(jù)傳送也可以是雙方向的,即將源操作數(shù)與目的操作數(shù)(一個字節(jié)或一個字)相互交換位置(XCHG)。,79,80,1.算術(shù)運(yùn)算類指令 算術(shù)運(yùn)算指令主要用于定點(diǎn)和浮點(diǎn)運(yùn)算。這類運(yùn)算包括定點(diǎn)加、減、乘、除指令,浮點(diǎn)加、減、乘、除指令以及加1(INC)、減1(DEC)、比較(CMP)等

30、,有些機(jī)器還有十進(jìn)制算術(shù)運(yùn)算指令。 絕大多數(shù)算術(shù)運(yùn)算指令都會影響到狀態(tài)標(biāo)志位,通常的標(biāo)志位有進(jìn)位、溢出、全零、正負(fù)和奇偶等。,3.4.2 運(yùn)算類指令,81,計算機(jī)都具有與、或、非、異或等邏輯運(yùn)算指令。這類指令在沒有設(shè)置專門的位操作指令的計算機(jī)中常用于對數(shù)據(jù)字(字節(jié))中某些位(一位或多位)進(jìn)行操作,常見的應(yīng)用有: 按位測(位檢查) 利用“與”指令可以屏蔽掉數(shù)據(jù)字(字節(jié))中的某些位。通常讓被檢查數(shù)作為目的操作數(shù),屏蔽字作為源操作數(shù),要檢測某些位,可使屏蔽字的相應(yīng)位為“1”,其余位為“0”,然后執(zhí)行“與”指令,則可取出所要檢查的位來。,2.邏輯運(yùn)算類指令,82,按位清(位清除) 利用“與”指令還可以

31、使目的操作數(shù)的某些位置“0”。只要源操作數(shù)的相應(yīng)位為“0”,其余位為“1”,然后執(zhí)行“與”指令即可。 按位置(位設(shè)置) 利用“或”指令可以使目的操作數(shù)的某些位置“1”。只要源操作數(shù)的相應(yīng)位為“1”,其余位為“0”,然后執(zhí)行“或”指令即可。,83,按位修改 利用“異或”指令可以修改目的操作數(shù)的某些位,只要源操作數(shù)的相應(yīng)位為“1”,其余位為“0”,異或之后就達(dá)到了修改這些位的目的(因?yàn)锳1= ,A0=A)。 判符合 若兩數(shù)相符合,其異或之后的結(jié)果必定為“0”。,84,移位指令分為算術(shù)移位、邏輯移位和循環(huán)移位三類,它們又可分為左移和右移兩種。 算術(shù)移位 算術(shù)移位的對象是帶符號數(shù),在移位過程中必須保持

32、操作數(shù)的符號不變。當(dāng)左移一位時,如不產(chǎn)生溢出,則數(shù)值2;而右移一位時,如不考慮因移出舍去的末位尾數(shù),則數(shù)值2。,3.移位類指令,85,邏輯移位 邏輯移位的對象是無符號數(shù),因此移位時不必考慮符號問題。 循環(huán)移位 循環(huán)移位按是否與進(jìn)位位一起循環(huán)又分為兩種: 小循環(huán)(不帶進(jìn)位循環(huán)) 大循環(huán)(帶進(jìn)位循環(huán)),86,1.轉(zhuǎn)移指令 在程序執(zhí)行過程中,通常采用轉(zhuǎn)移指令來改變程序的執(zhí)行順序。轉(zhuǎn)移指令又分無條件轉(zhuǎn)移和條件轉(zhuǎn)移兩種: 無條件轉(zhuǎn)移又稱必轉(zhuǎn),它在執(zhí)行時將改變程序的常規(guī)執(zhí)行順序,不受任何條件的約束,直接把程序轉(zhuǎn)向該指令指出的新的位置執(zhí)行,其助記符一般為JMP。 條件轉(zhuǎn)移必須受到條件的約束,若條件滿足時才執(zhí)

33、行轉(zhuǎn)移,否則程序仍順序執(zhí)行。條件轉(zhuǎn)移指令主要用于程序的分支,當(dāng)程序執(zhí)行到某處時,要在兩個分支中選擇一支,這就需要根據(jù)某些測試條件作出判斷。,3.4.3 程序控制類指令,87,無論是條件轉(zhuǎn)移還是無條件轉(zhuǎn)移都需要給出轉(zhuǎn)移地址。 若采用相對尋址方式,轉(zhuǎn)移地址為當(dāng)前指令地址(即PC的值)和指令中給出的位移量之和,即(PC)+位移量PC; 若采用絕對尋址方式,轉(zhuǎn)移地址由指令的地址碼字段直接給出,即APC。,88,子程序是一組可以公用的指令序列,只要知道子程序的入口地址就能調(diào)用它。通常把一些需要重復(fù)使用并能獨(dú)立完成某種特定功能的程序單獨(dú)編成子程序,在需要時由主程序調(diào)用它們,這樣做既簡化了程序設(shè)計,又節(jié)省了存儲空間。 主程序和子程序是相對的概念,調(diào)用其他程序的程序是主程序;被其他程序調(diào)用的程序是子程序。,2.子程序調(diào)用指令,89,子程序調(diào)用指令,簡稱轉(zhuǎn)子指令,其助記符一般為

溫馨提示

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

最新文檔

評論

0/150

提交評論