版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、Ch5: Instruction Set指令系統(tǒng)第1講:指令系統(tǒng)的設(shè)計第2講:程序的機器級表示第一講 指令系統(tǒng)設(shè)計一條指令必須指定的信息指令中的地址碼個數(shù)指令系統(tǒng)設(shè)計的基本原則指令類型數(shù)據(jù)類型寄存器組織存儲器組織操作數(shù)的尋址方式立即 / 寄存器 / 寄存器間接 / 直接 / 間接 / 堆棧 / 偏移操作碼的編碼定長編碼法變長擴展編碼法條件碼和標(biāo)志寄存器指令設(shè)計風(fēng)格 指令系統(tǒng)舉例主 要 內(nèi) 容Instruction Set Designinstruction setsoftwarehardware回顧:馮.諾依曼結(jié)構(gòu)機器對指令規(guī)定: 用二進制表示,和數(shù)據(jù)一起存放在主存中 由兩部分組成:操作碼和操
2、作數(shù)(或其地址碼) Operation Code: defines the operation type Operands: indicate operation source and destination指令系統(tǒng)處在軟/硬件交界面,能同時被硬件設(shè)計者和系統(tǒng)程序員看到硬件設(shè)計者角度:指令系統(tǒng)為CPU提供功能需求(易于硬件設(shè)計)系統(tǒng)程序員角度:通過指令系統(tǒng)來使用硬件,要求易于編寫編譯器)指令系統(tǒng)設(shè)計的好壞還決定了:計算機的性能和成本Instruction Set ArchitectureADDSUBTRACTANDORCOMPARE.0101001110100111000111010.Prog
3、rammers ViewComputers ViewCPUMemoryI/OProgram(Instructions&Data)Princeton (Von Neumann) Architecture- 數(shù)據(jù)和指令存放在同一個存儲器中 - 存儲空間利用率高 - 統(tǒng)一的訪問接口Harvard Architecture- 數(shù)據(jù)和指令存放在不同存儲器 - 存儲訪問效率高 - 有利于流水線執(zhí)行 一條指令須包含的信息一條指令必須明顯或隱含地包含以下信息:操作碼:指定操作類型 (操作碼長度:固定可變)源操作數(shù)參照:一個或多個源操作數(shù)所在的地址 (操作數(shù)來源:主(虛)存/寄存器/I/O端口/指令本身)結(jié)果值
4、參照:產(chǎn)生的結(jié)果存放何處 (結(jié)果地址:主(虛)存/寄存器/I/O端口)下一條指令地址:下條指令存放何處 (下條指令地址 :主(虛)存) (正常情況隱含在PC中,改變順序時由指令給出)地址碼字段的個數(shù)據(jù)上述分析知,一條指令包含個操作碼和多個地址碼零地址指令(1) 無需操作數(shù)如:空操作停機等(2) 所需操作數(shù)為默認(rèn)的如:堆棧累加器等形式:一地址指令其地址既是操作數(shù)的地址,也是結(jié)果的地址(1) 單目運算:如:取反取負(fù)等(2) 雙目運算:另一操作數(shù)為默認(rèn)的如:累加器等形式:OPOPA1二地址指令(最常用)分別存放雙目運算中兩個操作數(shù),并將其中一個地址作為結(jié)果的地址。 形式:三地址指令(RISC風(fēng)格)分
5、別作為雙目運算中兩個源操作數(shù)的地址和一個結(jié)果的地址。形式:多地址指令大中型機中用于成批數(shù)據(jù)處理的指令,如:向量 / 矩陣等A2A3OPA1A1OPA2從指令執(zhí)行周期看指令設(shè)計涉及的問題InstructionFetchInstructionDecodeOperandFetchExecuteResultStoreNextInstructionObtain instruction from program storageDetermine required actions Locate and obtain operand dataCompute result value or statusDepo
6、sit results in storage for later useDetermine successor instruction指令地址、指令長度(定長/變長)指令格式、操作碼編碼、操作數(shù)類型地址碼格式、尋址方式、操作數(shù)格式和存放方式操作類型、標(biāo)志或條件碼結(jié)果數(shù)據(jù)位置下條指令地址(順序 / 轉(zhuǎn)移)指令格式的選擇應(yīng)遵循的幾條基本原則:應(yīng)盡量短要有足夠的操作碼位數(shù)指令編碼必須有唯一的解釋,否則是不合法的指令指令字長應(yīng)是字節(jié)的整數(shù)倍合理地選擇地址字段的個數(shù)指令盡量規(guī)整與指令集設(shè)計相關(guān)的重要方面操作碼的全部組成:操作碼個數(shù)/種類/復(fù)雜度 LD/ST/INC/BRN 四種指令已足夠編制任何可計算程
7、序,但程序會很長數(shù)據(jù)類型:對哪幾種數(shù)據(jù)類型完成操作指令格式:指令長度/地址碼個數(shù)/各字段長度通用寄存器:個數(shù)/功能/長度尋址方式:操作數(shù)地址的指定方式下條指令的地址如何確定:順序,PC+1;條件轉(zhuǎn)移;無條件轉(zhuǎn)移;指令格式的設(shè)計一般通過對操作碼的不同編碼定義不同的含義,操作碼相同時,再由功能碼定義不同的含義!Typical Operations(典型的操作)Data MovementLoad (from memory)Store (to memory)memory-to-memory moveregister-to-register movepush, pop (to/from stack)Ar
8、ithmeticinteger (binary + decimal) or FPAdd, Subtract, Multiply, Divideadc(帶進位加),sbb (帶借位減)Logicalnot, and, or, set, clearShift(arithmatic,logic,rotate)left/right shiftExec-Seq controlJump, branchSubroutine Linkagecall, returnInterrupttrap, interrupt returnSynchronizationtest & set (atomic r-m-w)Str
9、ingsearch, translateinput (from I/O device)output (to I/O device)Input/OutputCPU control stop, sti(開中斷), break操作數(shù)類型和存儲方式操作數(shù)是指令處理的對象,其基本類型有:地址 被看成無符號整數(shù),用來參加運算,以確定主(虛)存地址數(shù)值數(shù)據(jù) 定點數(shù)(整數(shù)):一般用二進制補碼表示 浮點數(shù)(實數(shù)):大多數(shù)機器采用IEEE754標(biāo)準(zhǔn) 十進制數(shù):一般用NBCD碼表示,壓縮/非壓縮位、位串、字符和字符串 用來表示文本、聲音和圖像等4 bits is a nibble(一個十六進制數(shù)字)8 bits i
10、s a byte16 bits is a half-word 32 bits is a word邏輯(布爾)數(shù)據(jù) 按位操作(0-假1-真)Pentium & MIPS Data TypePentium基本類型:字節(jié)、字(16位)、雙字(32位)、四字(64位) 整數(shù): 16位、32位、64位三種2-補碼表示的整數(shù) 18位壓縮8421 BCD碼表示的十進制整數(shù)無符號整數(shù)(8、16或32位)近指針:32位段內(nèi)偏移(有效地址)浮點數(shù):IEEE 754(80位擴展精度浮點數(shù)寄存器)MIPS基本類型:字節(jié)、半字(16位)、字(32位)、四字(64位) 整數(shù): 16位、32位、64位三種2-補碼表示的整數(shù)
11、無符號整數(shù):(16、32位)浮點數(shù):IEEE 754(32位/64位浮點數(shù)寄存器)Addressing Modes(尋址方式)什么是“尋址方式”? 操作數(shù)指定方式。即:用來指定操作數(shù)或操作數(shù)所在位置的方法地址碼編碼由操作數(shù)的尋址方式?jīng)Q定地址碼編碼原則: 指令地址碼盡量短 操作數(shù)存放位置靈活,空間應(yīng)盡量大 有效地址計算過程盡量簡單指令的尋址-簡單正常:PC增值跳轉(zhuǎn) ( jump / branch / call / return ):同操作數(shù)的尋址操作數(shù)的尋址-復(fù)雜操作數(shù)來源:寄存器 / 外設(shè)端口 / 主(虛)存 / 棧頂操作數(shù)結(jié)構(gòu):位 / 字節(jié) / 半字 / 字 / 雙字 / 一維表 / 二維表
12、 / 通常尋址方式特指“操作數(shù)的尋址”為什么?目標(biāo)代碼短,省空間有利于編譯器優(yōu)化產(chǎn)生高效代碼指令執(zhí)行快尋址方式的確定 (1)在操作碼中給定尋址方式 如:MIPS指令,指令中僅有一個主(虛)存地址,且指令中僅有一二種尋址方式。Load/store型機器指令屬于這種情況。 (2)有專門的尋址方式位如:X86指令,指令中有多個操作數(shù),且尋址方式各不相同,需要各自說明尋址方式。有效地址的含義通過指令計算得到的操作數(shù)地址基本尋址方式 立即 / 直接 / 間接 / 寄存器 / 寄存器間接 / 偏移 / 堆?;緦ぶ贩绞降乃惴皟?yōu)缺點 (見下頁)Addressing Modes基本尋址方式的算法和優(yōu)缺點方式
13、 算法 主要優(yōu)點 主要缺點立即 操作數(shù)=A 指令執(zhí)行速度快 操作數(shù)幅值有限直接 EA=A 有效地址計算簡單 地址范圍有限間接 EA=(A) 有效地址范圍大 多次存儲器訪問寄存器 操作數(shù)=(R) 指令執(zhí)行快,指令短 地址范圍有限 寄間接 EA=(R) 地址范圍大 額外存儲器訪問偏移 EA=A+(R) 靈活 復(fù)雜堆棧 EA=棧頂 指令短 應(yīng)用有限偏移方式:將直接方式和寄存器間接方式結(jié)合起來。 有:相對 / 基址 / 變址三種 (見后面幾頁!) 假設(shè):A=地址字段值,R=寄存器編號, EA=有效地址, (X)=地址X中的內(nèi)容指令:OP A,R,.問題:以上各種尋址方式下,操作數(shù)在寄存器中還是在存儲器
14、中?有沒有可能在磁盤中?什么情況下,所取數(shù)據(jù)在磁盤中?只有當(dāng)操作數(shù)在存儲器中時,才有可能“缺頁”,此時操作數(shù)就在磁盤中!偏移尋址方式R存儲器操作數(shù)寄存器堆A+AOP偏移尋址:EA=A+(R) R可以明顯給出,也可以隱含給出 R可以為PC、基址寄存器B、變址寄存器I 相對尋址: EA=A+(PC) 相對于當(dāng)前指令處位移量為A的單元 基址尋址: EA=A+(B) 相對于基址(B)處位移量為A的單元 變址尋址: EA=A+(I) 相對于首址A處位移量為(I)的單元.指令中給出的地址碼A稱為形式地址偏移尋址方式 相對尋址指令地址碼給出一個偏移量(帶符號數(shù)),基準(zhǔn)地址隱含由PC給出。即:EA=(PC)+
15、A (ex. MIPSs instruction: Beq)可用來實現(xiàn)程序(公共子程序)的浮動,或指定轉(zhuǎn)移目標(biāo)地址注意:當(dāng)前PC的值可能是正在執(zhí)行指令的地址或下條指令的地址基址尋址指令地址碼給出一個偏移量,基準(zhǔn)地址明顯或隱含由基址寄存器B給出。即:EA=(B)+A (ex. MIPSs instructions: lw / sw)可用來實現(xiàn)多道程序重定位,或過程調(diào)用中參數(shù)的訪問變址尋址指令地址碼給出一個基準(zhǔn)地址,而偏移量(無符號數(shù))明顯或隱含由變址寄存器I給出。即:EA=(I)+A可為循環(huán)重復(fù)操作提供一種高效機制,如實現(xiàn)對線形表的方便操作SKIP相對尋址實現(xiàn)公共子程序的浮動和相對轉(zhuǎn)移子程序內(nèi)地
16、址關(guān)系相對獨立,與用戶程序的地址無關(guān),不管浮動到哪里,總是實現(xiàn)AX和120相加ADD AX, . DD AX, . +1120101250ADD AX, . +1120251公共子程序存儲器“ . ” 表示相對尋址方式BACK問題:采用相對尋址的轉(zhuǎn)移指令有兩個字節(jié),第一字節(jié)是OP,第二字節(jié)是位移量D,用補碼表示,則轉(zhuǎn)移目標(biāo)地址相對于轉(zhuǎn)移指令的范圍為多少?若轉(zhuǎn)移指令地址為2000H,轉(zhuǎn)移目標(biāo)地址為1FF0H,總是在取指令同時對PC增量,則轉(zhuǎn)移指令第二字節(jié)位移量為多少?-128+127 ?只有確定了按字/字節(jié)編址、位移量D是指令條數(shù)/單元數(shù),才能確定目標(biāo)地址。當(dāng)按字節(jié)編址
17、且D為單元數(shù)時,轉(zhuǎn)移目標(biāo)地址= (PC+2)+ D1FF0H 2002H = EEH(-18)?不知道!不知道!基址尋址實現(xiàn)程序重定位每個用戶程序裝入系統(tǒng)后都有一個基址,基址尋址操作數(shù)在相對于基址的偏移單元中,所以雖然偏移都是51,但操作數(shù)不同。ADD AX, #511505051120ADD AX, #51120151SUB AX, #514051130SUB AX, #51240251130用戶程序1用戶程序2100200“ # ” 表示基址尋址方式基址為100基址為200存儲器BACK變址尋址實現(xiàn)線性表元素的存取自動變址 指令中的地址碼A給定數(shù)組首址,變址器I每次自動加/減數(shù)組元素的長度
18、x。 EA=( I )+A I=( I ) x在元素地址從低高地址增長時,“+”;在元素地址從高低地址增長時,“-”在沒有硬堆棧的情況下,用它來建立軟堆??商峁€性表的方便訪問若每個元素為一個字節(jié),則 I=(I) 1若每個元素為4個字節(jié),則 I=(I) 4A=100變址器I0A0A1A2A3存儲器假定一維數(shù)組A從內(nèi)存100號單元開始BACK尋址方式Addressing Modes位、字節(jié)和塊的尋址位尋址 當(dāng)需要對寄存器或內(nèi)(虛)存中單獨一位進行操作(如:置位/復(fù)位/測試等)時,需要進行位尋址。 指令中必須隱含或明顯地給出位指針。字節(jié)尋址當(dāng)操作數(shù)為一個字節(jié)時,指令必須對字節(jié)進行定位。 字節(jié)編址
19、時,指令須給出訪問的是字節(jié) / 半字 / 字 / 雙字 字編址時,指令須給出是否為字節(jié)訪問,并指出是哪個字節(jié) (目前基本都采用字節(jié)編址)塊尋址當(dāng)需對一個信息塊進行操作時,指令必須對塊定位。(如:VAX11/780) 指令須給出:首址+長度 / 首址+末址 / 首址+末端標(biāo)志Addressing Modes(尋址方式的匯編表示)Addressing mode Example MeaningRegisterAdd R4,R3R4 R4+R3ImmediateAdd R4,3R4 R4+3Displacement Add R4,100(R1)R4 R4+Mem100+R1Register indir
20、ectAdd R4,(R1)R4 R4+MemR1IndexedAdd R3,(R1+R2)R3 R3+MemR1+R2Direct or absoluteAdd R1,(1001)R1 R1+Mem1001Memory indirectAdd R1,(R3)R1 R1+MemMemR3Auto-incrementAdd R1,(R2)+ R1 R1+MemR2; R2 R2+dAuto-decrementAdd R1,(R2)R2 R2 d; R1 R1+MemR2Scaled(乘比例因子) Add R1,100(R2)R3R1 R1+Mem100+R2+R3*d上述形式是一種示意性表示,不
21、同系列處理器的匯編表示形式不同!Instruction Format(指令格式) 操作碼的編碼有兩種方式 - Fixed Length Opcodes (定長操作碼法) - Expanding Opcodes (擴展操作碼編法) instructions size 代碼長度更重要時:采用變長指令字、變長操作碼 性能更重要時:采用定長指令字、定長操作碼 為什么?問題:是否可以有定長指令字、變長操作碼?定長操作碼、變長指令字呢?實際上,指令長度是否可變與操作碼長度是否可變沒有絕對關(guān)系,但通常是 “定長操作碼、但不一定是定長指令字”、 “變長操作碼、一般是變長指令字”。變長指令字和操作碼使機器代碼更
22、緊湊;定長指令字和操作碼便于快速訪問和譯碼。學(xué)了CPU設(shè)計就更明白了。定長編碼Fixed Length Opcodes 基本思想指令的操作碼部分采用固定長度的編碼如:假設(shè)操作碼固定為6位,則系統(tǒng)最多可表示64種指令 特點譯碼方便,但有信息冗余 舉例IBM360/370采用:位定長操作碼,最多可有256條指令只提供了183條指令,有73種編碼為冗余信息機器字長32位,按字節(jié)編址有16個32位通用寄存器,基址器B和變址器X可用其中任意一個IBM370指令格式88412412第1個半字第2個半字第3個半字RR型OPR1R2RX型OPR1XRS型OPR1R3SI型OPISS型OPBDBDBDLB1D1
23、B2D2Ri:寄存器X:變址器Bi:基址器Di:位移量I:立即數(shù)L:數(shù)的長度RR:寄存器 - 寄存器 SS:基址存儲器 - 基址存儲器RX:寄存器 - 變址存儲器 SI:基址存儲器 - 立即數(shù)RS:寄存器 基址存儲器擴展編碼Expanding Opcodes基本思想將操作碼的編碼長度分成幾種固定長的格式。被大多數(shù)指令集采用。PDP-11是典型的變長操作碼機器。種類等長擴展法:4-8-12;3-6-9;. / 不等長擴展法舉例說明如何擴展設(shè)某指令系統(tǒng)指令字是16位,每個地址碼為6位。若二地址指令15條,一地址指令34條,則剩下零地址指令最多有多少條?解:操作碼按短到長進行擴展編碼 二地址指令:
24、(0000 1110) 一地址指令: 11110 (00000 11111); 11111 (00000 00001) 零地址指令: 11111 (00010 11111) (000000 11111) 故零地址指令最多有 30 x26=15x27 種PDP-11中典型指令格式OPSD存儲地址存儲地址4661616OPRD存儲地址73616OPFPD82616OPX88OPD10616OPR133OP16S、D:3位指定尋址方式,3位為寄存器編號R:8個通用寄存器之一FR:4個浮點寄存器之一X:位移存儲地址存儲地址采用專門的尋址方式字段Methods of Testing Condition
25、(條件測試方式) 條件轉(zhuǎn)移指令通常根據(jù)Condition Codes (條件碼 / 狀態(tài)位 / 標(biāo)志位)轉(zhuǎn)移 通過執(zhí)行算術(shù)指令或顯式地由比較和測試指令來設(shè)置ex: sub r1, r2, r3 ;r2和r3相減, 結(jié)果在r1中,并生成標(biāo)志位ZF、CF等 bz label ;標(biāo)志位ZF=1時,轉(zhuǎn)移到label處執(zhí)行常用的標(biāo)志有四種: NF(SF) - negative VF(OF) - overflow CF - carry ZF - zero 標(biāo)志位可存放在標(biāo)志(Flag)寄存器(條件碼CC寄存器 / 狀態(tài)Status寄存器 / 程序狀態(tài)字PSW寄存器)中 也可由指定的通用寄存器來存放狀態(tài)位E
26、x:cmp r1, r2, r3 ;比較r2和r3, 標(biāo)志位存儲在r1中bgt r1, label ;判斷r1是否大于0,是則轉(zhuǎn)移到label處 可以將兩條指令合成一條指令,即:計算并轉(zhuǎn)移Ex:bgt r1, r2, label ;根據(jù)r1和r2比較結(jié)果,決定是否轉(zhuǎn)移不同處理器,對標(biāo)志位的處理不同!指令設(shè)計風(fēng)格 - 按操作數(shù)位置指定風(fēng)格來分Accumulator: (earliest machines) 累加器型特點:其中一個操作數(shù)總在累加器中1 address add A acc - acc + memA1(+x) address add x A acc - acc + memA + xSt
27、ack: (e.g. HP calculator, Java virtual machines) 堆棧型特點:總是將棧頂兩個操作數(shù)進行運算,指令無需指定操作數(shù)地址0 address add tos - tos + nextGeneral Purpose Register: (e.g. IA-32, Motorola 68xxx) 通用寄存器型特點:操作數(shù)可以是寄存器或存儲器數(shù)據(jù)2 address add A B EA(A) - EA(A) + EA(B)3 address add A B C EA(A) - EA(B) + EA(C)Load/Store: (e.g. SPARC, MIPS,
28、 PowerPC) 裝入/存儲型特點:操作數(shù)只能是寄存器數(shù)據(jù),只有l(wèi)oad/store能訪問存儲器3 addressadd Ra Rb Rc Ra - Rb + Rcload Ra Rb Ra - memRbstore Ra Rb memRb - RaComparing InstructionsComparison:Bytes per instruction? Number of Instructions? Cycles per instruction?Code sequence for C = A + B for four classes of instruction sets:StackA
29、ccumulatorRegister Register (register- memory)(load - store)Push ALoad ALoad R1,ALoad R1,APush BAdd BAdd R1,BLoad R2,BAddStore CStore C, R1Add R3,R1,R2Pop CStore C,R3指令條數(shù)較少復(fù)雜表達(dá)式時,累加器型風(fēng)格指令條數(shù)變多,因為所有運算都要用累加器,使得程序中多出許多移入 / 移出累加器的指令! 75年開始,寄存器型占主導(dǎo)地位 ( Java Virtual Machine 采用Stack型) 寄存器速度快,使用大量通用寄存器可減少訪存操
30、作 表達(dá)式編譯時與順序無關(guān)(相對于Stack)Examples of Register Usage每條典型ALU指令中的存儲器地址個數(shù)每條典型ALU指令中的最多操作數(shù)個數(shù)Examples03SPARC, MIPS, Precision Architecture, Power PC12Intel 80 x86, Motorola 6800022VAX (also has 3-operand formats)33VAX (also has 2-operand formats)In VAX(CISC):ADDL (R9), (R10), (R11)memR9 - memR10 + memR11 In
31、 MIPS(RISC): lw R1, (R10) #load a wordlw R2, (R11)add R3, R1, R2 #R3 線性地址LA ( = 內(nèi)存地址) 分段 分頁指令中的信息: (1) 段寄存器SR(隱含或顯式給出) (2) 8/16/32位偏移量A (顯式給出) (2) 基址寄存器B (明顯給出,任意通用寄存器皆可) (3) 變址寄存器I (明顯給出,除ESP外的任意通用寄存器皆可。)有比例變址和非比例變址比例變址時要乘以比例因子S (1:8位 / 2:16位 / 4:32位 / 8:64位) (自學(xué)) Pentium處理器尋址方式尋址方式算法立即(地址碼A本身為操作數(shù))
32、寄存器(通用寄存器的內(nèi)容為操作數(shù))偏移量(地址碼A給出8/16/32位偏移量)基址(地址碼B給出基址器編號)基址帶偏移量(一維表訪問)比例變址帶偏移量(一維表訪問)基址帶變址和偏移量(二維表訪問)基址帶比例變址和偏移量(二維表訪問)相對(給出下一指令的地址,轉(zhuǎn)移控制)操作數(shù)=A操作數(shù)= (R)LA=(SR)+ALA=(SR)+(B)LA=(SR)+(B)+ALA=(SR)+ (I)xS+ALA=(SR)+(B)+(I) +ALA=(SR)+(B)+(I)xS+A轉(zhuǎn)移地址=(PC)+A( 自學(xué))Pentium處理器的存儲器尋址段寄存器SSCS段選擇符段表項(段描述符 )存取權(quán)限段限基地址基址寄存
33、器變址寄存器比例因子1/2/4/8偏移量8/16/32位x+線性地址有效地址段限基址線性地址空間需要時再對線性地址空間進行分頁處理。RISC型 (類似于MIPS,32位定長操作碼、定長指令字),主要不同在于:提供了特殊的兩種變址尋址方式,可減少指令數(shù)兩個寄存器相加變址(基址寄存器和索引寄存器:間接變址尋址) 例:add $t0,$a0,$s3 lw &t1,0($t0)自動變址(變址器自動+1) 例: lw &t0, 4($s3) addi $s3,$s3,4引入特殊的數(shù)據(jù)塊指令,可減少指令數(shù)單條指令可傳送多達(dá)32個字,并可進行存儲區(qū)數(shù)據(jù)傳送提供一個特殊計數(shù)寄存器ctr,自動減1,用于循環(huán)處理
34、 例:for (i=n; i!=0; i=i-1) ;Loop: addi $t0,$t0,-1 bne &t0, $zero, loop指令系統(tǒng)舉例: PowerPClw $t1,$a0+$s3SKIPlwu $t0, 4($s3)Loop: bc loop, ctr!=0MMX(Microprocessor Media Extension)指令技術(shù)圖形/像、音/視頻多媒體信息處理特點多個短整數(shù)并行操作(如8位圖形像素和16位音頻信號)頻繁的乘-累加(如FIR濾波,矩陣運算)MMX的出發(fā)點使用專門指令對大量數(shù)據(jù)進行并行、復(fù)雜處理處理的數(shù)據(jù)基本單位是8b、16b、32b、64b等MMX指令集由
35、Intel提出,1997年首次用于P54C Pentium處理器引入新的數(shù)據(jù)類型和通用寄存器 四種64位緊縮定點整數(shù)類型(8x1B、4x1W、2x2W、1x4W)8個64位通用寄存器MX0MX7(借用8個80位浮點寄存器)采用SIMD(Single Instruction Multi Data)技術(shù) 單條指令同時并行處理多個數(shù)據(jù)元素 例如,一條指令完成圖像中8個像素的并行操作 引入飽和(Situration)運算 非飽和(環(huán)繞)運算:上溢時,高位數(shù)據(jù)被截去;飽和運算:上溢時,結(jié)果取最大值如圖像像素點插值運算:若a點亮度F3H,b點亮度1DH,對a和b線性插值的結(jié)果為:環(huán)繞運算:(F3H+1DH
36、)/2=10H/2=08H 插值點的亮度比1DH還低,不合理!飽和運算: (F3H+1DH)/2=FFH/2=7FH 合理在Intel以后的處理器中又增加了SSE、SSE2、SSE3等指令集 SSE(Streaming SIMD extensions) SIMD(Single Instrution Multi Data):單指令多數(shù)據(jù)技術(shù)第一講小結(jié)指令由“操作碼”和“地址碼”兩部分組成。操作類型傳送 / 算術(shù) / 邏輯 / 移位 / 字符串 / 轉(zhuǎn)移控制 / 調(diào)用 / 中斷 / 信號同步操作數(shù)類型整數(shù)(帶符號、無符號、十進制)、浮點數(shù)、位、位串地址碼的編碼要考慮:操作數(shù)的個數(shù)尋址方式:立即 /
37、 寄存器 / 寄間 / 直接 / 間接 / 相對 / 基址 / 變址 / 堆棧操作碼的編碼要考慮:定長操作碼 / 擴展操作碼條件碼的生成四種基本標(biāo)志:NF / VF / CF / ZF指令設(shè)計風(fēng)格:按操作數(shù)地址指定方式來分:累加器型 、堆棧型 、通用寄存器型、load/store型按指令格式的復(fù)雜度來分復(fù)雜指令集計算機CISC、精簡指令集計算機RISC典型指令系統(tǒng)舉例Pentium / PowerPC / MMX 以下通過MIPS指令系統(tǒng),介紹如何在機器語言級表示程序第二講 程序的機器級表示主要內(nèi)容MIPS指令格式R-類型 / I-類型 / J-類型MIPS寄存器長度 / 個數(shù) / 功能分配
38、MIPS操作數(shù)寄存器操作數(shù) / 存儲器操作數(shù) / 立即數(shù) / 文本 / 位MIPS指令尋址方式立即數(shù)尋址 / 寄存器尋址 / 相對尋址 / 偽直接尋址 / 偏移尋址MIPS指令類型算術(shù) / 邏輯 / 數(shù)據(jù)傳送 / 條件分支 / 無條件轉(zhuǎn)移 MIPS匯編語言形式操作碼的表示 / 寄存器的表示 / 存儲器數(shù)據(jù)表示機器語言的解碼(反匯編)高級語言、匯編語言、機器語言之間的轉(zhuǎn)換過程調(diào)用與堆棧MIPS指令格式有三種指令格式R-Type兩個操作數(shù)和結(jié)果都在寄存器的運算指令。如:sub rd, rs, rtI-Type運算指令:一個寄存器、一個立即數(shù)。如:ori rt, rs, imm16LOAD和STOR
39、E指令。如:lw rt, rs, imm16條件分支指令。如:beq rs, rt, imm16J-Type無條件跳轉(zhuǎn)指令。如:j targetoprsrtrdshamtfunc0611162126316 bits6 bits5 bits5 bits5 bits5 bitsR-Type指令oprsrtimmediate0162126316 bits16 bits5 bits5 bitsI-Type指令optarget address026316 bits26 bitsJ-Type指令 所有指令都是32位寬,須按字地址對齊MIPS指令字段含義OP:操作碼rs:第一個源操 作數(shù)寄存器rt:第二個源
40、操 作數(shù)寄存器rd:結(jié)果寄存器shamt:移位指令的位移量func:R-Type指令的OP字段是特定的“000000”,具體操作由func字段給定。例如:func=“100000”時,表示“加法”運算。immediate:立即數(shù)或load/store指令和分支指令的偏移地址target address:無條件轉(zhuǎn)移地址的低26位。將PC高4位拼上26位直接地址,最后添2個“0”就是32位目標(biāo)地址。為何最后兩位要添“0”?oprsrtrdshamtfunc0611162126316 bits6 bits5 bits5 bits5 bits5 bitsR-Type指令oprsrtimmediate0
41、162126316 bits16 bits5 bits5 bitsI-Type指令optarget address026316 bits26 bitsJ-Type指令操作碼的不同編碼定義不同的含義,操作碼相同時,再由功能碼定義不同的含義!指令按字地址對齊,所以每條指令的地址都是4的倍數(shù)(最后兩位為0)。OP字段的含義(MIPS指令的操作碼編碼/解碼表)BACK to Assemble Back to Load/Storeop=0: R型;op=2/3:J型;其余:I型R-Type指令的解碼(op=0時,func字段的編碼/解碼表)BACK to AssembleMIPS Addressing
42、Modes(尋址方式)immedoprsrtregisterBase或index+MemoryimmedoprsrtImmediateimmedoprsrtPC + 4PC-relative+MemoryI-format:oprsrtrdregisterRegister funcR-format:smt655565J-format:opaddr.MemoryPseudodirectB/HW/WByte / Half Word / Word若從存儲器取來一條指令為00AF8020H,則對應(yīng)的匯編形式是什么? 指令的前6位為000000,根據(jù)指令解碼表知,是一條R-Type指令,按照R-Type指
43、令的格式 得到: rs=00101, rt=01111, rd=10000, shamt=00000, funct=100000 1. 根據(jù)R-Type指令解碼表,知是 “add”操作(非移位操作) 2. rs、rt、rd的十進制值分別為5、15、16,從MIPS寄存器功能表知: rs、rt、rd分別為:$a1、$t7、$s0 故對應(yīng)的匯編形式為: add $s0 ,$a1,$t7Example:匯編形式與指令的對應(yīng)oprsrtrdshamtfunc0611162126316 bits6 bits5 bits5 bits5 bits5 bits000000 00101 01111 10000
44、00000 100000這個過程稱為“反匯編”,可用來破解他人的二進制代碼(可執(zhí)行程序)32位指令代碼:0000 0000 1010 1111 1000 0000 0010 0000 功能:$a1 + $t7 $s0Example:匯編形式與指令的對應(yīng)若MIPS Assembly Instruction: Add $t0,$s1,$s2 則對應(yīng)的指令機器代碼是什么?oprsrtrd funcsmt655565017188320655565Decimal representaton:$s1$s2$t0R-TypeAddNo shiftBinary representaton:0000001000
45、1100100100010000000000655565這個過程稱為“匯編”,所有匯編源程序都必須匯編成二進制機器代碼才能讓機器直接執(zhí)行!問題:如何知道是R型指令?匯編器?根據(jù)匯編指令中的操作碼助記符查表能知道是什么格式!從助記符表中查到Add是R型指令,即:MIPS Circuits for R-Type InstructionsMIPS R-type指令實現(xiàn)電路的執(zhí)行過程裝入指令寄存器IR以下相應(yīng)字段送控制邏輯op field (OP字段)func field (func字段)shmt field (shmt字段)以下相應(yīng)字段送寄存器第一操作數(shù)寄存器編號第二操作數(shù)寄存器編號存放結(jié)果的目標(biāo)寄
46、存器編號 寄存器號被送選擇器 對應(yīng)選擇器輸出被激活 被選寄存器的輸出送到數(shù)據(jù)線 控制邏輯提供: ALU操作碼 寫信號 等 結(jié)果被寫回目標(biāo)寄存器Phase1: Preparation (1:準(zhǔn)備階段)Phase2: Execution(2:執(zhí)行階段)這個過程描述僅是示意性的,實際上整個過程需要時鐘信號的控制,并還有其他部件參與。將在下一章詳細(xì)介紹。MIPS指令中寄存器數(shù)據(jù)和存儲器數(shù)據(jù)的指定寄存器數(shù)據(jù)指定:31 x 32-bit GPRs (r0 = 0)寄存器編號占5 bit32 x 32-bit FP regs (f0 f31, paired DP)HI, LO, PC: 特殊寄存器寄存器功能
47、和2種匯編表示方式存儲器數(shù)據(jù)指定32- bit machine - 可訪問空間: 232bytesBig Endian(大端方式)只能通過Load/Store指令訪問存儲器數(shù)據(jù)數(shù)據(jù)地址通過一個32位寄存器內(nèi)容加16位偏移量得到16位偏移量是帶符號整數(shù),符號擴展數(shù)據(jù)要求按邊界對齊SKIPMIPS寄存器的功能定義和兩種匯編表示 NamenumberUsageReserved on call?zero0constant value =0(恒為0)n.a.at1reserved for assembler(為匯編程序保留) n.a.v0 v12 3values for results(過程調(diào)用返回值)
48、noa0 a34 7Arguments(過程調(diào)用參數(shù))yest0 t78 15Temporaries(臨時變量)nos0 s716 23Saved(保存)yest8 t924 25more temporaries(其他臨時變量)nok0 k126 27reserved for kernel(為OS保留)n.a.gp28global pointer(全局指針)yessp29stack pointer (棧指針)yesfp30frame pointer (幀指針)yesra31return address (過程調(diào)用返回地址)yeszerov0-v1a0 - a3t0 - t7s0 - s7t8
49、- t9gpspfpraat02 - 34 - 78 - 1516 - 2324 - 2528293031k0 - k1126 - 27Registers are referenced either by number$0, $31, or by name $t0, $s1 $ra.BACK to lastBACK to AssembleBACK to ProcedureMIPS arithmetic and logic instructionsInstructionExampleMeaning Commentsadd add $1,$2,$3$1 = $2 + $3 3 operands;
50、exception possiblesubtractsub $1,$2,$3$1 = $2 $3 3 operands; exception possibleadd immediateaddi $1,$2,100$1 = $2 + 100 + constant; exception possiblemultiply mult $2,$3Hi, Lo = $2$3 64-bit signed productdivide div $2,$3Lo = $2 $3, Lo = quotient, Hi = remainder Hi = $2 mod $3 Move from Himfhi $1$1=H
51、i get a copy of HiMove from Lomflo $1$1=loInstructionExampleMeaningCommentand and $1,$2,$3$1 = $2 & $3Logical ANDoror $1,$2,$3$1 = $2 | $3Logical ORxorxor $1,$2,$3$1 = $2 $3Logical XORnornor $1,$2,$3$1 = ($2 |$3)Logical NOR這里沒有全部列出,還有其他指令,如addu(不帶溢出處理), addui 等問題:x86沒有分add還是addu,會不會有問題?x86只產(chǎn)生各種標(biāo)志,由軟
52、件根據(jù)標(biāo)志信息來判斷是否溢出。Example:算術(shù)運算 E.g. f= (g+h) - (i+j), assuming f, g, h, i, j be assigned to $1, $2, $3, $4, $5add $7, $2, $3add $8, $4, $5sub $1, $7, $8寄存器資源由編譯器分配!簡單變量盡量被分配在寄存器中,為什么?程序中的常數(shù)如何處理呢?E.g. f= (g+100) - (i+50)問題:以下程序如何處理呢?E.g. f= (g+65000) - (i+50)addi $7, $2, 100addi $8, $4, 50sub $1, $7, $8
53、addi $7, $2, 65000addi $8, $4, 50sub $1, $7, $8指令設(shè)計時必須考慮這種情況!MIPS有一條專門指令,后面介紹。MIPS data transfer instructionsInstructionComment Meaning SW $3, 500($4) Store word $3 ($4+ 500) SH $3, 502($2)Store half Low Half of $3 ($2+ 502) SB $2, 41($3)Store byte LQ of $2 ($3+ 41) LW $1, -30($2)Load word ($2 -30)
54、$1LH $1, 40($3)Load half ($3+40) LH of $1LB $1, 40($3)Load byte ($3+40) LQ of $1操作數(shù)長度的不同由不同的操作碼指定。問題:為什么指令必須支持不同長度的操作數(shù)? 高級語言中的數(shù)據(jù)類型有char,short,int,long,等,故需要存取不同長度的操作數(shù);操作數(shù)長度和指令長度沒有關(guān)系Example (Base register) Assume A is an array of 100 words, and compiler has associated the variables g and h with the r
55、egister $1 and $2.Assume the base address of the array is in $3. Translate g = h + A8lw $4, 8($3) ;$4 - A8add $1, $2, $4lw $4, 32($3)add $1, $2, $4A12 = h+A8sw $1, 48($3)base register(基址寄存器)offset or displacement(偏移量)問題:如果在一個循環(huán)體內(nèi)執(zhí)行:g = h + Ai ,則能否用基址尋址方式?不行,因為循環(huán)體內(nèi)指令不能變,故首地址A不變,只能把下標(biāo)i放在變址寄存器中,每循環(huán)一次下標(biāo)
56、加1,所以,不能用基址方式而應(yīng)該用變址方式。Example (Index Register) Assume A is an array of 100 words, and compiler has associated the variables g and i with the register $1, $5.Assume the base address of the array is in $3. Translate g = g + Aiaddi $6, $0, 4 ; $6 = 4mult $5, $6 ; Hi,Lo = i*4mflo $7 ; $6 = i*4, assuming
57、 i is smalladd $4, $3, $7 ; $4 - address of Ailw $4, 0($4) add $1, $1, $4addi $5, $5, 1Why should index i multiply 4 ? How do speedup i multiply 4 ?Index mode suitable for Array!Index Register(變址寄存器)問題:若循環(huán)執(zhí)行 g=g+Ai,怎樣使上述循環(huán)體內(nèi)的指令條數(shù)減少?用$5做變址器,每次$5加4 或 用移位指令,而不用乘法指令若增設(shè)專門的“變址自增(即自動變址)”指令則可使循環(huán)更短MIPS的call/
58、return/ jump/branch和compare指令I(lǐng)nstructionExample Meaningjump registerjr $31 go to $31For switch, procedure returnjump and linkjal 10000 $31 = PC + 4; go to 10000For procedure calljumpj 10000 go to 10000Jump to target addressPseudoinstruction blt, ble, bgt, bge not implemented by hardware, but synthes
59、ized by assemblerset on less than slt $1,$2,$3 if ($2 $3) $1=1; else $1=0set less than imm. slti $1,$2,100 if ($2 100) $1=1; else $1=0branch on equal beq $1,$2,100 if ($1 = $2) go to PC+4+100branch on not eq. bne $1,$2,100 if ($1!= $2) go to PC+4+100call / return BACK to Procedure按補碼比較大小匯編中給出的是立即數(shù)符號
60、擴展后乘4得到的值問題:指令中立即數(shù)是多少?100=0064H問題:指令中立即數(shù)是多少?25=0019H偽指令:硬件不能直接執(zhí)行Example:if-then-else語句和“=”判斷if (i = = j) f = g+h ; else f = g-h ;Assuming variables i, j, f, g, h, $1, $2, $3, $4, $5bne $1, $2, else ; i!=j, jump to else add $3, $4, $5 j exit ; jump to exitelse:sub $3, $4, $5exit:Example:“l(fā)ess than”判斷
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度櫥柜行業(yè)市場調(diào)查合同范本4篇
- 美團騎手2025年度勞動爭議預(yù)防與解決合同4篇
- 2025年度森林資源測繪與保護合同模板4篇
- 電影劇權(quán)轉(zhuǎn)讓合同范本篇
- 市場分銷合同
- 2025年度航空器表面蟲害防治與維護服務(wù)合同4篇
- 2025年餐館司爐員安全操作與環(huán)保責(zé)任合同3篇
- 2025年度車輛租賃與汽車租賃售后服務(wù)合作合同4篇
- 二零二五年度水利工程打井與水資源調(diào)配合同4篇
- 2025年度個人房產(chǎn)買賣合同(含產(chǎn)權(quán)過戶指導(dǎo))3篇
- 多重耐藥菌病人的管理-(1)課件
- (高清版)TDT 1056-2019 縣級國土資源調(diào)查生產(chǎn)成本定額
- 環(huán)境監(jiān)測對環(huán)境保護的意義
- 2023年數(shù)學(xué)競賽AMC8試卷(含答案)
- 神經(jīng)外科課件:神經(jīng)外科急重癥
- 2024年低壓電工證理論考試題庫及答案
- 2023年十天突破公務(wù)員面試
- 《瘋狂動物城》中英文對照(全本臺詞)
- 醫(yī)院住院醫(yī)師規(guī)范化培訓(xùn)證明(樣本)
- 小學(xué)六年級語文閱讀理解100篇(及答案)
- 氣功修煉十奧妙
評論
0/150
提交評論