第四章(指令系統(tǒng))16_第1頁
第四章(指令系統(tǒng))16_第2頁
第四章(指令系統(tǒng))16_第3頁
第四章(指令系統(tǒng))16_第4頁
第四章(指令系統(tǒng))16_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第4章指令系統(tǒng)及ALU設(shè)計(jì)主要內(nèi)容 指令系統(tǒng)結(jié)構(gòu) 操作數(shù)類型 數(shù)據(jù)在存儲(chǔ)器中的存放方法 指令類型 指令結(jié)構(gòu) 尋址方式 MIPS指令格式和通用寄存器定義 MIPS指令格式 MIPS通用寄存器 MIPS指令和ALU設(shè)計(jì) 本書CPU可執(zhí)行的MIPS指令 ALU設(shè)計(jì) 一個(gè)CPU的指令系統(tǒng)(Instruction Set)定義該CPU“所能做的”或者“應(yīng)該做的”工作。 “所能做的”意思是告訴系統(tǒng)軟件設(shè)計(jì)者該CPU能做什么事情(軟件設(shè)計(jì)者使用它)。 “應(yīng)該做的”意思是告訴硬件設(shè)計(jì)者在設(shè)計(jì)CPU時(shí)應(yīng)該讓CPU完成的任務(wù)(硬件設(shè)計(jì)者實(shí)現(xiàn)它)。 它處在軟件設(shè)計(jì)者與硬件設(shè)計(jì)者之間能對(duì)上話的一個(gè)“接口”。4.1 指

2、令系統(tǒng)結(jié)構(gòu) CPU不能直接執(zhí)行高級(jí)語言和匯編語言編寫的程序,必須通過編譯器或匯編器將該程序轉(zhuǎn)換成該計(jì)算機(jī)可執(zhí)行的二進(jìn)制代碼。 指令系統(tǒng)結(jié)構(gòu)ISA定義指令的格式、指令的意義、操作數(shù)的類型和指令能訪問的寄存器和存儲(chǔ)器地址。 問題:如何區(qū)分主存中某單元的內(nèi)容是數(shù)據(jù)還是指令? 一般用戶無法區(qū)分。 程序員可以事先安排好。 處理器在取指令周期取出的是指令,否則取出的是數(shù)據(jù)。 處理器支持的指令集構(gòu)成了該處理器的指令系統(tǒng)。指令系統(tǒng)功能越強(qiáng),處理器也就功能越強(qiáng)。4.1.1 操作數(shù)的類型 指令的主要任務(wù)是對(duì)操作數(shù)進(jìn)行計(jì)算。操作數(shù)有不同的類型及相應(yīng)的長度,如下表所示。4.1.2 數(shù)據(jù)在存儲(chǔ)器中的存放方法 主存的地址

3、是按字節(jié)編址。 一個(gè)字有4個(gè)字節(jié),它們?cè)诖鎯?chǔ)器中的存放方法有2種: Little Endian (從小地址開始存放) Big Endian(從大地址開始存放) 如圖(a) Little Endian(b)Big Endian 處理器字長一般是8b、16b、32b、64b等之一,是字節(jié)的整數(shù)倍。 設(shè)機(jī)器字長為32(4B)位,計(jì)算機(jī)的指令和數(shù)據(jù)可以是字節(jié)、半字(16位)、字(32位)、雙字(64位) 。在主存中如何存取呢? 填鴨式的存儲(chǔ)(不要求對(duì)準(zhǔn)邊界)。只要有空字節(jié)就可以存。 要求對(duì)準(zhǔn)邊界。按信息的整數(shù)邊界原則進(jìn)行存儲(chǔ)。優(yōu)點(diǎn)是便于硬件實(shí)現(xiàn)。缺點(diǎn)是浪費(fèi)了存儲(chǔ)空間。圖存儲(chǔ)器中數(shù)據(jù)的存放(舉例)(b)

4、多字節(jié)數(shù)據(jù)對(duì)準(zhǔn)邊界(a)不要求對(duì)準(zhǔn)邊界 信息的整數(shù)邊界原則:指信息的地址(按字節(jié)編址,用存放信息低位的字節(jié)地址表示)必須是該信息寬度(字節(jié)數(shù))的整數(shù)倍。 各種寬度的信息地址: 字節(jié)地址XXXX半字地址XXX0字地址XX00 雙字地址X000 其中X為任意二進(jìn)制數(shù)碼。4.1.3 指令類型 對(duì)于不同數(shù)據(jù)類型的操作應(yīng)當(dāng)用不同的操作碼,如整數(shù)加法和浮點(diǎn)加法應(yīng)當(dāng)使用不同的操作碼,視為不同的指令。 按指令的功能分類,可分為 1、算術(shù)運(yùn)算指令 整數(shù)和浮點(diǎn)數(shù)的加、減、乘、除等。 表征結(jié)果的特征:Z,C,V,N 2、邏輯運(yùn)算 與、或、非(反)、異或等,及位操作指令,如位測(cè)試、位清除、位求反等。 3、移位操作指令

5、 按移位性質(zhì)分為:算術(shù)移位(需考慮溢出)邏輯移位循環(huán)移位 按移位方向分為:左移右移, 按移位位數(shù)分為:一位多位 算術(shù)移位、邏輯移位和循環(huán)移位如下圖。圖5.10移位操作C0左移算術(shù)移位C右移C0左移邏輯移位C右移0C左移小循環(huán)移位C右移循環(huán)移位C左移大循環(huán)移位C右移 4、數(shù)據(jù)傳送指令 實(shí)現(xiàn)數(shù)據(jù)傳送:寄存器寄存器寄存器存儲(chǔ)器單元存儲(chǔ)器單元存儲(chǔ)器單元 寄存器外設(shè)(接口) 對(duì)于存儲(chǔ)器(寄存器)來講,數(shù)據(jù)傳送包括了對(duì)一個(gè)或一批數(shù)據(jù)的讀或?qū)懖僮鳌?數(shù)據(jù)傳送時(shí),數(shù)據(jù)從源地址傳送到目的地址,而源地址中的數(shù)據(jù)保持不變。 有些機(jī)器設(shè)置了數(shù)據(jù)交換指令。半字節(jié)交換 5、I/O訪問類指令 訪問I/O端口,有讀寫之分。

6、與存儲(chǔ)器訪問不同,向端口寫入的信息可能是控制信息,而從端口中讀出的可能是狀態(tài)信息。 I/O指令訪問只出現(xiàn)在具有分開的I/O空間和存儲(chǔ)空間獨(dú)立編址。 若使用單一的地址空間,其中一部分空間分給I/O,同樣使用存儲(chǔ)器訪問指令來訪問這部分I/O空間-存儲(chǔ)映像的I/O空間-統(tǒng)一編址。 6、轉(zhuǎn)移類指令 用于控制程序流的轉(zhuǎn)移。 按轉(zhuǎn)移性質(zhì)分為 (1)無條件轉(zhuǎn)移 無條件轉(zhuǎn)移指令不受任何條件約束,直接把程序轉(zhuǎn)移到指令所規(guī)定的目的地,在那里繼續(xù)執(zhí)行程序。 (2)條件轉(zhuǎn)移指令 是根據(jù)計(jì)算機(jī)的處理結(jié)果來決定程序如何執(zhí)行。它先測(cè)試條件碼,然后根據(jù)所測(cè)試的條件是否滿足來決定是否轉(zhuǎn)移。 條件碼建立與轉(zhuǎn)移判斷: 在轉(zhuǎn)移指令中

7、先完成比較運(yùn)算,然后根據(jù)比較的結(jié)果來判斷轉(zhuǎn)移條件是否成立,如果條件為“真”則轉(zhuǎn)移,否則順序執(zhí)行下一條指令。 由轉(zhuǎn)移指令之前的指令來建立條件碼,轉(zhuǎn)移指令根據(jù)條件碼來判斷是否轉(zhuǎn)移。 條件碼:進(jìn)位C、結(jié)果為零Z、結(jié)果溢出V、結(jié)果為負(fù)N、奇偶校驗(yàn)P。 轉(zhuǎn)移地址形成: 相對(duì)轉(zhuǎn)移,即執(zhí)行PC(PC)+位移量, 絕對(duì)轉(zhuǎn)移,即PC目標(biāo)(有效)地址。 (3)調(diào)用指令與返回指令 在編寫程序過程中,常常需要編寫一些經(jīng)常使用的,能夠獨(dú)立完成某一特定功能的程序段,在需要時(shí)能隨時(shí)調(diào)用,以節(jié)省存儲(chǔ)器空間和簡(jiǎn)化程序設(shè)計(jì)。這種程序段就稱為子程序、過程、函數(shù)。 使用調(diào)用指令(過程調(diào)用/系統(tǒng)調(diào)用/轉(zhuǎn)子程序) 來實(shí)現(xiàn)從一個(gè)程序轉(zhuǎn)移到

8、另一個(gè)程序的操作。 子程序調(diào)用與條件、無條件指令的主要區(qū)別: 子程序調(diào)用需要保存返回地址,即返回到原調(diào)用的程序繼續(xù)執(zhí)行子程序調(diào)用指令的下一條指令。 返回地址一般保存在堆棧中,隨同保存的還有狀態(tài)寄存器。 返回Return指令從堆棧中取出返回地址。 (4)陷阱(Trap)與陷阱指令 在計(jì)算機(jī)運(yùn)行過程中,有時(shí)可能出現(xiàn)電源電壓不穩(wěn)、校驗(yàn)錯(cuò)、輸入/輸出設(shè)備出現(xiàn)故障、非法操作碼等意外情況,使得計(jì)算機(jī)不能正常工作。因此,一旦出現(xiàn)故障,計(jì)算機(jī)就發(fā)出陷阱信號(hào),并暫停當(dāng)前程序的執(zhí)行(稱為中斷),轉(zhuǎn)入故障處理程序進(jìn)行相應(yīng)的故障處理。 陷阱指令一般作為隱含指令不提供給用戶使用,只有在出現(xiàn)故障時(shí),才由CPU自動(dòng)產(chǎn)生并執(zhí)

9、行。 7、堆棧及堆棧操作指令 堆棧是由若干個(gè)連續(xù)存儲(chǔ)單元組成的先進(jìn)后出存儲(chǔ)區(qū),所有的數(shù)據(jù)操作都在棧頂進(jìn)行。 棧底是固定不變的,而棧頂是隨著數(shù)據(jù)的入棧和出棧在不斷變化。 可以用一個(gè)寄存器或存儲(chǔ)器單元指出棧頂?shù)牡刂?,這個(gè)寄存器或存儲(chǔ)器單元稱為堆棧指針SP。 用于堆棧訪問的指令u(1)壓棧指令(PUSH)是把指定的操作數(shù)送入堆棧的棧頂。u(2)彈出指令(POP)是把棧頂?shù)臄?shù)據(jù)取出,送到指令所規(guī)定的目的地。 按棧的生長方向,堆棧分:u向下生長的棧從高地址向低地址擴(kuò)展。u向上生長的棧從低地址向高地址擴(kuò)展。 設(shè)棧為向下生長的棧(從高地址向低地址擴(kuò)展),且按字節(jié)編址,操作數(shù)為2字節(jié)。壓棧指令PUSHOPD其

10、操作是(SP)-SPOPD(SP)彈棧指令POPOPD其操作是 (SP)OPD(SP)+SP 堆棧的作用 在中斷、子程序調(diào)用中用于保存返回地址、狀態(tài)標(biāo)志及現(xiàn)場(chǎng)信息。 用于子程序調(diào)用時(shí)參數(shù)的傳遞。 8、特權(quán)指令(系統(tǒng)控制類指令) 由系統(tǒng)軟件專用,不提供給用戶使用。 用于系統(tǒng)資源的分配和管理,包括: 改變系統(tǒng)的工作方式 檢測(cè)用戶的訪問權(quán)限 修改虛擬存儲(chǔ)器管理的段表、頁表 完成任務(wù)的創(chuàng)建和切換 9、其它指令 (1)向量指令 (2)多處理機(jī)指令 (3)控制指令等待指令停機(jī)指令空操作指令開中斷關(guān)中斷置條件碼指令 當(dāng)單用戶情況下程序執(zhí)行完畢,安排一條停機(jī)指令不再繼續(xù)執(zhí)行程序。 10、浮點(diǎn)運(yùn)算類指令 浮點(diǎn)加

11、、減、乘、除、開方運(yùn)算。 整數(shù)與單精度浮點(diǎn)數(shù)轉(zhuǎn)換,整數(shù)與雙精度浮點(diǎn)數(shù)轉(zhuǎn)換,單精度浮點(diǎn)數(shù)轉(zhuǎn)換與雙精度浮點(diǎn)數(shù)轉(zhuǎn)換。4.1.4 指令格式指令格式(結(jié)構(gòu)結(jié)構(gòu)) 計(jì)算機(jī)的指令系統(tǒng)影響到: 計(jì)算機(jī)硬件結(jié)構(gòu)的復(fù)雜程度和運(yùn)行性能 用戶完成程序設(shè)計(jì)的難易程度和工作效率 必須對(duì)設(shè)計(jì)指令系統(tǒng)的工作給以足夠的重視對(duì)指令系統(tǒng)的要求對(duì)指令系統(tǒng)的要求完備性完備性: : 指令齊全,編程方便指令齊全,編程方便高效性:占主存少,運(yùn)行省時(shí)高效性:占主存少,運(yùn)行省時(shí)規(guī)整性:指令與運(yùn)算規(guī)則統(tǒng)一規(guī)整性:指令與運(yùn)算規(guī)則統(tǒng)一兼容性:新舊機(jī)指令軟件兼容兼容性:新舊機(jī)指令軟件兼容 一條指令必須包含下列信息: (1)操作碼。說明操作的性質(zhì)及功能,

12、具有唯一性。通過識(shí)別該操作碼來完成不同的操作。 (2)操作數(shù)地址??梢灾苯咏o出操作數(shù)或者指出操作數(shù)的存儲(chǔ)器(寄存器)地址。 (3)操作結(jié)果的存儲(chǔ)地址。 (4)下一條指令的地址。當(dāng)程序順序執(zhí)行時(shí),下一條指令的地址由程序計(jì)數(shù)器(PC)指出;僅當(dāng)改變程序的執(zhí)行順序時(shí),下條指令的地址才由指令給出。 指令格式操作碼操作碼 操作數(shù)地址操作數(shù)地址 操作碼指本條指令執(zhí)行什么操作。 地址碼指明操作數(shù)的來源(源地址)與運(yùn)算結(jié)果的去向(目的地址)。字長與指令長度的關(guān)系 字長是指計(jì)算機(jī)直接處理二進(jìn)制數(shù)據(jù)的位數(shù)。 通常機(jī)器字長/指令長度都是字節(jié)長度的整數(shù)倍。 指令長度=f(操作碼長度,操作數(shù)地址長度,操作數(shù)地址的個(gè)數(shù))

13、 指令的長度不一定是相等的。 一條指令存放在連續(xù)的存儲(chǔ)單元中。 地址碼的長度決定了指令直接尋址的能力,若為n位,則給出的n位直接地址可尋址2n個(gè)存儲(chǔ)單元。 擴(kuò)大尋址能力的方法: (1)通過增加機(jī)器字長來增加地址碼的長度; (2)采用地址擴(kuò)展技術(shù),把存儲(chǔ)空間分成若干個(gè)段,用基地址加位移量的方法(見尋址方式)來增加地址碼的長度。 常用的指令結(jié)構(gòu)的運(yùn)算器結(jié)構(gòu)有三種。 堆棧(Stack)結(jié)構(gòu):二個(gè)操作數(shù)總是在堆棧的棧頂。 累加器(Accumulator)結(jié)構(gòu):一個(gè)操作數(shù)總是在累加器中。 通用寄存器(General Purpose Register)結(jié)構(gòu): 寄存器存儲(chǔ)器結(jié)構(gòu):一個(gè)操作數(shù)在存儲(chǔ)器中,另一個(gè)

14、在存儲(chǔ)器中。 寄存器寄存器結(jié)構(gòu):二個(gè)操作數(shù)都在寄存器中。 如下圖。ALU棧頂指針CPU堆棧存儲(chǔ)器ALUCPU累加器存儲(chǔ)器ALUCPU寄存器堆存儲(chǔ)器ALUCPU寄存器堆存儲(chǔ)器(a)堆棧結(jié)構(gòu)(b)累加器結(jié)構(gòu)(c)寄存器-存儲(chǔ)器結(jié)構(gòu)(d)寄存器-寄存器結(jié)構(gòu)操作碼 若某機(jī)器的操作碼長度為K位,則它最多只能有2K條不同的指令。 指令操作碼的編碼格式: (1)固定格式,即操作碼的長度固定,且集中放在指令字的一個(gè)字段(若干連續(xù)位)中。 例如操作碼長度為8位,則最多可有28=256條指令。 優(yōu)點(diǎn):簡(jiǎn)化硬件設(shè)計(jì),減少指令譯碼時(shí)間,在大中型機(jī)和超級(jí)小型機(jī)及RISC上廣泛采用。 (2)可變格式,即操作碼的長度可變,

15、且分散地放在指令字的不同字段中。 優(yōu)點(diǎn):能夠有效地壓縮程序中操作碼的平均長度,節(jié)省存儲(chǔ)器空間,縮短了經(jīng)常使用的指令的譯碼時(shí)間。在微型機(jī)上廣泛使用。 缺點(diǎn):增加指令譯碼和分析的難度,使控制器的設(shè)計(jì)復(fù)雜化,需要更多的硬件來支持。 指令可變格式的做法 在指令字中用一個(gè)固定長度的字段來表示基本操作碼,而對(duì)于一部分不需要某個(gè)地址碼的指令,把操作碼擴(kuò)充到該地址字段。 例如設(shè)某機(jī)器的指令長度為16位,包括4位基本操作碼字段和三個(gè)4位地址字段,其格式如下: 如果需要61條指令,其中三地址指令15條,兩地址指令15條,一地址指令15條,零地址指令16條,應(yīng)如何安排操作碼?15 12 11 8 7 4 3 0 方

16、法之一如下:(1)15條三地址指令 0001 1111 0000(擴(kuò)展到A1)(2)15條二地址指令 0000 0001 0000 1111 0000 0000 (操作碼擴(kuò)展到A2)(3)15條一地址指令 0000 0000 0001 0000 0000 1111 0000 0000 0000 (操作碼擴(kuò)展到A3)(4)16條零地址指令0000 0000 0000 0000 0000 0000 000 01111 擴(kuò)展操作碼的原則: 使用頻率(指指令在程序中的出現(xiàn)概率)高的指令應(yīng)分配短的操作碼;反之分配較長的操作碼。 應(yīng)考慮操作硬件實(shí)現(xiàn)復(fù)雜。表 指令出現(xiàn)概率與操作碼長度的選擇操作碼平均長度=(

17、0.45+0.28+0.17)*2+(0.05+0.03+0.01+0.01)*4 =2.2二、地址碼 按地址的個(gè)數(shù)分類 1、零地址指令 格式: 使用場(chǎng)合: 無需任何操作數(shù)。如空操作指令、停機(jī)指令等。 所需的操作數(shù)是默認(rèn)的。如堆棧結(jié)構(gòu)計(jì)算機(jī)的運(yùn)算指令,所需的操作數(shù)默認(rèn)在堆棧中,由堆棧指針SP指出,操作結(jié)果仍然放回堆棧中(?)。操作碼 2、一地址指令 格式: 使用場(chǎng)合: 加1,減1,移位等單操作數(shù)操作。 功能:OP(A)A操作數(shù)、存儲(chǔ)器地址或寄存器地址 進(jìn)行雙操作數(shù)的算術(shù)邏輯運(yùn)算時(shí),第一個(gè)源操作數(shù)由地址碼A給出,第二個(gè)源操作數(shù)在一個(gè)默認(rèn)的寄存器AC(累加器)中,運(yùn)算結(jié)果仍送回到寄存器AC中。 功

18、能 (AC)OP(A)AC 3、二地址指令 格式: A1第一個(gè)源操作數(shù)的存儲(chǔ)器(寄存器)地址 A2第二個(gè)源操作數(shù)和存放操作結(jié)果的存儲(chǔ)器(寄存器)地址 功能: (A1)OP(A2)A2 說明:對(duì)兩個(gè)源操作數(shù)進(jìn)行操作碼所規(guī)定的操作后,將結(jié)果存入目的地址。 4、三地址指令 格式: A1第一個(gè)源操作數(shù)的存儲(chǔ)器(寄存器)地址 A2第二個(gè)源操作數(shù)的存儲(chǔ)器(寄存器)地址 A3操作結(jié)果的存儲(chǔ)器(寄存器)地址 功能:(A1)OP(A2)A3 對(duì)A1,A2指出的兩個(gè)源操作數(shù)進(jìn)行操作碼所指定的操作,結(jié)果存入A3中。 5、多地址指令 在某些機(jī)器中設(shè)置一些功能很強(qiáng)的用于處理成批數(shù)據(jù)的指令,如:字符串處理指令向量,矩陣運(yùn)

19、算指令 1、RR型指令 格式: 例如某機(jī)有200種操作,16個(gè)寄存器,每個(gè)寄存器均可寄存源操作數(shù)和目的操作數(shù),主存空間為1M 。問R-R型指令長度是多少? 解因128200256,所以O(shè)P為8位;16=24,所以寄存器的地址為4位該指令的長度=8+4*2=16位按操作數(shù)所在位置分(以二地址為例): 2、RM(MR)型指令 格式 例如某機(jī)有200種操作,16個(gè)寄存器,每個(gè)寄存器均可寄存源操作數(shù)和目的操作數(shù),主存空間為1M。問M-R型指令的長度是多少? 解因128200256,OP為8位;16=24,所以寄存器的地址為4位1M=220,所以存儲(chǔ)器的地址為20位該指令的長度=8+4+20=32位 3

20、、MM型指令 格式 例如某機(jī)有200種操作,16個(gè)寄存器,每個(gè)寄存器均可寄存源操作數(shù)和目的操作數(shù),主存空間為1M。請(qǐng)問M-M型指令的長度是多少? 解因128200256,所以O(shè)P為8位;1M=220,所以存儲(chǔ)器的地址為20位該指令的長度=8+2*20=48位MM型指令 結(jié)論: 采用RR型指令長度短,MM型指令最長。 RR型指令執(zhí)行時(shí)間短,MM型指令執(zhí)行時(shí)間長。 R的個(gè)數(shù)少,M的個(gè)數(shù)多。4.1.5 尋址方式 尋址方式是指確定本條指令的數(shù)據(jù)地址及下一條要執(zhí)行的指令地址的方法。 通常在指令中為每一個(gè)操作數(shù)專設(shè)一個(gè)地址字段,用來表示數(shù)據(jù)的來源或去向的地址。 形式地址A是指指令的地址碼部分給出的地址。

21、有效地址E是指形式地址按某種規(guī)則經(jīng)過計(jì)算后得到的能訪問到真正操作數(shù)的地址。在指令的操作數(shù)地址字段,可能要指出: 運(yùn)算器中的通用寄存器名稱(編號(hào)) 輸入/輸出指令中用到的 I/O 設(shè)備的入出端口地址 主存儲(chǔ)器的一個(gè)存儲(chǔ)單元(或一 I/O設(shè)備)的地址 由于有多種 尋址方式 ,指令中需要有一個(gè)字段M用以指明本指令的尋址方式,如尋址方式有8種,M字段需要3位。 基本尋址如下:在指令的地址碼字段直接給出所需的操作數(shù)(或指令)在存儲(chǔ)器中的地址。則 A為操作數(shù)在存儲(chǔ)器中的地址。 或轉(zhuǎn)移指令等用到的指令地址。1 1、直接尋址、直接尋址 例:M=000b,A=0 x5718 ,可用作下一條指令的地址;也可用作操

22、作數(shù)的地址,操作數(shù)=(0 x5718)=3 add r3,r1,0 x5718;r3-r1+Memory0 x57180 x571832、寄存器直接尋址、寄存器直接尋址指令地址碼字段給出的是某一通用寄存器編號(hào)(地址),且所需的操作數(shù)就在這一寄存器中,這就是寄存器直接尋址。例:設(shè)M=001b,RegNo.=2, 使用 2# 寄存器, 2# 寄存器中的內(nèi)容為 7, 可記為 (r2)=7。 若為寄存器直接尋址方式,操作數(shù)=7。 add r3,r1,r2; r3-r1+r2; 在計(jì)算機(jī)中設(shè)置一個(gè)專用的基址寄存器BS,操作數(shù)(或指令)的地址通過基址寄存器的內(nèi)容和指令中的地址碼相加得到。3 3、基址尋址、

23、基址尋址 例:設(shè)M=010b,A=0 x18, (BS)= 0 x5700。則操作數(shù)地址=(BS)+A=0 x5718 主要用于為程序或數(shù)據(jù)分配存儲(chǔ)區(qū),對(duì)多道程序或浮動(dòng)程序很有用,解決了程序在存儲(chǔ)器中的定位和擴(kuò)大尋址空間等問題。0 x57183操作數(shù)的地址由指定的變址寄存器(由X指定)的內(nèi)容和指令中的地址碼(A)相加得到。4 4、變址尋址、變址尋址( (偏移量充分尋址偏移量充分尋址) )例:設(shè)M=011b,A=0 x18,X= 2,(R2)=0 x5700則操作數(shù)地址=(X)+A= 0 x5718add r3,r1,0 x18(r2);r3-r1+Memoryr2+0 x180 x57183s

24、tart設(shè)數(shù)組A的首地址為ADDR 變址器R10,積R01計(jì)數(shù)器R2100 R0(R0)*(R1) + ADDR)R2(R2)-1(R2)=0?R1(R1)+1輸出R0endYN便于用循環(huán)對(duì)數(shù)組元素進(jìn)行處理。例:數(shù)組A100個(gè)元素相乘的程序(使用二地址指令)。 操作數(shù)(或指令)的地址由程序計(jì)數(shù)器 PC 的內(nèi)容(即當(dāng)前執(zhí)行指令的地址)和指令的地址碼相加得到。5 5、相對(duì)尋址、相對(duì)尋址 例:設(shè)M=100b,A=0 x48 (PC)=0 x5600 則有效地址=(PC)+A=0 x56481)主要用于轉(zhuǎn)移指令,對(duì)浮動(dòng)程序很有用。2)位移量可正可負(fù),通常用補(bǔ)碼表示。 指令的地址碼字段給出的內(nèi)容既不是操

25、作數(shù),也不是操作數(shù)的地址,而是操作數(shù)(或指令)地址的地址,這被稱為間接尋址方式,多次讀主存儲(chǔ)器的操作。設(shè)M=101b。6 6、間接尋址、間接尋址 間接尋址可以支持循環(huán)和數(shù)組操作。例:將數(shù)組A100中的數(shù)據(jù)復(fù)制到數(shù)組B100中。start設(shè)數(shù)組A的首地址為ADDR1 設(shè)數(shù)組B的首地址為ADDR2設(shè)存儲(chǔ)單元L1存放數(shù)組A的地址設(shè)存儲(chǔ)單元L2存放數(shù)組B的地址L1ADDR1,L2 ADDR2計(jì)數(shù)器R2100 R0( (L1) )(L2)(R0)R2(R2)-1(R2)=0?L1(L1)+1L2(L2)+1endNY7 7、立即數(shù)尋址、立即數(shù)尋址 所需的一個(gè)操作數(shù)在指令的地址字段部分直接給出。設(shè)M=11

26、0b。則 A 即為操作數(shù)的值。例如:add r1,r1,-1;r1-r1-1 適用于操作數(shù)固定的情況,提高了指令的執(zhí)行速度,當(dāng)該立即數(shù)的值限定為較小值(占用位數(shù)少)時(shí),可在第一個(gè)指令字中直接給出,否則可在第二個(gè)指令字中給出。8 8、堆棧尋址、堆棧尋址 堆棧是主存儲(chǔ)器中一塊按 “后進(jìn)先出” 原則進(jìn)行讀寫的存儲(chǔ)區(qū),并通過一個(gè)專用的寄存器(稱為堆棧指針SP)給出堆棧的棧頂(和次棧頂)地址完成數(shù)據(jù)的讀寫操作。通常在讀寫操作的前后伴隨有計(jì)算機(jī)自動(dòng)(不是用戶通過指令)修改 SP 內(nèi)容的動(dòng)作,以確保按正確的 “后進(jìn)先出” 原則讀寫堆棧區(qū)。例如:(SP)- 1 SP和 AR,即SP的內(nèi)容減 1 存回 SP,并

27、送主存地址寄存器,接下來才可以把數(shù)據(jù)寫到堆棧中。完成一次讀堆棧操作后,要接著執(zhí)行(SP)+ 1 SP 的一次自動(dòng)修改 SP 內(nèi)容的操作。需要注意的是,指令長度可能是一個(gè)字,也可能是兩個(gè)字或多個(gè)字,要看操作數(shù)地址字段的位數(shù)要求,由具體的情況決定。9、寄存器間接尋址 若該寄存器中存放的是操作數(shù)在主存儲(chǔ)器中所在單元的地址,這就是寄存器間接尋址。設(shè)M=111b。將間接尋址例中的L1和L2改成通用寄存器即為寄存器間接尋址的例子。 例如: add r3,r1,(r2); r3-r1+Memoryr2注意: 對(duì)于某一特定處理器而言,它可能只用到上述尋址方式中的一部分。 上述尋址方式可以組合起來使用。如基址尋

28、址與變址尋址組合使用。 可通過指令的操作碼或另設(shè)一個(gè)字段,來區(qū)分不同的尋址方式。4.2 MIPS指令格式和通用寄存器定義 這里的MIPS是MIPS32。 4.2.1 MIPS指令格式 MIPS所有的指令均為32位。指令有3種格式,如下圖所示。funcsardrtrsop5 010 615 1120 1625 2131 266位5位5位5位5位6位R類型immediatertrsop 01520 1625 2131 2616位5位5位6位I類型addressop 025 31 2626位6位J類型 說明 rs,rt為源寄存器號(hào)。 rd目的寄存器號(hào)。 sa只用于移位指令,用來指定移位的位數(shù)。 R類

29、指令的op=0。 I類指令的低16位是立即數(shù),計(jì)算時(shí)要把它擴(kuò)展到32位。 0擴(kuò)展(用于無符號(hào)數(shù)運(yùn)算)和符號(hào)擴(kuò)展(用于符號(hào)數(shù)運(yùn)算) J類指令右邊的26位是字地址,用于產(chǎn)生跳轉(zhuǎn)的目標(biāo)地址。4.2.2 MIPS通用寄存器 rs,rt,rd每個(gè)都有5位,所以它們一共能訪問25=32個(gè)寄存器。 P120表4.3列出了32個(gè)寄存器的名稱和它們的用途。 注意: 0號(hào)寄存器的內(nèi)容永遠(yuǎn)為0。 31號(hào)寄存器用來保存返回地址。 除了以上2點(diǎn),其他寄存器沒有什么區(qū)別,可以同樣使用。 在以后的使用中,不使用帶$的寄存器名,而是直接使用r+寄存器號(hào)。4.3 MIPS指令和ALU設(shè)計(jì) 4.3.1 本書CPU可執(zhí)行的MIPS

30、指令 這里選取若干典型的MIPS指令來描述CPU邏輯電路的設(shè)計(jì)方法。 典型指令如下表所示。 MIPS匯編語言用#號(hào)作為注釋部分。 下面簡(jiǎn)要介紹一下這些指令。 1、加、減、與、或、異或運(yùn)算指令 add/sub/and/or/xor rd,rs,rt # rd-rs op rt 2、邏輯左移、邏輯右移、算術(shù)右移指令 sll/srl/sar rd,rt,sa # rd-rt shift sa 3、16位數(shù)移入寄存器高位指令 lui rt,imm # rt-imm16 4、立即數(shù)的加法指令addi(符號(hào)擴(kuò)展) addi rt,rs,imm # rt-rs+imm(符號(hào)擴(kuò)展) 5、立即數(shù)的邏輯運(yùn)算指令

31、andi/ori/xori rt,rs,imm #rt-rs op imm(0擴(kuò)展) 6、讀(取)存儲(chǔ)字指令 lw rt,offset(rs) #rt-memoryrs+offset 7、寫(存)存儲(chǔ)字指令 sw rt,offset(rs) #memoryrs+offset-rt 8、條件轉(zhuǎn)移指令,如 beg rs,rt,label # if(rs=rt) PC-label bne rs,rt,label # if(rs!=rt) PC-label 9、無條件轉(zhuǎn)移指令 j target #PC-target 10 轉(zhuǎn)子(程序)指令 jal target #r31-PC+8;PC-target 11 子程序返回指令 jr rs #PC-rs4.3.2 ALU設(shè)計(jì) 綜合P121表中的指令,ALU需要實(shí)現(xiàn)以下運(yùn)算: 算術(shù)運(yùn)算-加add、減sub 邏輯運(yùn)算-與and、或or、異或xor 移位運(yùn)算-邏輯左移sll、邏輯右移srl、算術(shù)右移sra 置高位立即數(shù)lui 共有9個(gè)運(yùn)算,ALU的操作控制信號(hào)(碼)需要4位,邏輯電路圖如下。a b ssub 01010123sa d right sharith s za31:0b31:0aluc3:0aluc2r31:0aluc2al

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(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)論