《計算機(jī)組成原理》第5章:指令系統(tǒng).ppt
《《計算機(jī)組成原理》第5章:指令系統(tǒng).ppt》由會員分享,可在線閱讀,更多相關(guān)《《計算機(jī)組成原理》第5章:指令系統(tǒng).ppt(89頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第5章 指令系統(tǒng),(時間:3次課,6學(xué)時),第5章 指令系統(tǒng),本章講述計算機(jī)指令功能、指令中包含的信息、指令的一般格式、被指令處理的數(shù)據(jù)如何存儲在計算機(jī)中、指令如何尋找被處理的數(shù)據(jù)、指令分類、指令系統(tǒng)的兼容性等問題,并列舉幾種類型的計算機(jī)指令系統(tǒng),由此可以較為深刻地理解計算機(jī)指令和指令系統(tǒng)的意義。,第5章 指令系統(tǒng),5.1 計算機(jī)指令概念 5.2 指令格式 5.3 數(shù)據(jù)的表示和存儲 5.4 尋址方式 5.5 指令類型 5.6 指令系統(tǒng)舉例 5.7 機(jī)器語言、匯編語言和高級語言,5.1 計算機(jī)指令概念,軟件系統(tǒng)分為許多層次,最低的一層就是緊臨硬件的一層,它直接控制計算機(jī)的硬件運(yùn)行,這一層就是指令
2、系統(tǒng)。指令系統(tǒng)是一種型號的計算機(jī)所具有的全體指令的集合。不同型號的計算機(jī)有不同的指令系統(tǒng),一般不兼容。 計算機(jī)正在執(zhí)行的指令(二進(jìn)制信息)是存放在控制器的指令寄存器中的。一條指令的功能就是告訴計算機(jī)要完成什么操作,至于具體如何完成,必須將指令寄存器中的指令經(jīng)控制器的譯碼電路和微命令發(fā)生器,產(chǎn)生微命令;經(jīng)控制器的地址形成電路給出操作數(shù)地址;由微命令和操作數(shù)地址決定實(shí)際的操作步驟。,5.1 計算機(jī)指令概念,一般說來,指令系統(tǒng)中的一條指令包括兩大類信息,即操作信息和地址信息。 計算機(jī)指令系統(tǒng)的設(shè)置與計算機(jī)硬件結(jié)構(gòu)密切相關(guān)。指令系統(tǒng)直接影響到計算機(jī)系統(tǒng)的性能,也直接影響到操作系統(tǒng)和編譯程序的編寫難度,
3、可見指令系統(tǒng)的設(shè)計是計算機(jī)系統(tǒng)設(shè)計中的一個核心問題。 系列(Series)計算機(jī)。 指令系統(tǒng)的改進(jìn)是圍繞著縮小機(jī)器語言、匯編語言與高級語言的語義差異以及有利于操作系統(tǒng)的實(shí)現(xiàn)和優(yōu)化而進(jìn)行的,它有利于高級語言程序的編譯和提高機(jī)器運(yùn)行速度。,5.1 計算機(jī)指令概念,指令系統(tǒng)太復(fù)雜也會帶來一些不利因素,為了解決這個問題,70年代末人們提出了便于VLSI實(shí)現(xiàn)的精簡指令系統(tǒng)計算機(jī),簡稱RISC;與之相應(yīng)的便是復(fù)雜指令系統(tǒng)計算機(jī),簡稱CISC。,5.2 指 令 格 式,計算機(jī)的指令格式與機(jī)器字長、存儲器的容量以及指令的功能都有很大關(guān)系。為了便于程序設(shè)計、增加基本操作的并行性、增強(qiáng)指令功能,指令中包含的信息越
4、多越好。然而如果所有指令都取相同長度的話,那么在有些指令中,一部分信息將是沒有意義的,這就浪費(fèi)了指令所占的存儲空間,從而增加了訪存次數(shù),可能使整個指令執(zhí)行時間更長。因此,如何科學(xué)合理地設(shè)計指令格式,使指令既能給出足夠信息,其長度又盡可能與機(jī)器的字長相匹配,從而節(jié)省存儲空間,縮短取指周期,達(dá)到提高機(jī)器性能的目的,一直是指令格式設(shè)計中的一個重要問題。,5.2 指 令 格 式,5.2.1 指令的一般格式 5.2.2 指令操作碼的擴(kuò)展技術(shù) 5.2.3 指令長度與字長的關(guān)系,5.2.1 指令的一般格式,計算機(jī)通過執(zhí)行指令來處理各種數(shù)據(jù)。為了指出數(shù)據(jù)的來源、操作結(jié)果的去向及所執(zhí)行的操作,一條指令必須包含下
5、列信息。 操作碼 操作數(shù)的地址。 下一條指令的地址 根據(jù)上述分析可知,一條指令實(shí)際上包括兩種信息,即操作碼和地址碼。 零地址指令,OP CODE,2. 一地址指令,3. 兩地址指令,4. 三地址指令,5.2.1 指令的一般格式,5. 多地址指令 在某些性能較好的大、中型機(jī)甚至高檔次小型機(jī)中,往往設(shè)置一些功能很強(qiáng)、用于處理成批數(shù)據(jù)的指令,如字符串處理指令,向量、矩陣運(yùn)算指令。為了描述一批數(shù)據(jù),指令中需要多個地址來指出數(shù)據(jù)存放的首地址、長度和下標(biāo)等信息。 以上所述的幾種指令只是一般情況,并非所有計算機(jī)都具有。零地址、一地址和兩地址指令具有指令短、執(zhí)行速度快、硬件實(shí)現(xiàn)簡單等特點(diǎn),多為結(jié)構(gòu)較簡單、字長
6、較短的小型、微型機(jī)所采用;而兩地址、三地址和多地址指令具有功能強(qiáng)、便于編程等特點(diǎn),多為字長較長的大、中型機(jī)所采用。但也不能一概而論。,5.2.1 指令的一般格式,,5.2.2 指令操作碼的擴(kuò)展技術(shù),,指令的操作碼長度決定了指令系統(tǒng)中完成不同操作的指令條數(shù)。若某機(jī)器的操作碼長度為K位,則它最多只能有2K條不同指令。指令操作碼通常有兩種編碼格式,一種是固定格式,即操作碼的長度固定,且集中放在指令字的一個字段中。這種格式對于簡化硬件設(shè)計、減少指令譯碼時間非常有利,在字長較長的大、中型機(jī)和超級小型機(jī)以及RISC上廣泛使用。另一種是可變格式,即操作碼的長度可變,且分散地放在指令字的不同字段中。這種格式能
7、夠有效地壓縮程序中操作碼的平均長度,在字長較短的微型機(jī)上廣泛采用。,5.2.2 指令操作碼的擴(kuò)展技術(shù),顯然,操作碼長度不固定將增加指令譯碼和分析的難度,使控制器的設(shè)計復(fù)雜化,因此對操作碼的編碼至關(guān)重要。通常是在指令字中用一個固定長度的字段來表示基本操作碼,而對于一部分不需要某個地址碼的指令,則把它們的操作碼擴(kuò)展到該地址字段,這樣,既能充分地利用指令字的各個字段,又能在不增加指令長度的情況下擴(kuò)展操作碼的長度,使它可以表示更多的指令。例如,設(shè)某機(jī)器的指令長度為16位,包括4位基本操作碼字段和3個4位地址字段,其格式如圖5-1所示。,圖5-1 指令格式,5.2.2 指令操作碼的擴(kuò)展技術(shù),(1)15條
8、三地址指令的操作碼由4位基本操作碼給出,范圍為00001110,剩下一個碼點(diǎn)1111用于把操作碼擴(kuò)展到A1,即從4位擴(kuò)展到8位。 (2)15條二地址指令的操作碼由擴(kuò)展后的8位操作碼給出,范圍為1111000011111110,剩下一個碼點(diǎn)11111111用于把操作碼擴(kuò)展到A2,即從8位擴(kuò)展到12位。 (3)15條一地址指令的操作碼由12位操作碼給出,范圍為111111110000111111111110,剩下一個碼點(diǎn)111111111111用于把操作碼擴(kuò)展到A3,即從12位擴(kuò)展到16位。 (4)16條零地址指令的操作碼使用16位,范圍為11111111111100001111111111111
9、111。,5.2.2 指令操作碼的擴(kuò)展技術(shù),除了上述方法外,還有其他許多擴(kuò)展方法,如可以形成15條三地址指令、14條兩地址指令、31條一地址指令和16條零地址指令,共76條指令。實(shí)際上,指令操作碼是有空余的。在可變長度的指令系統(tǒng)的設(shè)計中,到底使用何種擴(kuò)展方法,所要遵循的一個重要原則是,使用頻度(即指令在程序中出現(xiàn)的概率)高的指令應(yīng)分配較短的操作碼;使用頻度低的指令應(yīng)分配較長的操作碼。這樣,不僅可以有效地縮短操作碼在程序中的平均長度,節(jié)省存儲器空間,而且縮短了經(jīng)常使用的指令的譯碼時間,因而可以提高程序的運(yùn)行速度。,5.2.2 指令操作碼的擴(kuò)展技術(shù),這里特別強(qiáng)調(diào)指出,計算機(jī)中的指令操作碼總是希望有
10、一定的規(guī)整性,否則會使硬件實(shí)現(xiàn)復(fù)雜化。此外,為了便于在計算機(jī)內(nèi)存放,指令的長度一般是字節(jié)的整數(shù)倍,所以操作碼與地址碼兩部分長度之和就應(yīng)該是字節(jié)的整數(shù)倍,因此在考慮操作碼長度時還應(yīng)考慮地址碼的要求。 由此可見,操作碼擴(kuò)展技術(shù)是一種重要的指令優(yōu)化技術(shù),它可以縮短指令的平均長度,減少程序的總位數(shù)以及增加指令字所能表示的操作信息。擴(kuò)展操作碼比固定操作碼譯碼復(fù)雜,使控制器的設(shè)計難度增大,也需要更多的硬件來支持。,5.2.3 指令長度與字長的關(guān)系,字長是指計算機(jī)能直接處理的二進(jìn)制數(shù)據(jù)的位數(shù),它與計算機(jī)的功能和用途有很大的關(guān)系,是計算機(jī)的一個重要技術(shù)指標(biāo)。首先,字長決定了計算機(jī)的運(yùn)算精度,字長越長,計算機(jī)
11、的運(yùn)算精度越高,因此,高性能的計算機(jī)字長較長,而性能較差的計算機(jī)字長相對要短。其次,地址長度決定了指令直接尋址能力,若為n 位,則給出的n 位直接地址可以尋址2n字節(jié)。這對于字長較短(8位或16位)的微型機(jī)來說,遠(yuǎn)遠(yuǎn)滿足不了實(shí)際需要。擴(kuò)大尋址能力的方法,一是通過增加機(jī)器字長來增加地址碼的長度;二是采用地址擴(kuò)展技術(shù),把存儲空間分成若干個段,用基地址加位移量的方法來增加地址碼的長度。,5.2.3 指令長度與字長的關(guān)系,為了便于處理字符數(shù)據(jù)和盡可能地充分利用存儲空間,一般機(jī)器字長都是字節(jié)長度(即8位)的1、2、4或8倍,也就是8、16、32、64位。20世紀(jì)80年代的微型機(jī)的字長多為8、16和32位
12、,大中型機(jī)的字長多為32位和64位,因此,一個字中可以存儲1、2、4或8個字符。隨著電路集成度的提高,機(jī)器字長也在增長,16位微機(jī)也趨于淘汰。 指令的長度主要取決于操作碼的長度、操作數(shù)地址的長度和操作數(shù)地址的個數(shù)。由于操作碼的長度、操作數(shù)地址的長度及所采用的格式不同,各指令的長度不是固定的,但也不是任意的。為了充分利用存儲空間,指令的長度通常為字節(jié)的整數(shù)倍。,5.2.3 指令長度與字長的關(guān)系,指令的長度與機(jī)器的字長沒有固定關(guān)系,它既可以小于或等于機(jī)器的字長,也可以大于機(jī)器字長。前者稱為短格式指令,后者稱為長格式指令,一條指令存放在地址連續(xù)的存儲單元中。在同一臺計算機(jī)中可能既有短格式指令,又有
13、長格式指令,但通常是把最常用的指令(如算術(shù)邏輯運(yùn)算指令、數(shù)據(jù)傳送指令)設(shè)計成短格式指令,以便節(jié)省存儲空間和提高指令的執(zhí)行速度。,5.3 數(shù)據(jù)的表示和存儲,計算機(jī)中的基本數(shù)據(jù)有邏輯(布爾)數(shù)、定點(diǎn)數(shù)(整數(shù))、浮點(diǎn)數(shù)(實(shí)數(shù))、十進(jìn)制、字符串、數(shù)組等。對這些數(shù)據(jù)的運(yùn)算可以設(shè)置專門的指令,也可以僅設(shè)置最簡單的算術(shù)邏輯運(yùn)算指令,再通過執(zhí)行程序來實(shí)現(xiàn)對其他類型數(shù)據(jù)的處理,但后者的速度下降許多。在機(jī)器中,若設(shè)置能直接對矩陣向量數(shù)據(jù)(數(shù)組)進(jìn)行運(yùn)算的指令(增加相應(yīng)的硬件),可以大大提高對向量(數(shù)組)的處理速度,這一般只在巨型計算機(jī)中才采用。 目前計算機(jī)所用的數(shù)據(jù)字長一般為32位,而存儲器地址一般按字節(jié)表示,
14、即一個存儲單元只能存放一個字節(jié)的數(shù)據(jù),因此一條指令通常要占用幾個存儲單元,使用幾個存儲器地址。,5.3 數(shù)據(jù)的表示和存儲,計算機(jī)指令系統(tǒng)可支持對字節(jié)、半字、字、雙字的運(yùn)算,有些計算機(jī)有位處理指令。為便于硬件實(shí)現(xiàn),一般要求多字節(jié)數(shù)據(jù)對準(zhǔn)邊界,如圖5-2(a)所示。當(dāng)所存數(shù)據(jù)不能滿足此要求時,則填充一個或多個空白字節(jié)。也有的計算機(jī)不要求對準(zhǔn)邊界,但可能增加訪問存儲器次數(shù)。假如存儲器與運(yùn)算部件間數(shù)據(jù)通路的寬度為32位(一個字),在不按邊界對準(zhǔn)的計算機(jī)中,訪存指令所要求存取的數(shù)據(jù)(例如一個字)可能在兩個存儲單元中,因此需要訪問兩次存儲器,而且還要對高低字節(jié)的位置進(jìn)行調(diào)整,圖5-2(b)中的陰影部分即屬
15、這種情況。,(a) 多字節(jié)數(shù)據(jù)對準(zhǔn)邊界,圖5-2 存儲器中數(shù)據(jù)的存放舉例,(b) 數(shù)據(jù)不對準(zhǔn)邊界,5.3 數(shù)據(jù)的表示和存儲,在數(shù)據(jù)對準(zhǔn)邊界的計算機(jī)中,當(dāng)以二進(jìn)制來表示地址時,半字地址的最低位恒為零,字地址的最低兩位為零,雙字地址的最低三位為零。圖5-3為按字節(jié)編址的雙字?jǐn)?shù)據(jù)的兩種字節(jié)次序:低字節(jié)為低地址,如圖5-3(a)所示;高字節(jié)為低地址,如圖5-3(b)所示。,(a) 低字節(jié)為低地址,(b) 高字節(jié)為低地址,圖5-3 兩種字節(jié)次序,5.4 尋 址 方 式,在執(zhí)行一條指令的時候,操作數(shù)可能在運(yùn)算部件的某個寄存器中或存儲器中,也可能就在本指令中。正在運(yùn)行的程序總是存放在存儲器(內(nèi)存)中,正在執(zhí)
16、行的指令總是在CPU內(nèi)控制器的指令寄存器中。所謂尋址方式(或編址方式)指的是確定本條指令的數(shù)據(jù)地址及下一條要執(zhí)行的指令地址的方法,它與計算機(jī)硬件結(jié)構(gòu)緊密相關(guān),而且對指令格式和功能影響很大。從程序員角度看,尋址方式與匯編程序設(shè)計的關(guān)系極為密切;與高級語言的編譯程序設(shè)計也同樣密切。不同的計算機(jī)有不同的尋址方式,但其基本原理是相同的。有的計算機(jī)尋址種類少,因此在指令的操作碼中表示出尋址方式;而有的計算,5.4 尋 址 方 式,機(jī)采用多種尋址方式,此時在指令中專設(shè)一個字段表示一個操作數(shù)的來源或去向。這里僅介紹幾種被廣泛采用的基本尋址方式。在一些計算機(jī)中,某些尋址方式可以組合使用,從而形成更復(fù)雜的尋址方
17、式。,5.4 尋 址 方 式,,1. 直接尋址 對直接尋址方式來說,指令的地址碼部分直接給出操作數(shù)在存儲器中的地址,圖5-4(a)僅給出一個操作數(shù)地址;當(dāng)有多個地址時,情況類似。直接尋址方式可以由操作碼表示出來。圖5-4(b)在指令中增加了一個尋址方式字段M,假如M為3位二進(jìn)制碼,則可表示8種尋址方式。,,圖5-4 直接尋址方式,5.4 尋 址 方 式,2. 寄存器尋址 計算機(jī)的中央處理器中一般設(shè)置有一定數(shù)量的通用寄存器,用以存放操作數(shù)、操作數(shù)的地址或中間結(jié)果。假如地址碼部分給出某一通用寄存器地址,而且所需的操作數(shù)就在這一寄存器中,則稱為寄存器尋址。通用寄存器的數(shù)量一般在幾個至幾十個之間,
18、比存儲單元少得多,因此地址碼短,而且對寄存器存取數(shù)據(jù)比對存儲器存取數(shù)據(jù)快得多,所以這種尋址方式可以縮短指令長度,節(jié)省存儲空間,提高指令的執(zhí)行速度,因而在計算機(jī)中得到廣泛應(yīng)用。,5.4 尋 址 方 式,3. 基址尋址 基址尋址是指在計算機(jī)中設(shè)置一個專用的基址寄存器,或由指令指定一個通用寄存器作為基址寄存器。操作數(shù)的地址由基址寄存器的內(nèi)容和指令的地址碼A相加得到,如圖5-5所示。在這種情況下,地址碼A通常被稱為位移量(Disp)。也可用其他方法獲得位移量。,圖5-5 基址尋址過程,5.4 尋 址 方 式,,4. 變址尋址 變址尋址的過程如圖5-6所示。指令地址碼部分給出的地址A和指定的變址寄存器R
19、的內(nèi)容通過加法器相加,所得的和作為地址從存儲器中讀出所需的操作數(shù)。這是幾乎所有計算機(jī)都采用的一種尋址方式。如果計算機(jī)中還有基址寄存器,則在計算有效地址時還要加上基址寄存器內(nèi)容。,,圖5-6 變址尋址過程,5.4 尋 址 方 式,,5. 間接尋址 在尋址時,若根據(jù)指令的地址碼所取出的內(nèi)容是操作數(shù)的地址或指令地址,這種尋址方式就稱為間接尋址或間址。根據(jù)地址碼指的是寄存器地址還是存儲器地址,間接尋址又可分為寄存器間接尋址和存儲器間接尋址兩種方式。間接尋址有一次間址和多次間址兩種情況,大多數(shù)計算機(jī)只允許一次間址。對于存儲器一次間址來說,需要訪問兩次存儲器才能取得數(shù)據(jù),第一次從存儲器讀出的是操作數(shù)的地址
20、,第二次才讀出操作數(shù)。,5.4 尋 址 方 式,,圖5-7(a)、(b)分別為寄存器間接尋址與存儲器間接尋址的操作數(shù)尋址過程。圖5-8以轉(zhuǎn)移指令JUMP為例,說明在直接尋址和間接尋址方式下,如何確定下一條要執(zhí)行的指令地址。,(a) 寄存器間接尋址,(b) 存儲器間接尋址,圖5-7 間接尋址過程,,(a) 直接尋址,(b) 間接尋址,圖5-8 確定JUMP指令的轉(zhuǎn)移地址,5.4 尋 址 方 式,,,6. 相對尋址 把程序計數(shù)器PC的內(nèi)容(即當(dāng)前正在執(zhí)行的指令地址)與地址碼部分給出的位移量(Disp)之和作為操作數(shù)的地址或轉(zhuǎn)移地址,稱為相對地址。主要用于轉(zhuǎn)移指令,執(zhí)行本條指令之后,將轉(zhuǎn)移到(PC)
21、+Disp,(PC)表示程序計數(shù)器的內(nèi)容。相對尋址有兩個特點(diǎn):第一,轉(zhuǎn)移地址不是固定的,它隨著PC值的變化而變化,并且總是相差一個固定值Disp,因此無論程序裝入存儲器的任何地方,均能正確運(yùn)行,對浮動程序很適用。第二,位移量可正可負(fù),通常用補(bǔ)碼表示。若位移量為n位,則這種方式的尋址范圍在到之間。,5.4 尋 址 方 式,,當(dāng)前計算機(jī)的程序和數(shù)據(jù)一般是分開存放的,程序區(qū)在程序執(zhí)行過程中不允許修改。在程序與數(shù)據(jù)分區(qū)存放的情況下,不用相對尋址方式來確定操作數(shù)地址。 7. 立即數(shù) 所需的操作數(shù)由指令的地址碼部分直接給出,就稱為立即數(shù)(或直接數(shù))尋址方式。這種方式的特點(diǎn)是,取指時操作碼和一個操作數(shù)同時被
22、取出,不必再次訪問存儲器,提高了指令的執(zhí)行速度。但是由于這一操作數(shù)是指令的一部分,不能修改,而一般情況下,指令所處理的數(shù)據(jù)都是在不斷變化的(如上條指令執(zhí)行的結(jié)果是下條指令的操作數(shù)),故這種方式只能適用于操作數(shù)固定的情況。通常用于給某一寄存器或存儲器單元賦初值或提供一個常數(shù)。,5.5 指 令 類 型,一臺計算機(jī)的指令系統(tǒng)通常有幾十條至幾百條指令,按其所完成的功能可分為算術(shù)邏輯運(yùn)算指令、移位操作指令、浮點(diǎn)運(yùn)算指令、十進(jìn)制運(yùn)算指令、字符串處理指令、向量運(yùn)算指令、數(shù)據(jù)傳送指令、轉(zhuǎn)移類指令、堆棧操作指令、輸入/輸出指令、特權(quán)指令。本節(jié)分別說明各類指令的功能。,5.5 指 令 類 型,,1. 算術(shù)邏輯運(yùn)算
23、指令 一般計算機(jī)都有算術(shù)邏輯運(yùn)算指令。通常計算機(jī)具有對兩個數(shù)進(jìn)行與、或、非(求反)、異或(按位加)等操作的邏輯運(yùn)算指令。有些計算機(jī)還設(shè)置有位操作指令,如位測試(測試指定位的值)、位清除(把指定位清零)、位求反(取某位的反值)指令等。 2. 移位操作指令 移位操作指令分為算術(shù)移位、邏輯移位和循環(huán)移位3種,可以將操作數(shù)左移或右移若干位,如圖5-9所示。,圖5-9 各種移位的操作過程,5.5 指 令 類 型,3. 浮點(diǎn)運(yùn)算指令 高級語言中的實(shí)數(shù)(Real)經(jīng)常是先轉(zhuǎn)換成浮點(diǎn)數(shù)的形式再進(jìn)行處理。某些機(jī)器沒有設(shè)置浮點(diǎn)運(yùn)算指令而用子程序?qū)崿F(xiàn),其速度較低。因此主要用于科學(xué)計算的計算機(jī)應(yīng)該設(shè)置浮點(diǎn)運(yùn)算指
24、令,一般能對單精度(32位)、雙精度(64位)數(shù)據(jù)進(jìn)行處理。 4. 十進(jìn)制運(yùn)算指令 在人機(jī)交互作用時,輸入/輸出的數(shù)據(jù)都是以十進(jìn)制形式表示的。在某些數(shù)據(jù)處理系統(tǒng)中輸入/輸出的數(shù)據(jù)很多,但對數(shù)據(jù)本身的處理卻很簡單。在不具有十進(jìn)制運(yùn)算指令的計算機(jī)中,首先將十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù),再在機(jī)器內(nèi)運(yùn)算;而后又轉(zhuǎn)換成十進(jìn)制數(shù)據(jù)輸出。在輸入/輸出頻繁的計算機(jī)系統(tǒng)中,設(shè)置十進(jìn)制運(yùn)算指令能提高數(shù)據(jù)處理的速度。,5.5 指 令 類 型,5. 字符串處理指令 字符串處理指令是一種非數(shù)值數(shù)據(jù)的處理指令,一般包括字符串傳送、字符串比較、字符串查詢、字符串轉(zhuǎn)換等指令。其中,字符串傳送指令所完成的操作是將數(shù)據(jù)塊從主存儲器
25、的某區(qū)域傳送到另一區(qū)域;字符串比較指令所完成的操作是將一個字符串與另一個字符串逐個字符進(jìn)行比較,以確定其是否相等;字符串查詢是查找在字符串中是否含有另一指定的子串或字符;字符串轉(zhuǎn)換是指將一種數(shù)據(jù)表達(dá)形式轉(zhuǎn)換成另一種表達(dá)形式,例如從ASCII碼轉(zhuǎn)換成EBCDIC碼(擴(kuò)充的二-十進(jìn)制交換碼)。這種指令在需對大量字符串進(jìn)行各種處理的文字編輯和排版方面非常有用。,5.5 指 令 類 型,6. 數(shù)據(jù)傳送指令 數(shù)據(jù)傳遞指令用以實(shí)現(xiàn)寄存器與寄存器、寄存器與存儲器單元、存儲器單元與存儲器單元之間的數(shù)據(jù)傳送。對于存儲器來講,數(shù)據(jù)傳送包括了對數(shù)據(jù)的讀(相當(dāng)于取數(shù)指令)或?qū)?相當(dāng)于存數(shù)指令)操作。數(shù)據(jù)傳送時,數(shù)據(jù)
26、從源地址傳送到目的地址,而源地址中的數(shù)據(jù)保持不變,因此實(shí)際上是數(shù)據(jù)復(fù)制。 7. 轉(zhuǎn)移類指令 轉(zhuǎn)移類指令用以控制程序流的轉(zhuǎn)移。在大多數(shù)情況下,計算機(jī)是按順序方式執(zhí)行程序的,但是也經(jīng)常會遇到離開原來的順序轉(zhuǎn)移到另一段程序或循環(huán)執(zhí)行某段程序的情況。,,5.5 指 令 類 型,按轉(zhuǎn)移的性質(zhì),轉(zhuǎn)移指令分為無條件轉(zhuǎn)移、條件轉(zhuǎn)移、過程調(diào)用與返回、陷阱(Trap)等幾種。 1)無條件轉(zhuǎn)移與條件轉(zhuǎn)移 2)調(diào)用指令與返回指令 3)陷阱與陷阱指令 8.堆棧及堆棧操作指令 堆棧(Stack)是由若干個連續(xù)存儲單元組成的先進(jìn)后出(FILO)存儲區(qū),第一個送入堆棧中的數(shù)據(jù)存放在棧底,最近送入堆棧中的數(shù)據(jù)存放在棧頂。棧底
27、是固定不變的,而棧頂卻是隨著數(shù)據(jù)的入棧和出棧在不斷變化。為了表示棧頂?shù)奈恢?,有一個寄存器或存儲器單元用于指出棧頂?shù)牡刂?,這個寄存器或存儲器單元就稱為堆棧指針SP(Stack Pointer)。任何堆棧操作只能在棧頂進(jìn)行。,,5.5 指 令 類 型,壓入指令 PUSH OPR 把OPR(長度為兩個字節(jié))壓入堆棧 操作是:(SP)-2SP,OPR(SP) 彈出指令 POP OPR 彈出一個數(shù)據(jù)(長度為兩個字節(jié))送OPR 操作是:((SP))OPR,(SP)+2SP 由于堆棧具有先進(jìn)后出的性質(zhì),因而在中斷、子程序調(diào)用過程中廣泛用于保存返回地址、狀態(tài)標(biāo)志及現(xiàn)場信息。 堆棧還有一個重要的作用,就是
28、用于子程序調(diào)用時參數(shù)的傳遞,特別是在不同語言程序之間相互調(diào)用過程中,使用堆棧來傳遞數(shù)據(jù)更加普遍。,,5.5 指 令 類 型,9. 輸入/輸出(I/O)指令 計算機(jī)所處理的一切原始數(shù)據(jù)和所執(zhí)行的程序(除了固化在ROM中的以外)均來自外部設(shè)備的輸入,處理結(jié)果需要外部設(shè)備輸出。輸入/輸出指令的一般格式是OP REG A。其中,OP是操作碼,表示I/O指令。REG是寄存器名,用于指定與外部設(shè)備交換數(shù)據(jù)的CPU中的某寄存器。A是外部設(shè)備接口中的寄存器地址或設(shè)備碼,其長度一般為8位或16位,可以表示25664K個設(shè)備寄存器(接口中有3類寄存器,即輸入數(shù)據(jù)寄存器、輸出數(shù)據(jù)寄存器和控制寄存器)。輸入指令用于從
29、A地址所指定的外部設(shè)備寄存器中讀入一個數(shù)據(jù)到REG寄存器中;輸出指令剛好相反,把REG寄存器中的數(shù),5.5 指 令 類 型,,據(jù)送到A地址所指定的外部設(shè)備寄存器中。此外,I/O指令還可用來發(fā)送控制命令和接收回答信號,用以控制外部設(shè)備的工作。 10. 特權(quán)指令 某些指令使用不當(dāng)會破壞系統(tǒng)或其他用戶信息,因此為了安全起見,這類指令只能用于操作系統(tǒng)或其他系統(tǒng)軟件,而不提供給用戶使用,稱為特權(quán)指令。 11. 其他指令 其他指令包括向量指令、多處理機(jī)指令和控制指令??刂浦噶畎ǖ却噶?,停機(jī)指令,空操作指令,開中斷、關(guān)中斷、置條件碼指令。,,5.6 指令系統(tǒng)舉例,下面通過幾種類型計算機(jī)指令系統(tǒng)的介紹來
30、增加認(rèn)識,這些計算機(jī)(或處理器)是Sun微系統(tǒng)公司的SPARC90(RISC)、IBM 360/370系列(CISC)、PDP 11/VAX 11(CISC)系列,Intel公司的Pentium系列(基于RISC的處理器內(nèi)核)。,5.6 指令系統(tǒng)舉例,5.6.1 SPARC的指令系統(tǒng) 5.6.2 IBM大型機(jī)指令系統(tǒng) 5.6.3 PDP 11與VAX 11基本指令格式 5.6.4 Pentium 的指令系統(tǒng),5.6.1 SPARC的指令系統(tǒng),SPARC指令字長32位,有3種指令格式、6種指令類型。 1SPARC的指令類型 1)算術(shù)運(yùn)算/邏輯運(yùn)算/移位指令 加法指令4條:ADD、ADDCC、AD
31、DX、ADDXCC。 減法指令4條:SUB、SUBCC、SUBX、SUBXCC。 檢查標(biāo)記的加法指令2條:TADDCC、TADDCCTV。 檢查標(biāo)記的減法指令2條:TSUBCC、TSUBCCTV。 邏輯運(yùn)算指令共12條:AND、ANDCC、ANDN、ANDNCC;OR、ORCC、ORN、ORNCC;XOR、XORCC、XORN、XORNCC。,,5.6.1 SPARC的指令系統(tǒng),移位指令3條:SLL(邏輯左移)、SRL(邏輯右移)、SRA(算術(shù)右移)。 其他還有乘法步、SETHI、SAVE、RESTORE等。SAVE和RESTORE兩條指令分別將現(xiàn)行窗口指針減1和加1。 現(xiàn)在對4條加法指令進(jìn)行
32、說明。以CC結(jié)尾的加法指令表示除了進(jìn)行加法運(yùn)算以外還要根據(jù)運(yùn)算結(jié)果置狀態(tài)觸發(fā)器N、Z、V、C;X表示加進(jìn)位信號;XCC表示加進(jìn)位信號并置N、Z、V、C。 2)LOAD/STORE指令 取/存字節(jié)(LDSB/STB)、半字、字、雙字共20條指令,其中一半是特權(quán)指令。,5.6.1 SPARC的指令系統(tǒng),SPARC結(jié)構(gòu)將存儲器分成若干區(qū),其中有4個區(qū)分別為用戶程序區(qū)、用戶數(shù)據(jù)區(qū)、系統(tǒng)程序區(qū)和系統(tǒng)數(shù)據(jù)區(qū)。并規(guī)定在執(zhí)行用戶程序時,只能從用戶程序區(qū)取指令,在用戶數(shù)據(jù)區(qū)存取數(shù)據(jù);而執(zhí)行系統(tǒng)程序時則可以使用特權(quán)指令訪問任一區(qū)。 另外還有兩條供多處理機(jī)系統(tǒng)使用的數(shù)據(jù)交換指令SWAP和讀后置字節(jié)指令LDSTUB。
33、 3)控制轉(zhuǎn)移類指令5條。 4)讀/寫專用寄存器指令8條。 以上指令共計66條。 5)浮點(diǎn)運(yùn)算指令。 6)協(xié)處理器指令。,5.6.1 SPARC的指令系統(tǒng),由于SPARC為整數(shù)運(yùn)算部件(IU),所以當(dāng)執(zhí)行浮點(diǎn)運(yùn)算指令或協(xié)處理器指令時,將交給浮點(diǎn)運(yùn)算器或協(xié)處理器處理,當(dāng)機(jī)器沒有配置這種部件時,將通過子程序?qū)崿F(xiàn)。 2SPARC的指令格式,,,格式1:CALL指令,格式2:SETHI指令和BRANCH指令,,5.6.1 SPARC的指令系統(tǒng),,格式3:其他指令,,3. 各類指令的功能及尋址方式 下面簡單介紹第一類至第四類指令。 1)算術(shù)邏輯運(yùn)算指令 功能:(rs1)OP(rs2) rd (當(dāng)i=0
34、時) (rs1) OP Simm13 rd (當(dāng)i=1時) RISC的特點(diǎn)之一是所有參與算術(shù)邏輯運(yùn)算的數(shù)均在寄存器中。,5.6.1 SPARC的指令系統(tǒng),2)LOAD/STORE指令(取數(shù)/存數(shù)指令) 功能:LOAD指令將存儲器中的數(shù)據(jù)送往rd中;STORE指令將rd的內(nèi)容送往存儲器中。 存儲器地址的計算(寄存器間接尋址方式):當(dāng)i=0時,存儲器地址=(rs1)+(rs2);當(dāng)i=1時,存儲器地址=(rs1)+Simm13。在RISC中,只有LOAD/STORE指令訪問存儲器。 3)控制轉(zhuǎn)移類指令 控制轉(zhuǎn)移類指令用于改變PC值,SPARC有以下5種控制轉(zhuǎn)移指令。 (1)條件轉(zhuǎn)移(BRANCH
35、):根據(jù)指令中的Cond字段(條件碼)決定程序是否轉(zhuǎn)移。轉(zhuǎn)移地址由相對尋址方式形成。,,5.6.1 SPARC的指令系統(tǒng),(2)轉(zhuǎn)移并連接(JMPL):采用寄存器間址方式形成轉(zhuǎn)移地址,并將本條指令的地址(即PC值)保存在以rd為地址的寄存器中,以備程序返回時用。 (3)調(diào)用(CALL):采用相對尋址方式形成轉(zhuǎn)移地址。為了擴(kuò)大尋址范圍,本條指令的操作碼只取兩位,位移量有30位。 (4)陷阱(TRAP):采用寄存器間址方式形成轉(zhuǎn)移地址。 (5)從TRAP程序返回(RETT):采用寄存器間址方式形成返回地址。 4)讀/寫專用寄存器指令 SPARC有4個專用寄存器(PSR、Y、WIM、TBR),其中
36、PSR稱為程序狀態(tài)寄存器。,5.6.2 IBM大型機(jī)指令系統(tǒng),現(xiàn)在簡單介紹IBM 360/370的結(jié)構(gòu)及指令系統(tǒng)。IBM 360是32位機(jī)器,按字節(jié)尋址,支持的數(shù)據(jù)類型有字節(jié)、半字、字、雙字(雙精度實(shí)數(shù))、裝配的十進(jìn)制數(shù)(用4位二進(jìn)制碼表示一個十進(jìn)制數(shù),一個字節(jié)放兩個十進(jìn)制數(shù)字)和未經(jīng)裝配(拆卸)的字符串(一個字節(jié)放一個字符)。機(jī)內(nèi)有16個32位通用寄存器,4個雙精度(64位)浮點(diǎn)寄存器。 IBM 360/370有5種指令格式,如圖5-10所示。,圖5-10 IBM 360/370 指令格式,5.6.2 IBM大型機(jī)指令系統(tǒng),(1)RR(寄存器-寄存器)格式:兩個源操作數(shù)都在寄存器中,結(jié)果放在
37、第一個源寄存器中。 (2)RX(寄存器-變址):第一個源操作數(shù)與結(jié)果放在同一寄存器中,第二個源操作數(shù)在存儲器中,其地址為(X2)+(B2)+D2,D2為12位位移量(無符號)。 (3)RS(寄存器-寄存器):R1是存放結(jié)果的目的寄存器,R3為源操作數(shù)寄存器,另一個操作數(shù)在存儲器中,其地址為(B2)+D2。RS與RX的區(qū)別在于RS是三地址格式,并取消了變址寄存器。 (4)SI(寄存器-立即數(shù)):將立即數(shù)imm(8位)送到存儲器,其地址為(B1)+D1。 (5)SS(存儲器-存儲器):兩個操作數(shù)都在存儲器,5.6.2 IBM大型機(jī)指令系統(tǒng),中,其地址分別為(B1)+D1和(B2)+D2,(B1)+
38、 D1還是目的地址。SS格式用于十進(jìn)制運(yùn)算與字符串處理,數(shù)據(jù)長度(Length)字段可定義為1個長度(1256個字符)或兩個長度(每一個為116個十進(jìn)制數(shù))。,5.6.3 PDP 11與VAX 11基本指令格式,VAX 11/780是DEC公司于1977年推出的VAX系列的第一個產(chǎn)品,它將PDP 11結(jié)構(gòu)從16位擴(kuò)充到32位。VAX是一種通用寄存器機(jī)器,它有16個通用寄存器,但是R14是堆棧指針,R15為程序計數(shù)器PC,是專用的,因此只有其他14個才是真正的通用寄存器。 VAX的數(shù)據(jù)類型:整數(shù)有8、16、32、64、128位5種類型,浮點(diǎn)數(shù)有32、64、128位3種表示方式。另外有8n位字符串
39、、4n 位BCD碼,其中n為字符或數(shù)字的數(shù)量。VAX還支持固定或可變長度的位串(最長為32位)處理。,,5.6.3 PDP 11與VAX 11基本指令格式,PDP 11是16位小型機(jī),它有兩組通用寄存器(R0R5),在任一時刻只有一組工作;3個硬件堆棧指示器(R6);一個程序計數(shù)器PC(R7)。根據(jù)兼容性質(zhì),VAX 11應(yīng)包括PDP 11的全部指令與尋址方式,即PDP11上的程序不做任何修改即可在VAX 11上運(yùn)行。現(xiàn)以PDP 11的單操作數(shù)指令與雙操作數(shù)指令為例,對它們的指令格式與尋址方式作簡單介紹。,5.6.3 PDP 11與VAX 11基本指令格式,1.單操作數(shù)指令,,指令格式:,第15
40、6位表示操作碼。第50位組成一個6位的字段,既是源地址字段也是目的地址字段。第20位說明本指令使用8個寄存器中的哪一個,第53位表示使用哪種尋址方式。其中第3位為0時表示直接尋址,第3位為1時表示間接尋址,第54位表示4種基本尋址方式。 單操作數(shù)指令有清除(CLR)、增1(INC)、減1(DEC)、求補(bǔ)(NEG)、測試(TST)等。,5.6.3 PDP 11與VAX 11基本指令格式,2.雙操作數(shù)指令,指令格式:,第1512位表示操作碼。第116位組成一個6位字段,為源地址字段(第一操作數(shù));第50位組成另一個6位字段,既是源操作數(shù)字段(第二操作數(shù)),也是目的操作數(shù)字段。 雙操作數(shù)指令有傳送(
41、MOV)、加(ADD)、減(SUB)、比較(CMP)、按位加(XOR)、邏輯加(BIS)等。,5.6.3 PDP 11與VAX 11基本指令格式,3. 轉(zhuǎn)移指令,,指令格式:,轉(zhuǎn)移地址=PC+2位移量,4. 尋址方式 這里只講述單操作數(shù)指令與雙操作數(shù)指令的尋址方式。 1)直接尋址 表5-1列出了直接尋址的4種基本方式。現(xiàn)以ADD指令為例,來說明尋址方式。,表5-1 直接尋址方式,5.6.3 PDP 11與VAX 11基本指令格式,(1)ADD R2,R4,操作:R2內(nèi)容加到R4的內(nèi)容上。 例: 操 作 前 操 作 后,,5.6.3 PDP 11與VAX 11基本指令格式,(2)ADD(R
42、2)+,R4 指令代碼062204 操作:R2內(nèi)容為操作數(shù)地址,將此操作數(shù)加到R4的內(nèi)容上,然后R2的內(nèi)容加2。 例: 操作前 操作后,,5.6.3 PDP 11與VAX 11基本指令格式,(3)ADD-(R3),R0 指令代碼064300 操作:R3內(nèi)容減2后作為操作數(shù)地址,將此操作數(shù)加到R0的內(nèi)容上。 例: 操作前 操作后,,5.6.3 PDP 11與VAX 11基本指令格式,(4)ADD 30(R2),20(R5) 指令代碼066265 操作:R2內(nèi)容加30(加和是001130)作為源操作數(shù)地址,R5內(nèi)容加20(加和是002020)作為另一源操作數(shù)
43、和目的操作數(shù)地址,兩個操作數(shù)相加后,結(jié)果(加和是000002)存放在目的地址(002020)中。 例: 操作前 操作后,,5.6.3 PDP 11與VAX 11基本指令格式,2)間接尋址 表5-2列出了間接尋址的4種方式。間接尋址方式類似于相應(yīng)的直接尋址方式,這里僅舉兩例說明。,表5-2 間接尋址方式,5.6.3 PDP 11與VAX 11基本指令格式,(1)ADD (R2),R1 指令代碼061201 ADD R2,R1 操作前 操作后,,5.6.3 PDP 11與VAX 11基本指令格式,(2)變址間接方式 ADD 1000(R2),R1 指令代碼
44、067201 當(dāng)PC作為通用寄存器時,表5-1和表5-2中列出的尋址方式仍適用,特別是表5-3中所列出的幾種情況有特殊的效果。,表5-3 PC作為通用寄存器的特殊尋址方式,5.6.3 PDP 11與VAX 11基本指令格式,操作前 操作后,,5.6.4 Pentium 的指令系統(tǒng),Pentium 是完全的32位機(jī)。由于它是Intel公司在IBM PC上使用的8088CPU的嫡系后代,所以雖然Pentium 的性能與8088相比已不可同日而語,但可以完全向下兼容到8088。Intel公司的x86系列CPU采用的是CISC指令系統(tǒng)的設(shè)計思想,指令系統(tǒng)規(guī)模很龐大,但Pentium 卻采
45、用了一個基于RISC的處理器內(nèi)核,使用了RISC的大量特性,使Intel公司的x86系列微處理器的性能上升到一個嶄新的層次。 1Pentium 的指令格式 Pentium 的指令格式比較繁雜,最多可有6個變長域,其中5個是可選的,如圖5-11所示。,圖5-11 Pentium 的指令格式,5.6.4 Pentium 的指令系統(tǒng),(1)前綴字節(jié):前綴字節(jié)是一個額外的操作碼,它附加在指令的最前面,用于改變指令的操作。 (2)操作碼字節(jié):操作碼的最低位用于指示操作數(shù)是字節(jié)還是字,次低位用于指示內(nèi)存地址(若需要訪問內(nèi)存的話)是源地址還是目的地址。 (3)模式字節(jié):模式字節(jié)包含了與操作數(shù)有關(guān)的信息。該
46、字節(jié)可分為2位的MOD字段及兩個3位的寄存器字段REG和R/M。在某些情況下,模式字節(jié)的前3位可用做操作碼擴(kuò)展,這時操作碼的長度就是11位。,5.6.4 Pentium 的指令系統(tǒng),Pentium 指令系統(tǒng)規(guī)定操作數(shù)中必須有一個是在寄存器中。模式字段MOD與R/M字段組合定義另一個操作數(shù)的尋址方式,REG字段規(guī)定了另一個操作數(shù)所在的寄存器。 從邏輯上來說,EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP中的任意一個都可以用于源操作數(shù)寄存器和目的操作數(shù)寄存器。但是編碼規(guī)則禁止了其中的某些組合,而把它們用于特殊的目的。,,5.6.4 Pentium 的指令系統(tǒng),(4)額外模式字節(jié)SI
47、B:SIB字節(jié)定義了一個比例因子(Scale)和兩個寄存器。當(dāng)出現(xiàn)SIB字節(jié)的時候,計算操作數(shù)地址的方法是:先用變址寄存器(Index)乘上1、2、4或者8(由比例因子決定),然后再加上基址寄存器(Base),最后再根據(jù)MOD字節(jié)來決定是否要加上一個8位或者32位的偏移量。 (5)偏移量:偏移量字節(jié)給出了1、2或者4個字節(jié)的內(nèi)存地址。 (6)立即數(shù):立即數(shù)字節(jié)給出了1、2或者4個字節(jié)的常量。,,5.6.4 Pentium 的指令系統(tǒng),2Pentium 的尋址方式 Pentium 具有很大的地址空間,采用了段頁式存儲管理模式,即將內(nèi)存分為16384個段,每個段的容量為4GB,按0232-1進(jìn)行編
48、址,地址長度為32位,按照小端排序(低位地址存放在低位字節(jié))的方式存儲字。 Pentium配備了大量的寄存器,包括基本體系結(jié)構(gòu)寄存器、系統(tǒng)級寄存器、調(diào)試和測試寄存器、浮點(diǎn)寄存器等,其中32位的通用寄存器不僅可用于處理32位的數(shù)據(jù),還可用于處理16位和8位數(shù)據(jù),以滿足用戶的不同要求。,,,,5.6.4 Pentium 的指令系統(tǒng),為了滿足向下兼容的要求,Pentium的尋址方式非常沒有規(guī)律,它支持的尋址方式包括立即尋址、直接尋址、寄存器尋址、寄存器間接尋址、變址尋址、基址加變址尋址、相對尋址和用于數(shù)組元素的特殊尋址方式。當(dāng)然,并不是所有的指令都具有所有的尋址方式,也不是所有的寄存器都能用于所有
49、的尋址方式。表5-4給出了32位模式下的尋址方式。,表5-4 Pentium 的32位尋址方式(Mx表示x處的內(nèi)存字),5.6.4 Pentium 的指令系統(tǒng),3Pentium 的指令類型 Pentium指令系統(tǒng)包括如下指令類型:數(shù)據(jù)傳送類指令,算術(shù)運(yùn)算類指令,邏輯運(yùn)算類及位處理指令,字符串操作類指令,程序控制類指令,系統(tǒng)寄存器、表控制類指令,系統(tǒng)和Cache控制類指令,MMX(Multi-Media Extension)指令集。 由于Pentium 的指令系統(tǒng)比較龐大,這里就不具體列出了,需要時可參看有關(guān)資料。 4Pentium 的指令前綴 Pentium 的指令前綴是可以放在大多數(shù)指令之
50、前的一個特殊字節(jié),用于控制指令的執(zhí)行過程。例如:,5.6.4 Pentium 的指令系統(tǒng),REP 前綴表示重復(fù)執(zhí)行指令,直到ECX變成0。 REPZ 前綴表示重復(fù)執(zhí)行指令,直到條件碼Z 變?yōu)?。 REPNZ 前綴表示重復(fù)執(zhí)行指令,直到條件碼Z 變?yōu)?。 LOOK 前綴為整條指令保留總線,以允許多處理機(jī)同步。 還有一些指令前綴可以使指令運(yùn)行于16位模式或者32位模式下。這些指令前綴不僅需要指令改變操作數(shù)的長度,而且需要徹底地重新定義操作數(shù)的尋址方式。,5.7 機(jī)器語言、匯編語言和高級語言,計算機(jī)能夠直接識別并執(zhí)行的語言只能是一種用二進(jìn)制碼表示的、由一系列指令組成的機(jī)器語言。因此,對于任何一個要解
51、決的問題來說,不管使用哪一種計算機(jī)語言(匯編語言或高級語言)描述,都必須通過翻譯程序轉(zhuǎn)換成相應(yīng)的機(jī)器語言才能執(zhí)行。 機(jī)器語言存在可讀性差、不容易編程和不容易維護(hù)等許多缺陷,這就給編寫程序造成了許多困難。我們可以用預(yù)先規(guī)定的符號來分別替代二進(jìn)制碼表示的操作碼、操作數(shù)或地址,用便于記憶的符號而不是二進(jìn)制碼來編寫程序要方便得多。,5.7 機(jī)器語言、匯編語言和高級語言,例:設(shè)有兩個8字節(jié)數(shù)已分別放在雙字變量FIRST和SECONT中。存放時,最低字節(jié)在地址最低處(例如,數(shù)據(jù)123456789ABCDEF0H在內(nèi)存中存放的順序為0F0H、0DEH、0BCH、9AH、78H、56H、34H、12H),可用
52、下列80386匯編程序?qū)崿F(xiàn)相加。,5.7 機(jī)器語言、匯編語言和高級語言,MOV EAX,F(xiàn)IRST ;取第一個數(shù)的低32位到EAX ADD EAX,SECOND;與第二個數(shù)的低32位內(nèi)容相加 MOV THIRD,EAX;結(jié)果的低32位內(nèi)容存放到THIRD的低32位中 MOV EXA,F(xiàn)IRST+4;取第一個數(shù)的高32位內(nèi)容到EAX ADC EAX,SECOND+4;與第二個數(shù)高32位相加,再加上一步產(chǎn)生的進(jìn)位 MOV THIRD+4,EAX;結(jié)果送變量THIRD的高32位中,5.7 機(jī)器語言、匯編語言和高級語言,這種用助記符來表示二進(jìn)制碼指令序列的語言,稱為匯編語言(Assembly Lang
53、uage),它基本上是與機(jī)器語言一一對應(yīng)的。顯然,用匯編語言編寫的程序,計算機(jī)不能直接識別,必須將它翻譯成機(jī)器語言后才能執(zhí)行。翻譯過程是把用助記符表示的操作碼、操作數(shù)或地址用相應(yīng)的二進(jìn)制碼來替代,這個工作通常是由計算機(jī)執(zhí)行匯編程序(Assembler)來完成的。 用匯編語言編寫程序,對程序員來說雖然比用機(jī)器語言方便得多,編寫的程序可讀性較好,出錯也便于檢查和修改,但它同計算機(jī)的硬件結(jié)構(gòu)、指令系統(tǒng)的設(shè)置關(guān)系非常密切。,5.7 機(jī)器語言、匯編語言和高級語言,因此,匯編語言仍然是一種面向計算機(jī)硬件本身的語言,程序員用它編寫程序必須十分熟悉計算機(jī)硬件結(jié)構(gòu)的配置、指令系統(tǒng)和尋址方式,這對程序員來說要求是
54、很高的。同時,匯編指令的基本操作簡單(主要是簡單的算術(shù)/邏輯運(yùn)算和數(shù)據(jù)傳送),描述問題的能力差,用它編寫程序工作量大,源程序較長,可讀性仍然不好。匯編語言依賴于計算機(jī)的硬件結(jié)構(gòu)和指令系統(tǒng),而不同的機(jī)器有不同的結(jié)構(gòu)和指令,因而用它編寫的程序不能在其他類型的機(jī)器上運(yùn)行。 高級語言(High Level Language)FORTRAN、C、PASCAL、COBOL等就是為了克服匯編語言的這些缺點(diǎn)而發(fā)展起來的。高級語言與計算機(jī)的硬件結(jié)構(gòu),5.7 機(jī)器語言、匯編語言和高級語言,及指令系統(tǒng)無關(guān),因此用高級語言編寫程序,無須考慮機(jī)器字長、寄存器、狀態(tài)、尋址方式和內(nèi)存單元地址等,因而比使用匯編語言容易得多。
55、高級語言的表達(dá)方式比較接近于自然語言,描述問題的能力強(qiáng),通用性、可讀性和可維護(hù)性都很好。 顯然,就編寫程序來說,高級語言比匯編語言優(yōu)越得多,但它并非完美無缺,它存在的顯著缺點(diǎn)是:用高級語言編寫的程序,必須翻譯成機(jī)器語言才能執(zhí)行,這一工作通常是由計算機(jī)執(zhí)行編譯程序來完成的。由于編譯過程既復(fù)雜又死板,翻譯出來的機(jī)器語言程序非常冗長,如果讓有經(jīng)驗的程序員用匯編語言來編寫同樣功能的程序,至少可以節(jié)省2/3的內(nèi)存空間,速度則要快一倍以上。由于高級語言,5.7 機(jī)器語言、匯編語言和高級語言,程序看不見機(jī)器的硬件結(jié)構(gòu),因而不能用它來編寫需要訪問機(jī)器硬件資源的系統(tǒng)軟件或設(shè)備控制軟件。 為了克服高級語言不能直接
56、訪問機(jī)器硬件資源(如某個寄存器或存儲單元)的缺陷,一些高級語言(如C、PASCAL、FORTRAN等)提供了與匯編語言之間的調(diào)用接口。用匯編語言編寫的程序,可作為高級語言的一個外部過程或函數(shù),利用堆棧來傳遞參數(shù)或參數(shù)的地址(如何傳遞參數(shù)與高級語言的版本有關(guān))。兩者的源程序通過編譯或匯編生成目標(biāo)(OBJ)文件后,再利用連接程序(LINKER)把它們連接成可執(zhí)行文件,便可在機(jī)器上運(yùn)行。采用這種方法,用高級語言編寫程序時,若要使用機(jī)器的硬件資源,則可調(diào)用匯編程序來實(shí)現(xiàn)。,5.7 機(jī)器語言、匯編語言和高級語言,匯編語言和高級語言各有其特點(diǎn)和優(yōu)點(diǎn)。匯編語言與機(jī)器硬件關(guān)系密切,用它編寫的程序緊湊、占內(nèi)存小、速度快,特別適合于編寫經(jīng)常與硬件打交道的系統(tǒng)軟件;而高級語言不涉及機(jī)器的硬件結(jié)構(gòu),通用性強(qiáng),編寫程序容易,特別適合于編寫與硬件沒有直接關(guān)系的應(yīng)用軟件。,,
- 溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 110中國人民警察節(jié)(筑牢忠誠警魂感受別樣警彩)
- 2025正字當(dāng)頭廉字入心爭當(dāng)公安隊伍鐵軍
- XX國企干部警示教育片觀后感筑牢信仰之基堅守廉潔底線
- 2025做擔(dān)當(dāng)時代大任的中國青年P(guān)PT青年思想教育微黨課
- 2025新年工作部署會圍繞六個干字提要求
- XX地區(qū)中小學(xué)期末考試經(jīng)驗總結(jié)(認(rèn)真復(fù)習(xí)輕松應(yīng)考)
- 支部書記上黨課筑牢清廉信念為高質(zhì)量發(fā)展?fàn)I造風(fēng)清氣正的環(huán)境
- 冬季消防安全知識培訓(xùn)冬季用電防火安全
- 2025加強(qiáng)政治引領(lǐng)(政治引領(lǐng)是現(xiàn)代政黨的重要功能)
- 主播直播培訓(xùn)直播技巧與方法
- 2025六廉六進(jìn)持續(xù)涵養(yǎng)良好政治生態(tài)
- 員工職業(yè)生涯規(guī)劃方案制定個人職業(yè)生涯規(guī)劃
- 2024年XX地區(qū)黨建引領(lǐng)鄉(xiāng)村振興工作總結(jié)
- XX中小學(xué)期末考試經(jīng)驗總結(jié)(認(rèn)真復(fù)習(xí)輕松應(yīng)考)
- 幼兒園期末家長會長長的路慢慢地走