第 5 章 指令系統(tǒng)-計算機組成原理_第1頁
第 5 章 指令系統(tǒng)-計算機組成原理_第2頁
第 5 章 指令系統(tǒng)-計算機組成原理_第3頁
第 5 章 指令系統(tǒng)-計算機組成原理_第4頁
第 5 章 指令系統(tǒng)-計算機組成原理_第5頁
已閱讀5頁,還剩167頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2023/2/51第5章指令系統(tǒng)

?修訂第1版2016.92023/2/52本章學(xué)習(xí)內(nèi)容指令系統(tǒng)的設(shè)計方法指令格式尋址方式CISC和RISC的概念2023/2/535.1機器指令

指令:控制計算機執(zhí)行某種操作的命令。機器語言:計算機硬件實體直接表示控制信息的語言。機器語言程序:用機器語言編制的程序。機器語言是計算機硬件能直接理解并執(zhí)行的語言,任何用其它語言編制的程序,都必須經(jīng)過“翻譯”,翻譯為機器語言程序,才能在機器中正確的運行。一條指令就是機器語言的一個語句,用來說明機器硬件應(yīng)完成的操作。指令系統(tǒng)(指令集):一臺計算機所能執(zhí)行的全部指令的集合。2023/2/54機器語言是面向機器的:不同的計算機系統(tǒng),具有不同的指令,每一計算機系統(tǒng)都具有自己的指令系統(tǒng)。指令系統(tǒng)必須是完備的:即任何運算都可以用指令系統(tǒng)中的指令編程實現(xiàn)。指令系統(tǒng)是計算機體系結(jié)構(gòu)的核心;是計算機系統(tǒng)硬件、軟件的主要界面。它既是計算機硬件設(shè)計的主要依據(jù),又是計算機軟件設(shè)計的基石。所以一臺計算機指令系統(tǒng)的優(yōu)劣,直接影響著計算機系統(tǒng)的性能。2023/2/555.1.1機器指令格式

指令字(指令代碼):表示一條指令的一串二進制代碼。指令格式的設(shè)計內(nèi)容:⑴確定的指令字長度⑵劃分指令字字段并加以定義2023/2/56一條指令中應(yīng)包含的信息:①操作碼:表示指令的操作特性和功能。②操作數(shù)的地址:指示操作數(shù)或操作數(shù)所在的地址。③存放操作結(jié)果的地址。④下一條指令的地址。指令的基本格式:操作碼(OP)地址碼(A)2023/2/57各字段的指定方法:顯式指定:在指令字中明顯地指定。隱含指定:由設(shè)計者用約定的方法指定。指令操作碼均采用顯式指定。下一條指令的地址多采用隱含指定。信息的存儲結(jié)構(gòu)不同,指定的地址也不一樣,地址的結(jié)構(gòu)也不同。2023/2/585.1.2指令字的長度

指令字長度:一個指令字所包含的二進制信息的位數(shù)。定長指令字:機器的指令系統(tǒng)中各種指令字的長度均為固定的。可變長指令字:機器的指令系統(tǒng)中各種指令字的長度隨指令的功能而異。

2023/2/59定長指令字的指令長度固定,結(jié)構(gòu)簡單,指令譯碼時間短,有利于硬件控制系統(tǒng)的設(shè)計,但定長指令字指令平均長度長、容易出現(xiàn)冗余碼點、指令不易擴展。可變長指令字的指令長度不定,結(jié)構(gòu)靈活,能充分利用指令的每一位,指令的碼點冗余少,平均指令長度短,易于擴展。但可變長指令的指令格式不規(guī)整,取指令時可能需要多次訪存,導(dǎo)致不同指令的執(zhí)行時間不一致,硬件控制系統(tǒng)復(fù)雜。

2023/2/510在按字節(jié)編址的存儲器中,采用長度為字節(jié)的整倍數(shù)的指令,可以充分利用存儲空間,增加內(nèi)存訪問的有效性。

為了合理地安排存儲空間,并使指令能表達較豐富的內(nèi)容,采用可變長指令將更加靈活有效。單字長指令:指令長度等于機器字長。雙字長指令:指令長度等于兩個機器字長。還有更多倍字長的指令及半字長指令等。短指令占存儲空間少,有利于提高指令執(zhí)行速度,因此通常把最常用指令(如算術(shù)邏輯運算指令、數(shù)據(jù)傳送指令等)設(shè)計成短指令格式。2023/2/5115.1.3指令的地址碼CPU可直接訪問的存儲結(jié)構(gòu)①主存儲器:訪存時要給出存儲器單元地址②CPU寄存器:包括通用寄存器和專用寄存器。③I/O接口寄存器:包括數(shù)據(jù)寄存器和狀態(tài)寄存器。④堆棧。2023/2/512設(shè)計指令字的地址碼格式時需解決的主要問題:⑴

一條指令中需要指明幾個地址;⑵

應(yīng)當(dāng)如何給出地址;⑶

地址碼應(yīng)選多長。

2023/2/5131.四地址指令四地址指令格式:A1:第一源操作數(shù)的存儲器地址或寄存器地址。A2:第二源操作數(shù)的存儲器地址或寄存器地址。A3:存放操作結(jié)果的存儲器地址或寄存器地址。A4:指示下一條要執(zhí)行指令的地址。四地址指令的功能:

(A1)OP(A2)→A3A4指示下條指令地址OPA1A2A3A42023/2/514四地址指令直觀明了,程序的執(zhí)行流向明確,不存在轉(zhuǎn)移指令。但指令長度太長,因此在實際機器中基本不用。2023/2/5152.三地址指令程序在執(zhí)行過程中大多數(shù)情況是按指令序列依次執(zhí)行的,只有在執(zhí)行轉(zhuǎn)移指令時,程序的執(zhí)行順序才被改變。為了壓縮指令長度,下一條指令地址采用隱含的方法給出。通常用一個程序計數(shù)器

PC來跟蹤程序的執(zhí)行并指示將要執(zhí)行的指令地址。每執(zhí)行一條指令,PC自動增量,增量值取決于執(zhí)行指令的長度。當(dāng)程序出現(xiàn)轉(zhuǎn)移時,用專門的轉(zhuǎn)移指令將轉(zhuǎn)移地址直接送入PC。在三地址指令中不明顯地指示下條指令地址。2023/2/516三地址指令格式:A1:第一源操作數(shù)的存儲器地址或寄存器地址;A2:第二源操作數(shù)的存儲器地址或寄存器地址;A3:存放操作結(jié)果的存儲器地址或寄存器地址;三地址指令功能為:

(A1)OP(A2)→A3;PC指示下條指令地址OPA1A2A32023/2/517三地址指令編程方便,結(jié)果不影響運算操作數(shù),但指令長度仍比較長,所以一般在字長較長的大、中型機中使用,而微、小型機中很少使用三個地址均為存儲器地址的三地址指令。2023/2/5183.二地址指令二地址指令的格式為:

A1、A2是操作數(shù)所在的存儲器地址或寄存器地址。二地址指令功能為:(A1)OP(A2)→A1或(A1)OP(A2)→A2源地址:僅提供操作數(shù)的地址目的地址:既提供一個操作數(shù),又存放操作結(jié)果的地址OPA1A22023/2/519二地址指令的意義源地址中的操作數(shù)與目的地址中的操作數(shù)進行操作碼所規(guī)定的操作,結(jié)果存入目的地址中。2023/2/520①存儲器—存儲器型(S—S型)指令:A1、A2均為存儲器地址的二地址指令。OPA1A2二地址指令的幾種形式2023/2/521②寄存器—寄存器型(R—R型)指令:A1、A2均為寄存器地址的二地址指令。OPR1R22023/2/522③寄存器—存儲器型(R—S型)指令:A1、A2中一個是寄存器地址,另一個是存儲器地址的二地址指令。也稱一個半地址指令。OPRnA2023/2/523二地址指令的指令長度短,特別是R—R型指令,不需訪問存儲器取操作數(shù),指令執(zhí)行速度快,因此是最常用的一種指令格式。尤其在RISC結(jié)構(gòu)機器中,所有運算型指令均為R—R型指令。二地址指令執(zhí)行后,參加運算的操作數(shù)被破壞,若不希望被破壞,則需提前保護。2023/2/5244.一地址指令(單地址指令)一地址指令也稱單地址指令,指令中只有一個地址字段。

一地址指令的格式為:A可以是存儲器地址,也可是寄存器地址。OPA2023/2/525一地址指令有兩種情況①單操作數(shù)指令:如INC、DEC、NEG等,只需一個操作數(shù),其功能為:

OP(A)→A②雙操作數(shù)指令:另一個操作數(shù)通常采用隱含尋址的方法,將操作數(shù)隱含在約定的累加器AC中,其指令功能為:

(AC)OP(A)→AC2023/2/526一地址指令長度短,指令執(zhí)行速度快(若A為存儲器地址,只需一次訪存取數(shù)),對于字長較短的微、小型機,是一種常用的指令格式。2023/2/5275.零地址指令零地址指令中只有操作碼而無地址碼,其指令格式為;零地址指令有兩種情況:①不需操作數(shù)的控制型指令,如HALT、WAIT、NOP等。②運算型零地址指令:操作數(shù)隱含在堆棧中。OP2023/2/5285.1.4指令的操作碼

操作碼用于指明指令要完成的操作功能及其特性。指令系統(tǒng)中的每一條指令都有一個唯一確定的操作碼,用以指示指令的操作功能。不同的指令具有不同的操作碼。為了能表示指令系統(tǒng)中的全部操作,指令字中必須有足夠長度的操作碼字段。假定指令系統(tǒng)中有m種操作,則操作碼位數(shù)n應(yīng)滿足:

n≥log2m指令操作碼的編碼有定長編碼和變長編碼兩種。2023/2/529定長編碼的指令操作碼:所有指令的操作碼長度一致,位置固定。是一種簡單規(guī)整的編碼方法。定長編碼操作碼的特點:位數(shù)和位置固定,指令譯碼簡單,有利于簡化硬件設(shè)計。在字長較長的大、中型機以及超小型機中定長編碼的操作碼被廣泛采用,例如:在IBM360/370機中,所有指令的操作碼均為8位,最多可指定256種操作。1.定長編碼2023/2/530變長編碼的指令操作碼:不同指令的操作碼長度不完全相同,操作碼的位數(shù)不固定,分散地放在指令字的不同位置上。變長編碼操作碼的特點:可用較短的指令字長表示更多的操作類型,尋址較大的存儲空間。操作碼的位數(shù)不固定,且位置分散,增加了指令譯碼與分析的難度,使硬件設(shè)計復(fù)雜化。在早期的微、小型機中,由于指令字較短,均采用變長編碼的指令操作碼。如Intel8086、PDP—11等機器。2.變長編碼2023/2/531擴展操作碼的方法最常用的變長操作碼的編碼方式是擴展操作碼法。擴展操作碼法:當(dāng)指令長度一定時,將操作數(shù)地址多的指令選擇短的操作碼,操作數(shù)地址少的指令選擇較長操作碼。采用擴展操作碼法即能充分地利用指令字的各個字段,又能在不增加指令長度的情況下擴展操作碼長度,使它能表示更多的指令。2023/2/532例:設(shè)某機的指令長度為16位。操作碼為4位,具有三個地址字段,每個地址字段長為4位。其指令格式為PA1A2A3按照定長編碼的方法,4位操作碼可表示16條三地址指令。若指令系統(tǒng)中要求有15條三地址指令、15條二地址指令、15條一地址指令和16條零地址指令,共61條指令。則需要采用變長操作碼方式進行編碼。2023/2/5332023/2/534例:設(shè)機器指令字長為16位,指令中地址字段的長度為4位,共有11條三地址指令,72條二地址指令,64條零地址指令。問最多還能規(guī)定多少條一地址指令?解:三地址指令的地址字段共需12位,所以可有4位操作碼,可規(guī)定16條三地址指令?,F(xiàn)有11條三地址指令,所以還有16-11=5個編碼用于二地址指令。二地址指令的地址字段共需8位,可有8位操作碼,去掉三地址指令用掉的操作碼,可規(guī)定

5×16=80條二地址指令?,F(xiàn)有72條二地址指令,所以還有80-72=8個編碼用于一地址指令。2023/2/535一地址指令的地址字段共需4位,可有12位操作碼,去掉二、三地址指令用掉的操作碼,可規(guī)定8×16=128條單地址指令。由于要求有64條零地址指令,而4位操作碼只能提供16條指令,所以需要由單地址指令提供64/16=4個操作碼編碼,因此還能規(guī)定

128-4=124條單地址指令。2023/2/5362023/2/537根據(jù)指令系統(tǒng)的要求,擴展操作碼的組合方案可以有很多種,可以采用等長擴展,也可采用不等長擴展。例如,PDP-11機的指令操作碼有4、7、8、10、11和13位等不同的長度。在進行操作碼擴展的過程中,必須注意的是:⑴不同指令的操作碼編碼一定不能重復(fù)。⑵在設(shè)計不同長度的操作碼時,要盡量考慮安排指令使用頻度高的指令使用短的操作碼,使用頻度低的指令使用較長的操作碼。這樣可以縮短經(jīng)常使用的指令的譯碼時間,加快系統(tǒng)整體的運行速度。

2023/2/538在有限的指令字條件下,若要表示更多操作還可采用將操作碼進一步分段的方法??蓪⒅噶畈僮鞔aOP再進一步分為主操作碼和輔助操作碼兩部分。主操作碼用于表示基本操作,輔助操作碼用于表示各種附加操作,如進位、移位、結(jié)果回送、判跳等操作。NOVA機的算術(shù)邏輯類指令的指令格式:

2023/2/5395.2尋址方式尋址方式:形成本條指令的操作數(shù)地址和下一條要執(zhí)行指令的地址的方法。尋址分為指令地址的尋址和操作數(shù)地址的尋址。2023/2/540指令的執(zhí)行過程ALUAPCMARMEMMDRRSIRIDPLA控制信號2023/2/5411.順序方式:采用PC增量的方式形成下一條指令地址。

PC+增量→PC由于指令通常順序存放,所以當(dāng)程序順序執(zhí)行時,可以采用PC增量的方式形成下條指令地址。即按照PC的內(nèi)容依次取指。增量的多少取決于一條指令所占的存儲單元數(shù)。5.2.1指令的尋址方式

2023/2/5422023/2/5432.跳越方式跳越方式:當(dāng)程序發(fā)生轉(zhuǎn)移時,修改PC的內(nèi)容。當(dāng)程序需要轉(zhuǎn)移時,由轉(zhuǎn)移類指令產(chǎn)生轉(zhuǎn)移地址并送入PC中。轉(zhuǎn)移地址的形成有各種方法。2023/2/54462023/2/545由于操作數(shù)的存放往往是隨機的,所以希望有多種方式產(chǎn)生操作數(shù)地址。另外為了提高程序設(shè)計質(zhì)量,也希望能提供多種靈活的尋址方式。因此,尋址方式主要是指操作數(shù)地址的尋址方式。操作數(shù)地址有多種尋址方式。5.2.2操作數(shù)的尋址方式

2023/2/546⑴形式地址:指令中給出的地址。由于有多種尋址方式,指令中地址字段給出的地址,不一定是操作數(shù)的實際地址,稱為形式地址。⑵有效地址:形式地址經(jīng)過一定的運算而得到的操作數(shù)的實際地址。有效地址是CPU實際訪問的主存單元的地址。2023/2/547討論各種尋址方式的目的縮短指令長度擴大操作數(shù)的尋址空間提高編程的靈活性尋址方式的設(shè)計內(nèi)容確定由形式地址變換為有效地址的算法,并按照這些算法確定相應(yīng)的硬件結(jié)構(gòu),自動地實現(xiàn)尋址。2023/2/548⑶設(shè)計尋址方式的要求:①指令內(nèi)包含的地址盡可能短,以縮短指令長度。②能訪問盡可能大的存儲空間。即能提供盡可能長的地址信息。根據(jù)程序所具有的局部性特性,大多數(shù)程序在一段時間內(nèi)都使用存儲器的一個小區(qū)域,所以,可以用短地址訪問該區(qū)域內(nèi)的任一單元的。③希望地址能隱含在寄存器中。因為寄存器地址比較短,而寄存器長度一般與機器字長相同,在字長較長的機器中.寄存器內(nèi)存放的地址可訪問很大的存儲空間,所以地址隱含在寄存器,可以減少指令長度。2023/2/549④

能在不改變指令的情況下改變地址的實際值。即在數(shù)組、向量、線性表、字符串等數(shù)據(jù)結(jié)構(gòu)的操作中,能夠?qū)崿F(xiàn)操作數(shù)地址的最大增減量。⑤尋址方式盡可能簡單、規(guī)范,以便簡化硬件設(shè)計。2023/2/550常用尋址方式一地址指令格式MOD:尋址方式字段A:形式地址形式地址按相應(yīng)的尋址方式計算得到的操作數(shù)的有效地址記作EA。

OP尋址方式MOD形式地址A2023/2/5511.立即尋址立即尋址方式是指指令的地址碼部分給出的不是操作數(shù)的地址而是操作數(shù)本身。即指令所需的操作數(shù)由指令的形式地址直接給出。采用立即尋址時,操作數(shù)Data就是形式地址部分給出的內(nèi)容D,D也稱為立即數(shù)。例:Intel8086指令:

MOVAX,2000H;將數(shù)據(jù)2000H存入

累加器AX中OP立即尋址DData=D2023/2/552立即尋址方式在取指令的同時操作數(shù)即被取出,不必再次訪問存儲器,提高了指令執(zhí)行速度。由于指令字長有限,立即尋址方式使得操作數(shù)的范圍受到限制。立即尋址方式通常用于給某一寄存器或存儲器單元賦予初值或提供一個常數(shù)。2023/2/5532.直接尋址直接尋址方式是指操作數(shù)的有效地址在指令字中直接給出,指令的地址碼部分給出的形式地址A就是操作數(shù)的有效地址EA。

2023/2/554例:Intel8086指令:

MOVAX,[2000H]將有效地址為2000H的內(nèi)存單元的內(nèi)容讀入累加器AX中。2023/2/555簡單直觀,不需要另外計算操作數(shù)地址,在指令執(zhí)行階段只需訪問一次主存即可得到操作數(shù),便于硬件實現(xiàn)。隨著存儲器容量不斷擴大,采用直接尋址方式尋址整個主存空間,將造成指令長度加長。采用直接尋址方式編程時,如果操作數(shù)地址發(fā)生變化,就必須修改指令中A的值,給編程帶來不便。由于操作數(shù)地址在指令中給定,使程序和數(shù)據(jù)在內(nèi)存中的存放位置受到限制。直接尋址的特點2023/2/5563.間接尋址間接尋址方式是指指令的地址碼部分給出的是操作數(shù)的有效地址EA所在的存儲單元的地址或是指示操作數(shù)地址的地址指示字。即有效地址EA是由形式地址A間接提供的。間接尋址分為一級間接尋址和多級間接尋址。2023/2/557一級間接尋址指令的形式地址A給出的是EA所在的存儲單元的地址,這時存儲單元A中的內(nèi)容就是操作數(shù)的有效地址EA。EA=(A)Data=((A))2023/2/558例:某計算機指令:MOVAL,@2000HE=(A)

=(2000H)

=3000HData=50H00H30H50H2000H3000H2001H50HAL2023/2/559多級間接尋址指令的地址碼部分給出的是操作數(shù)地址的地址指示字,即存儲單元A中的內(nèi)容還不是有效地址EA,而是指向另一個存儲單元的地址或地址指示字。在多級間址方式中,通常把地址字的高位作為標(biāo)志位,以指示該字是有效地址,還是地址指示字。2023/2/560三級間址的尋址過程地址指示字的高位為1,表示該單元內(nèi)容仍為地址指示字,需繼續(xù)訪存尋址。地址指示字的高位為0,表示該單元內(nèi)容即為操作數(shù)所在單元的有效地址EA。E=(((A)))2023/2/561①

間接尋址比直接尋址靈活,可擴大尋址范圍,以短的地址碼訪問大的存儲空間。如:指令字長與存儲器字長均為16位,指令中地址碼長為10位,其直接尋址范圍為1k空間;如果用間接尋址,有效地址為16位,其尋址空間為64k,比直接尋址擴大64倍。②采用間接尋址,當(dāng)操作數(shù)地址需要改變時,可不必修改指令,只要修改地址指示字中內(nèi)容(即存放有效地址的單元內(nèi)容)即可。③間接尋址需多次訪存才能取得操作數(shù),尤其是多級間接尋址,因而降低了指令的執(zhí)行速度。大多數(shù)計算機只允許一級間接尋址。在一些大型高速計算機中,很少采用間接尋址。間接尋址的特點2023/2/5624.寄存器直接尋址(寄存器尋址)寄存器直接尋址也稱寄存器尋址。寄存器直接尋址是指在指令地址碼中給出的是某一通用寄存器的編號(也稱寄存器地址),該寄存器的內(nèi)容即為指令所需的操作數(shù)。采用寄存器尋址方式時,有效地址EA是寄存器的編號。2023/2/563例:Intel8086指令:

MOVAL,BL;AL←BL,將寄存器BL中的

內(nèi)容傳送到寄存器AL中。寄存器存取信息的速度比主存快,需要的地址短,可壓縮指令長度,有利于加快指令執(zhí)行速度。但寄存器的數(shù)量有限。2023/2/5645.寄存器間接尋址寄存器間接尋址方式是指指令中地址碼部分所指定的寄存器中的內(nèi)容是操作數(shù)的有效地址。

2023/2/565例:Intel8086指令:

MOVAL,[BX]設(shè)BX=2000H,(2000H)=80H,則AL←80H由于寄存器間接尋址方式中,地址存放在寄存器中,因此只需一次訪存即可取得操作數(shù),而且寄存器又能給出全字長的地址碼,可尋址較大的存儲空間。2023/2/5666.變址尋址變址尋址方式是指操作數(shù)的有效地址是由指令中指定的變址寄存器的內(nèi)容與指令字中的形式地址相加形成的。變址寄存器Rx可以是專用寄存器,也可以是通用寄存器中的某一個。2023/2/567例:Intel8086指令:

MOVAL,[SI+4]設(shè)SI=2000H,SI+4=2004H(2004H)=82H,所以AL←82H在某些計算機中,變址寄存器還可以自動增量或減量。每存取一個數(shù)據(jù),根據(jù)數(shù)據(jù)的長度,變址寄存器的內(nèi)容自動增量或自動減量,前者稱為自增型變址尋址;后者稱為自減型變址尋址。也有資料稱為自增型寄存器間接尋址和自減型寄存器間接尋址。2023/2/568例:有VAX—11指令:⑴MOV(R1)+,R0

⑵MOV-(R1),R0⑴(R1)+表示自增型變址尋址,寄存器R1中內(nèi)容先作為源操作數(shù)地址,讀數(shù)后R1按操作數(shù)長度增量。設(shè)操作數(shù)字長為一個字節(jié),每次增量為1,

若R1=1000H,則指令執(zhí)行后,R1自增加1,

R1=1001H。2023/2/569⑵-(R1)表示自減型變址尋址,寄存器R1先按操作數(shù)長度減量后作為源操作數(shù)地址,并將減量結(jié)果送回R1。設(shè)每次減量為1,R1=1000H,指令執(zhí)行時先將R1減1,R1=0FFFH,然后將R1的內(nèi)容作為有效地址訪問源操作數(shù)。2023/2/570變址尋址可用于數(shù)組、向量、字符串等數(shù)據(jù)的處理。例:Intel8086指令:

LODS;AL←(SI),SI←SI+1SIAAa0A+1a1A+2a2…+12023/2/571變址尋址還可以與間接尋址相結(jié)合,形成復(fù)合型尋址。①先間址后變址2023/2/572②先變址后間址2023/2/5737.相對尋址相對尋址方式是將程序計數(shù)器PC的當(dāng)前內(nèi)容與指令中給出的形式地址相加形成操作數(shù)的有效地址。

2023/2/574PC當(dāng)前內(nèi)容一般為現(xiàn)行指令的下一單元的地址。形式地址是操作數(shù)地址相對于PC當(dāng)前內(nèi)容的一個相對位移量(Disp),位移量可正可負,一般用補碼表示。在相對尋址中,只要保持位移量不變,就可實現(xiàn)指令帶著數(shù)據(jù)在存儲器中搬家,有利于實現(xiàn)程序再定位。KOP相對尋址5K+1K+2┆┆K+6操作數(shù)MOP相對尋址5M+1M+2┆┆M+6操作數(shù)2023/2/575相對尋址還經(jīng)常用于轉(zhuǎn)移指令中,以PC內(nèi)容為基準(zhǔn),加上相對位移量形成轉(zhuǎn)移地址。例如PDP—11轉(zhuǎn)移指令格式為:其轉(zhuǎn)移地址為(PC)+2Disp。之所以加2Disp,是因為PDP一11是以字節(jié)為單位對主存進行編址的,而Disp是相對于PC的字位移,一個字為2個字節(jié)。15870OPDisp2023/2/576例:Intel8086的進位為0轉(zhuǎn)移指令JNCD的功能為:如果進位為0,則轉(zhuǎn)移到目標(biāo)地址為

(PC)+D處執(zhí)行。該指令為雙字節(jié)指令。設(shè)本條指令的地址為1000H。①設(shè)指令為JNC03H:

如果進位為0,則轉(zhuǎn)移到目標(biāo)

地址為(PC)+03H處進行執(zhí)行

本條指令取指后,

PC=1002H

轉(zhuǎn)移目標(biāo)地址為

1002H+0003H=1005H②設(shè)指令為JNC0FDH

則轉(zhuǎn)移目標(biāo)地址為

1002H+FFFDH=0FFFH0FFDH0FFEH0FFFH××1000HJNC1001H03H1002H1003H1004H1005H××D=FDHD=03H2023/2/5778.基址尋址基址尋址方式是指操作數(shù)的有效地址等于指令中的形式地址與基址寄存器中的內(nèi)容之和?;芳拇嫫骺梢允且粋€專用的寄存器,也可以是由指令指定的通用寄存器,基址寄存器中的內(nèi)容稱為基地址。

2023/2/578基址尋址主要用于將用戶程序的邏輯地址(用戶編寫程序時所使用的地址)轉(zhuǎn)換成主存的物理地址(程序在主存中的實際地址),以便實現(xiàn)程序的再定位。

在多道程序運行時,系統(tǒng)的管理程序?qū)⒍嗟莱绦蜓b入主存。由于用戶在編寫程序時,不知道自己的程序應(yīng)該放在主存的哪一個實際物理地址中,只能按相對位置使用邏輯地址編寫程序。當(dāng)用戶程序裝入主存時,為了實現(xiàn)用戶程序的重定位,系統(tǒng)程序給每個用戶程序分配一個基準(zhǔn)地址。程序運行時,該基準(zhǔn)地址裝入基址寄存器,通過基址尋址,實現(xiàn)邏輯地址到物理地址的轉(zhuǎn)換。2023/2/579基址尋址與變址尋址在形式上以及有效地址的計算方法上都是相似的,但它們的應(yīng)用場合是不同的是不同的。基址尋址是面向系統(tǒng)的,主要用于邏輯地址到物理地址的變換,用以解決程序定位問題?;芳拇嫫饔上到y(tǒng)程序通過特權(quán)指令使用,對用戶是透明的。基址寄存器的內(nèi)容一般不進行自動增量和減量。變址尋址是面向用戶的,主要用于訪問數(shù)組、向量、字符串等成批數(shù)據(jù),用以解決程序的循環(huán)控制問題。變址寄存器的內(nèi)容可以進行自動增量和減量。在早期的一些微、小型機中,基址尋址與變址尋址是不加區(qū)分的。2023/2/580將基址尋址與變址尋址結(jié)合起來就形成了基址加變址尋址方式。這種尋址方式是將兩個寄存器的內(nèi)容和指令形式地址中給出的偏移量相加后得到的結(jié)果作為操作數(shù)的有效地址。其中一個寄存器作為基址寄存器,另一個作為變址寄存器。9.基址加變址尋址2023/2/581基址加變址尋址2023/2/582例:Intel8086的基址尋址與變址尋址的指令:

MOVAL,[BX+SI+4]設(shè)基址寄存器BX的內(nèi)容為BX=1000H,變址寄存器SI的內(nèi)容為SI=2000H,主存3004H單元的內(nèi)容為(2004H)=ABH。由于形式地址A中給出的偏移量為4,所以有效地址EA=(BX)+(SI)+4=3004H,指令執(zhí)行的結(jié)果是將操作數(shù)ABH傳送到寄存器AL中。

2023/2/583堆棧尋址是一種由堆棧支持的尋址方式。

1)堆棧

一種按后進先出(LIFO)或先進后出(FILO)原則進行存取信息的一組存儲器單元的有序集合。堆棧通常是主存的一個特定區(qū)域,它可以是固定的區(qū)域,也可以是浮動的區(qū)域,由軟件定義。堆棧區(qū)域中數(shù)據(jù)的個數(shù)和內(nèi)容是動態(tài)變化的。堆棧結(jié)構(gòu)通常是一端固定,一端浮動的。棧底:第一個存入(稱為壓入)數(shù)據(jù)的堆棧單元。棧底單元是固定的。棧頂:最近存入數(shù)據(jù)的堆棧單元,棧頂單元是浮動的。10.堆棧尋址

2023/2/584堆棧操作總是按地址自動增量和自動減量方式在棧頂進行。在堆棧操作中,數(shù)據(jù)按順序存入堆棧稱為數(shù)據(jù)進?;驂喝?;從堆棧中按與進棧相反的順序取出數(shù)據(jù)稱為出棧或彈出。

2023/2/585(1)寄存器堆棧

計算機在CPU中設(shè)置一組專門用于堆棧的寄存器,每個寄存器按照機器字長可以保存一個字的數(shù)據(jù),相鄰的寄存器具有位對位的移位功能,CPU可以通過進棧指令和出棧指令,控制將數(shù)據(jù)壓入和彈出堆棧。寄存器堆棧由于棧頂位置固定,所以不必設(shè)置堆棧的棧頂指針。2023/2/586寄存器堆棧的工作過程

2023/2/587為了防止堆??諘r企圖執(zhí)行出棧和堆棧滿時企圖執(zhí)行進棧等誤操作,可以利用計數(shù)器為堆棧設(shè)置“??铡焙汀皸M”指示。每進行一次進棧操作,計數(shù)器加1;每進行一次出棧操作。計數(shù)器減1。當(dāng)計數(shù)器中計數(shù)值等于堆棧中寄存器的個數(shù)時,表示“棧滿”;當(dāng)計數(shù)器中計數(shù)值等于“0”時,表示“棧空”。寄存器堆棧的存取速度快,不占用主存空間,但堆棧的容量固定,不易擴展。

2023/2/588(2)存儲器堆棧

存儲器堆棧就是一組連續(xù)的存儲器單元的有序集合。堆棧通常位于主存的一個特定區(qū)域,它既可以是固定的區(qū)域,也可以是浮動的區(qū)域,可以用軟件加以定義,而且需要時可以定義多個存儲器堆棧。為了表示棧頂?shù)奈恢?,通常用一個寄存器或存儲器單元指出棧頂?shù)牡刂罚@個寄存器或存儲器單元稱為堆棧指針SP,SP的內(nèi)容永遠指向堆棧當(dāng)前的棧頂。由于堆棧遵循先進后出原則進行信息的存取,堆棧的壓入和彈出操作總是按地址自動增量和自動減量方式在棧頂進行。

2023/2/589堆棧的兩種生成方式:自底向上生成方式:棧底占最高地址,棧頂為較低地址,壓入數(shù)據(jù)時,按由高地址向低地址順序進行,彈出數(shù)據(jù)(即取出數(shù)據(jù))時,由低地址向高地址順序進行。自頂向下生成方式:與自底向上生成方式順序相反。2023/2/590堆棧的生成方式2023/2/591自底向上生成堆棧的工作過程自底向上生成堆棧是一種較常用的存儲器堆棧方式。

2023/2/592自底向上生成堆棧的工作過程SP棧底低地址高地址ASPSPBSPCSPSPSP2023/2/5932)堆棧尋址

堆棧尋址方式就是按照堆棧指示器SP的內(nèi)容確定操作數(shù)的訪存地址。例如在堆棧支持的運算型零地址指令中,操作數(shù)隱含指定在堆棧,當(dāng)CPU執(zhí)行這種指令時,自動地按當(dāng)前SP值從堆棧的棧頂和次棧頂彈出數(shù)據(jù),進行操作碼指示的操作,然后再將所得結(jié)果自動壓入堆棧。堆棧除了可為零地址指令提供操作數(shù)外,還有很多用途。如在子程序的調(diào)用中,用堆棧存放返回地址,可以實現(xiàn)子程序的嵌套和遞歸調(diào)用;在程序中斷的處理中,用堆棧存放多級中斷的有關(guān)信息,可以實現(xiàn)多級中斷的嵌套等。2023/2/59411.頁面尋址

頁面尋址就是將存儲器邏輯地分成若干頁,每一頁都有自己的頁面地址,一頁內(nèi)包含若干存儲單元,可以通過頁內(nèi)地址進行訪問。當(dāng)需要訪問一頁內(nèi)的某一單元時,將該頁的頁面地址與相應(yīng)單元的頁內(nèi)地址相拼接,即可形成操作數(shù)的有效地址。

2023/2/59512.擴展尋址

擴展尋址就是將要訪問的存儲單元地址的高位預(yù)先裝入擴展寄存器中,訪存時將擴展寄存器的內(nèi)容與指令字中形式地址部分給出的內(nèi)容相拼接,形成操作數(shù)的有效地址。在微型計算機中,段尋址就是擴展尋址的應(yīng)用。在采用段尋址的計算機中,首先將存儲區(qū)域定義為若干邏輯段,將要訪問的存儲單元地址所在的段地址高位預(yù)先裝入段寄存器中。訪存時,將段寄存器內(nèi)容與指令字中給出的段內(nèi)偏移量相加,即可形成操作數(shù)的有效地址。

2023/2/596例如,Intel8086CPU將1MB存儲器空間分成若干邏輯段來進行管理,每個段的最大容量限制為64KB,且規(guī)定每個邏輯段只能從模16地址開始,即段的起始地址(或稱段基地址)必須為××××0H。段基地址的高16位通常被保存在16位的段寄存器中。當(dāng)CPU需要訪問存儲器時,在指令中提供說明主存單元距離段起始位置的偏移量(段內(nèi)偏移量)信息,這樣存儲單元的物理地址就可用段基地址+段內(nèi)偏移量的方法表示。2023/2/597上述尋址方式都是按地址進行存儲器訪問的。除此之外,還有按內(nèi)容尋址的相聯(lián)存儲器。相聯(lián)尋址:使用相聯(lián)存儲器,按所需內(nèi)容進行尋址。2023/2/598尋址方式碼的省略當(dāng)?shù)刂凡糠值牡刂窞閱我粫r(指定只有一種),如寄存器尋址,則可以省略尋址方式,直接給出寄存器的編號。例如某機的ALU雙操作數(shù)指令18條,均為R-R型,且有32個寄存器,則指令格式可以為如下格式,其中省略了源和目的地址的尋址方式字段。OP(5位)Reg1編號(5位)Reg2編號(5位)

2023/2/599例:某計算機字長為16位,主存地址空間大小為128KB,按字編址。采用單字長指令格式,指令各字段定義如下:

15

1211

65

0OPMs

RsMdRd源操作數(shù)目的操作數(shù)2023/2/5100其中,轉(zhuǎn)移指令采用相對尋址方式,相對偏移是用補碼表示,尋址方式定義如下:

Ms/Md尋址方式助記符含義000B寄存器直接Rn操作數(shù)=(Rn)001B寄存器間接(Rn)操作數(shù)=((Rn))010B自增型變址(Rn)+操作數(shù)=((Rn)),

(Rn)+1→Rn011B相對D轉(zhuǎn)移目標(biāo)地址=(PC)+D注:(X)表示地址為X的內(nèi)存單元或寄存器X的內(nèi)容2023/2/5101請回答下列問題:(1)該指令系統(tǒng)最多可有多少條指令?該計算機最多有多少個通用寄存器?存儲器地址寄存器(MAR)和存儲器數(shù)據(jù)寄存器(MDR)至少各需多少位?(2)轉(zhuǎn)移指令的目標(biāo)地址范圍是多少?(3)若操作碼0010B表示加法操作(助記符為ADD),寄存器R4和R5的編號分別為100B和101B,R4的內(nèi)容為1234H,R5的內(nèi)容為5678H。地址1234H中的內(nèi)容為5678H,地址5678H中的內(nèi)容為1234H,則匯編語言為ADD(R4),(R5)+(逗號前為源操作數(shù),逗號后為目的操作數(shù))對應(yīng)的機器碼是什么(用十六進制表示)?該指令執(zhí)行后,哪些寄存器和存儲單元的內(nèi)容會改變?改變后的內(nèi)容是什么?2023/2/5102分析:(1)指令系統(tǒng)最多支持16條指令;支持8個通用寄存器;

∵主存地址空間大小為128KB,按字編址,故共有64K個字單元,∴

MAR至少為16位?!咴摍C字長為16位,∴

MDR至少為16位。(2)∵機器字長為16位,∴PC的字長為16位,轉(zhuǎn)移指令采用相對尋址方式,PC加位移量的結(jié)果為仍為16位,故轉(zhuǎn)移指令的目標(biāo)地址范圍為0000H~FFFFH。

2023/2/5103(3)匯編語句“ADD(R4),(R5)+”中,(R4)為寄存器間接尋址,編碼001B,(R5)+為自增型變址尋址,編碼010B,ADD操作碼為0010B,故對應(yīng)的機器碼為:0010001100010101=2315H∵R4的內(nèi)容為1234H,R5的內(nèi)容為5678H。地址1234H中的內(nèi)容為5678H,地址5678H中的內(nèi)容為1234H,該指令執(zhí)行的操作是:

(1234H)+

(5678H)=5678H+1234H=68ACH∴存儲單元5678H的內(nèi)容變?yōu)?8ACH。

R5自增加1,內(nèi)容變?yōu)?679H2023/2/51045.3指令類型及功能不同類型的計算機,由于其性能、結(jié)構(gòu)、適用范圍的不同,指令系統(tǒng)間差異很大。有的機器指令系統(tǒng)豐富,指令條數(shù)多;有的機器指令系統(tǒng)簡單,指令類型少。指令系統(tǒng)的設(shè)計風(fēng)格分為:復(fù)雜指令系統(tǒng)的計算機(CISC)精簡指令系統(tǒng)的計算機(RISC)2023/2/5105指令系統(tǒng)的基本要求1.完備性任何運算都可以用指令編程實現(xiàn)。即要求指令系統(tǒng)的指令豐富、功能齊全、使用方便,應(yīng)具有所有基本指令。2.有效性用指令系統(tǒng)中的指令編寫的程序能高效率運行,占用空間小、執(zhí)行速度快。3.規(guī)整性指令系統(tǒng)具有對稱性、勻齊性,指令與數(shù)據(jù)格式的一致性。2023/2/5106對稱性:所有寄存器和存儲單元均同等對待,所有指令可以使用所有尋址方式,減少特殊操作和例外情況。勻齊性:一種操作可支持各種數(shù)據(jù)類型。如算術(shù)指令可支持字節(jié)、字、雙字、十進制數(shù)、浮點單精度數(shù)、浮點雙精度數(shù)等。指令與數(shù)據(jù)格式的一致性:指令長度與數(shù)據(jù)長度有一定的關(guān)系,以便于存取和處理。4.兼容性系列機的各機種之間有基本相同的指令集。至少作到向后兼容,即先推出的機器上的程序可以在后推出的機器上運行。2023/2/5107不同的計算機所具有的指令系統(tǒng)也不同,但不管指令系統(tǒng)的繁簡如何,所包含的指令的基本類型和功能是相似的。一臺計算機最基本的、必不可少的指令是不多的,因為很多指令都可以用這些最基本的指令來實現(xiàn)。例如,乘、除運算指令,浮點運算指令,既可以直接用硬件實現(xiàn),也可以用其它指令編制程序來實現(xiàn),但兩者在執(zhí)行時間和編程的方便性差別很大。因此,指令系統(tǒng)中有相當(dāng)一部分指令是為了提高程序的執(zhí)行速度和便于用戶編程而設(shè)計的。2023/2/5108一個完善的指令系統(tǒng)應(yīng)包括的基本指令有:數(shù)據(jù)傳送指令、算術(shù)邏輯運算指令、移位操作指令、堆棧操作指令、字符串處理指令、程序控制指令、輸入/輸出指令等。一些復(fù)雜指令的功能往往是一些基本指令功能的組合。

2023/2/51095.3.1數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令用于完成數(shù)據(jù)傳送功能。數(shù)據(jù)傳送指令應(yīng)解決的問題:①傳送范圍:從何處到何處。有R←→R、R←→M、M←→M②傳送單位:一次傳送的數(shù)據(jù)量。字節(jié)、字、雙字、成組傳送(如數(shù)組等)③尋址方式:源地址和目的地址的確定方法。數(shù)據(jù)傳送時,數(shù)據(jù)從源地址傳送到目的地址,源地址中的數(shù)據(jù)不變。有的機器設(shè)置通用的MOV指令;有的機器用LOAD、STORE指令訪存,LOAD為讀數(shù)指令,STORE為存數(shù)指令。2023/2/5110例:8086指令MOVAL,BL;AL←BLMOVAL,Disp(BX)(SI);AL←((BX)+(SI)

+Disp)2023/2/5111例:IBM370機的成組取指令:A1、A3:寄存器字段,指定16個通用寄存器中的某一個B2:基址寄存器D2:形式地址。源操作數(shù)的起始地址:E2=(B2)+D2。指令功能:從主存E2單元開始,順序地取出多個數(shù)據(jù),分別存放在從A1字段指定的寄存器到A3字段指定的寄存器的編號連續(xù)的多個寄存器中。例如,A1字段指定寄存器R6,A3字段指定寄存器R11。則指令完成的功能是:從E2單元開始順序取出6個數(shù)據(jù),分別存入R6到R11共6個寄存器中。成組取A1A3B2D22023/2/51125.3.2算術(shù)邏輯運算指令算術(shù)邏輯運算指令主要用于進行各種算術(shù)運算及邏輯運算。算術(shù)運算:包括定點、浮點的加、減、乘、除運算以及求反、求補、加1、減1、比較等指令。邏輯運算:主要是對布爾量進行運算,一般包括與、或、非、異或、測試等指令。邏輯運算指令多用于對數(shù)據(jù)字中某些位(一位或多位)進行操作。

2023/2/5113例:8086指令系統(tǒng)中的算術(shù)邏輯運算指令A(yù)DDAL,BL;AL←AL+BLMULBL;AX←AL×BLANDAL,0FEH;AL←AL∧FEH,即AL的最低位

;清0,其余位不變。ORAL,0F0H;AL←AL∨F0H,即AL的高4位置1

;其余位不變TESTAL,01H;AL∧00000001B

;AL0=0結(jié)果為0

;AL0=1結(jié)果不為02023/2/5114隨著計算機的不斷發(fā)展,硬件價格的不斷下降,計算機的指令系統(tǒng)也在不斷發(fā)展,特別在CISC計算機中,常把一些常用的子程序用一條指令代替,如乘方指令、開方指令等,例如VAX一11的計算多項式指令,一條指令可實現(xiàn)一個多項式的計算。在一些大型機、巨型機中,不僅支持標(biāo)量運算,還設(shè)置向量運算指令。2023/2/51155.3.3移位指令移位指令用于實現(xiàn)對操作數(shù)的左、右移位。移位操作指令分為算術(shù)移位、邏輯移位和循環(huán)移位三種,可以實現(xiàn)對操作數(shù)左移或右移一位或幾位。①算術(shù)移位:對帶符號數(shù)的移位,移位過程中必須保持操作數(shù)的符號不變。若是左移,空出的最低位補0。若是右移,空出的最高位補符號位,操作數(shù)以補碼表示。②邏輯移位:把移位的操作數(shù)當(dāng)作無符號數(shù),左移、右移的空出位都補0。2023/2/5116③循環(huán)移位:移出位又移入最高(最低)位。帶進位循環(huán)(大循環(huán)):進位位C與數(shù)據(jù)部分一起循環(huán)。不帶進位循環(huán)(小循環(huán)):進位位C不與數(shù)據(jù)部分一起循環(huán)。循環(huán)移位一般用于實現(xiàn)循環(huán)式控制、高低字節(jié)的互換或用于實現(xiàn)多倍字長數(shù)據(jù)的算術(shù)移位或邏輯移位。2023/2/5117算術(shù)和邏輯移位指令還可用于實現(xiàn)簡單的乘除運算。移位指令的這個性質(zhì),對于沒有乘除運算指令的計算機特別重要。移位指令的執(zhí)行時間比乘除指令的執(zhí)行時間短,因此采用移位指令實現(xiàn)簡單的乘除運算可獲得較高速度。2023/2/51185.3.4堆棧操作指令堆棧操作指令是一種特殊的數(shù)據(jù)傳送指令。堆棧操作有兩種:①壓入(進棧)指令:把指定的操作數(shù)送入棧頂。SP←SP減量,(SP)←數(shù)據(jù)②彈出(退棧、出棧)指令:從棧頂彈出數(shù)據(jù),送到指令指定的目的地址中。目的←(SP),SP←SP增量2023/2/5119例:8086的指令系統(tǒng)中進棧指令:PUSHAXSP←SP-1,(SP)←AH,SP←SP-1,(SP)←AL出棧指令:POPAXAL←(SP),SP←SP+1,AH←(SP),SP←SP+1低地址ALAH高地址SPSP-1SP-1低地址ALAH高地址SP+1SP+1SPALAH2023/2/5120在一般的計算機中,堆棧操作指令主要用來保存和恢復(fù)中斷、子程序調(diào)用時的現(xiàn)場數(shù)據(jù)和斷點指令地址,也用于子程序調(diào)用時的參數(shù)傳遞。為了支持這些功能的快速實現(xiàn),有些機器還設(shè)有多數(shù)據(jù)的壓入指令和彈出指令,可以用一條堆棧操作指令依次把多個數(shù)據(jù)壓入或彈出堆棧。2023/2/51215.3.5字符串處理指令字符串處理指令是用于進行非數(shù)值數(shù)據(jù)處理的指令。一般包括字符串傳送、字符串比較、字符串查找、字符串抽取、字符串轉(zhuǎn)換等指令。字符串傳送指令:將數(shù)據(jù)塊從主存的某一區(qū)域傳送到另一區(qū)域。字符串比較指令:把一個字符串與另一個字符串逐個字符進行比較。字符串查找指令:在一個字符串中查找指定的子串或字符。2023/2/5122字符串提取指令:從字符串中提取某一子串。字符串轉(zhuǎn)換指令:從一種數(shù)據(jù)編碼轉(zhuǎn)換為另一種編碼。例:8086指令MOVS;串傳送指令LODS;串讀入指令STOS;串存儲指令字符串處理指令在需要對大量字符串進行各種處理的文字編輯和排版方面非常有用。2023/2/51235.3.6程序控制指令程序控制指令用于控制程序運行的順序和選擇程序的運行方向。程序控制指令使程序具有測試、分析與判斷的能力。主要包括轉(zhuǎn)移指令、循環(huán)控制指令及子程序調(diào)用與返回指令。2023/2/51241.轉(zhuǎn)移指令轉(zhuǎn)移指令用于控制程序轉(zhuǎn)到指定地址繼續(xù)執(zhí)行。⑴無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令又稱必轉(zhuǎn)指令、跳轉(zhuǎn)指令。這類轉(zhuǎn)移指令在執(zhí)行時不受任何條件的約束,直接把控制轉(zhuǎn)移到指令指定的轉(zhuǎn)向地址。⑵條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令的執(zhí)行受到一定條件的約束。條件轉(zhuǎn)移指令在執(zhí)行時,只有在條件滿足的情況下,才會執(zhí)行轉(zhuǎn)移操作,把控制轉(zhuǎn)移到指令指定的轉(zhuǎn)向地址;若條件不滿足,則不執(zhí)行轉(zhuǎn)移操作,程序仍按原順序繼續(xù)執(zhí)行。

2023/2/5125條件轉(zhuǎn)移指令是最基本的轉(zhuǎn)移指令,它的執(zhí)行受一定條件的約束。條件轉(zhuǎn)移指令使計算機具有很強的邏輯判斷能力,這是計算機實現(xiàn)地址轉(zhuǎn)移,能高度自動化工作的關(guān)鍵。條件轉(zhuǎn)移指令轉(zhuǎn)移的條件一般是前次運算的某些結(jié)果特征。在計算機CPU中通常設(shè)置一個狀態(tài)寄存器(或條件碼寄存器),用以記錄所執(zhí)行的算術(shù)邏輯運算指令、移位指令等的結(jié)果標(biāo)志。這些標(biāo)志主要包括:進位標(biāo)志(C)、結(jié)果溢出標(biāo)志(V)、結(jié)果為零標(biāo)志(Z)、結(jié)果為負標(biāo)志(N)及結(jié)果奇偶標(biāo)志(P)等。這些標(biāo)志的組合,可以產(chǎn)生十幾種條件轉(zhuǎn)移,如結(jié)果為零轉(zhuǎn)、非零轉(zhuǎn)、為負轉(zhuǎn)、為正轉(zhuǎn)、溢出轉(zhuǎn)、非溢出轉(zhuǎn)等。2023/2/5126轉(zhuǎn)移指令的轉(zhuǎn)移地址一般采用相對尋址或直接尋址。相對尋址:轉(zhuǎn)移地址為當(dāng)前PC內(nèi)容與位移量之和。直接尋址:轉(zhuǎn)移地址由指令中地址碼直接給出。例:Inter8086指令系統(tǒng)中的轉(zhuǎn)移指令JMPL1

;直接尋址的轉(zhuǎn)移,無條件轉(zhuǎn)移到L1處

JNZ50H

;相對尋址的轉(zhuǎn)移。若操作結(jié)果不為

0,則轉(zhuǎn)移到當(dāng)前PC+50H處。設(shè)指

令地址為1000H,則當(dāng)前PC=1002H,

轉(zhuǎn)移地址為:

1002H+50H=1052H2023/2/5127JCABH

;相對尋址的轉(zhuǎn)移。若操作結(jié)果有

進位,則轉(zhuǎn)移到當(dāng)前PC+ABH處。

設(shè)指令地址為1000H,則當(dāng)前PC為:

PC=1002H,轉(zhuǎn)移地址為:

1002H+FFABH=0FABH2023/2/5128循環(huán)控制指令用于支持循環(huán)程序的執(zhí)行。循環(huán)控制指令實際上是一種增強型的條件轉(zhuǎn)移指令。循環(huán)控制指令的功能包括循環(huán)控制變量的修改、測試判斷和轉(zhuǎn)移等。例:Intel8086指令系統(tǒng)中的循環(huán)控制指令。LOOPL1

;CX←CX-1,

;如果CX≠0,則轉(zhuǎn)到L1處繼續(xù)執(zhí)行;

;如果CX=0,則結(jié)束循環(huán)。2.循環(huán)控制指令2023/2/5129子程序:一組可以公用的指令序列,只要給出子程序的入口地址就能從主程序轉(zhuǎn)入子程序。在程序的執(zhí)行過程中,當(dāng)需要執(zhí)行子程序時,可以在主程序中發(fā)出調(diào)用子程序的指令,給出子程序的入口地址,控制程序的執(zhí)行序列從主程序轉(zhuǎn)入子程序;而當(dāng)子程序執(zhí)行完畢后,可以利用返回主程序的指令,使程序重新返回主程序的發(fā)出子程序調(diào)用命令的地方繼續(xù)順序執(zhí)行。

3.子程序調(diào)用與返回指令2023/2/5130子程序的入口地址:子程序第一條指令的地址。子程序調(diào)用指令(轉(zhuǎn)子指令、過程調(diào)用指令):用于從主程序轉(zhuǎn)向子程序的指令。返回指令:從子程序返回主程序的指令。在轉(zhuǎn)子指令中要給出子程序的入口地址;為了執(zhí)行返回指令時,能夠正確返回主程序,轉(zhuǎn)子指令應(yīng)具有保護斷點的功能。斷點:主程序的返回地址。即轉(zhuǎn)子指令的下一條指令的地址。2023/2/5131執(zhí)行轉(zhuǎn)子指令時,保存斷點常用的方式:①存放在子程序第一條指令的前一個字單元。②保存在某一約定的寄存器中。③壓入堆棧。將斷點壓入堆棧是保護斷點的最好方法,它便于實現(xiàn)多重轉(zhuǎn)子和遞歸調(diào)用,因而被很多指令系統(tǒng)所采用。Intel8086采用堆棧保存返回地址。它設(shè)置了子程序調(diào)用指令CALL和返回指令RET。CALL指令把下一條指令的地址(返回地址)壓入堆棧,RET指令從堆棧中取出該地址并返回該地址繼續(xù)執(zhí)行。轉(zhuǎn)子指令和返回指令也可以是帶條件的,條件轉(zhuǎn)子和條件返回其條件與轉(zhuǎn)移指令的條件相類似。2023/2/5132KCALLAK+1…AMOVA+1…RETSP-2K+1LK+1HSP堆棧子程序主程序2023/2/5133轉(zhuǎn)子指令與轉(zhuǎn)移指令的區(qū)別轉(zhuǎn)移指令的功能是轉(zhuǎn)移到指令給出的轉(zhuǎn)移地址處去執(zhí)行指令,一般用于同一程序內(nèi)的轉(zhuǎn)移,轉(zhuǎn)移后不需要返回原處,因此不需要保存返回地址。轉(zhuǎn)子指令的功能是轉(zhuǎn)去執(zhí)行一段子程序,實現(xiàn)的是不同程序之間的轉(zhuǎn)移。因為子程序執(zhí)行完后必須返回主程序,所以轉(zhuǎn)子指令必須以某種方式保存返回地址,以便返回時能正確返回到主程序原來的位置。

2023/2/51344.陷阱指令

陷阱:一種意外事故中斷。設(shè)置陷阱的目的是為了通知CPU所出現(xiàn)的故障,并根據(jù)故障情況,轉(zhuǎn)入相應(yīng)的故障處理程序。計算機的陷阱指令一般作為隱指令(即指令系統(tǒng)中不提供的指令),不提供給用戶直接使用,只有在出現(xiàn)意外故障時,由CPU自動產(chǎn)生并執(zhí)行。也有計算機在指令系統(tǒng)中設(shè)置了用戶可用的陷阱指令或“訪管”指令,便于用戶利用它來實現(xiàn)系統(tǒng)調(diào)用和程序請求。2023/2/5135例如,Intel8086的指令系統(tǒng)中提供了軟件中斷指令I(lǐng)NTn(n是8位二進制常數(shù),用于表示中斷類型),INTn是直接提供給用戶使用的陷阱指令,利用它可以實現(xiàn)系統(tǒng)調(diào)用和程序請求。

2023/2/51365.3.7輸入/輸出指令輸入/輸出指令是用于主機與外部設(shè)備之間進行各種信息交換的指令。主機與外部設(shè)備之間交換的信息包括:①輸入/輸出的數(shù)據(jù)②主機向外部設(shè)備發(fā)出各種控制命令③外部設(shè)備的各種工作狀態(tài)2023/2/5137輸入/輸出指令的三種設(shè)置方式①外部設(shè)備采用單獨編碼的尋址方式并設(shè)置專用的I/O指令。由I/O指令的地址碼部分給出被選設(shè)備的設(shè)備碼(或端口地址),操作碼指定所要求的I/O操作。這種方式將I/O指令與其他指令區(qū)別對待,編寫程序清晰;但因為I/O指令通常較少,功能簡單,如果需要對外設(shè)信息進行復(fù)雜處理,則需要較多的指令才能實現(xiàn)。2023/2/5138例:NOVA機的I/O指令格式:設(shè)備碼:指定設(shè)備。控制字段:規(guī)定啟動或關(guān)閉設(shè)備碼指定的設(shè)備。OP:規(guī)定要求完成的I/O操作。011ACOP控制設(shè)備碼例:8086的I/O指令I(lǐng)NAL,80H;將80H號端口的內(nèi)容讀入ALOUT90H,AL;將AL的內(nèi)容寫入90H號端口2023/2/5139②

外設(shè)與主存統(tǒng)一編址,用通用的數(shù)據(jù)傳送指令實現(xiàn)I/O操作。這種方式不用設(shè)置專用I/O指令,可以利用各類指令對外設(shè)信息進行進行處理;但由于外設(shè)與主存統(tǒng)一編址,占用了主存的地址空間;而且較難分清程序中的I/O操作和訪存操作。③

通過I/O處理機執(zhí)行I/O操作。在這種方式下,CPU只需執(zhí)行幾條簡單的I/O指令,如啟動I/O設(shè)備、停止I/O設(shè)備、測試I/O設(shè)備等,而對I/O系統(tǒng)的管理、I/O操作控制等工作都由I/O處理機完成。這種方式能提高主機的效率,但必須在I/O處理機支持下才能實現(xiàn)。

2023/2/51405.3.8其它指令完成某種控制功能的指令,如停機、等待、空操作、開中斷、關(guān)中斷、置條件碼以及特權(quán)指令等。

特權(quán)指令是指只能用于操作系統(tǒng)或其它系統(tǒng)軟件,而不提供給用戶使用的指令。在多任務(wù)、多用戶的計算機系統(tǒng)中,這種特權(quán)指令是不可缺少的。它主要用于系統(tǒng)資源分配與管理,包括改變系統(tǒng)工作方式、檢測用戶的訪問權(quán)限、修改虛擬存儲器管理的段表、頁表以及完成進程的創(chuàng)建與切換等。2023/2/51415.4CISC機和RISC機指令風(fēng)格

5.4.1復(fù)雜指令系統(tǒng)計算機CISC(ComplexInstructionSetComputer)復(fù)雜指令系統(tǒng)計算機:具備龐大且復(fù)雜的指令系統(tǒng)的計算機,簡稱CISC。

CISC的思想是靠增強指令的功能,增加指令系統(tǒng)的復(fù)雜程度來增強計算機的功能、提高計算機系統(tǒng)的性能。2023/2/5142CISC指令系統(tǒng)的特點:(1)指令系統(tǒng)復(fù)雜龐大,指令數(shù)目一般多達200~300條。(2)指令格式多,指令字長不固定,使用多種不同的尋址方式。(3)可訪存指令不受限制。(4)各種指令的執(zhí)行時間和使用頻率相差很大。(5)大多數(shù)采用微程序控制器。2023/2/5143由于CISC指令系統(tǒng)復(fù)雜,導(dǎo)致所需的硬件結(jié)構(gòu)復(fù)雜,這不僅增加了計算機的研制開發(fā)周期和成本,而且也難以保證系統(tǒng)的正確性,有時甚至可能降低系統(tǒng)的性能。2023/2/5144經(jīng)過對CISC的各種指令在典型程序中使用頻率的測試分析,發(fā)現(xiàn)只有占指令系統(tǒng)20%的指令是常用的,并且這20%的指令大多屬于算/邏運算、數(shù)據(jù)傳送、轉(zhuǎn)移、子程序調(diào)用等簡單指令,而占80%的指令在程序中出現(xiàn)的概率只有20%左右。這一結(jié)果說明花費了大量代價增加的復(fù)雜指令,只能有20%左右的使用率,這將造成硬件資源的大量浪費。2023/2/5145精簡指令系統(tǒng)計算機RISC

(ReducedInstructionSetComputer)RISC技術(shù)希望用20%左右的簡單指令來組合實現(xiàn)不常用的80%的指令,用一套精簡的指令系統(tǒng)取代復(fù)雜的指令系統(tǒng),使機器結(jié)構(gòu)簡化,以達到用簡單指令提高機器性能和速度、提高機器的性能價格比的目的。

5.4.2精簡指令系統(tǒng)計算機RISC

2023/2/5146一般CPU的執(zhí)行速度受程序中的指令總數(shù)I、平均指令執(zhí)行所需的時鐘周期數(shù)CPI和每個時鐘周期的時間T三個因素的影響。CPU執(zhí)行程序所需的時間TCPU為:

TCPU=I×CPI×T顯然,減小I、CPI和T就能有效地減少CPU的執(zhí)行時間,提高程序執(zhí)行的速度。RISC技術(shù)主要從簡化指令系統(tǒng),優(yōu)化硬件設(shè)計的角度來提高系統(tǒng)的性能與速度。2023/2/5147RISC指令系統(tǒng)的主要特點(1)選取使用頻率高的簡單指令以及很有用但又不復(fù)雜的指令組成指令系統(tǒng)。(2)指令數(shù)目較少,指令長度固定,指令格式少,尋址方式種類少。(3)采用流水線技術(shù),大多數(shù)指令可在一個時鐘周期內(nèi)完成;特別是在采用了超標(biāo)量和超流水技術(shù)后,可使指令的平均執(zhí)行時間小于一個時鐘周期。

(4)使用較多的通用寄存器以減少訪存。

2023/2/5148(5)以寄存器—寄存器方式工作,只有取數(shù)/存數(shù)(LOAD/STORE)指令訪問存儲器,其余指令的操作都在寄存器之間進行。(6)控制器以組合邏輯控制為主,不用或少用微程

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論