計算機組成原理指令系統(tǒng)(part3).ppt
計算機組成原理與匯編語言(2006級),北航計算機學院劉旭東Tel:82316285Mail:liuxdliuxd,第三部分指令系統(tǒng),一、指令格式二、指令系統(tǒng)舉例三、指令系統(tǒng)設計,1.1指令系統(tǒng)概述,指令系統(tǒng)的基本問題操作類型:應該提供那些(多少)操作?用LD/ST/INC/BRN已經(jīng)足夠編寫任何計算程序,但不實用,程序太長。操作對象:如何表示?可以表示多少?大多數(shù)是雙值運算(如AB+C)存在單值運算(如AB)指令格式:如何將這些內(nèi)容編碼成一致的格式?指令長度、字段、編碼等問題,1.1指令系統(tǒng)概述,機器指令的要素操作碼(OperationCode):指明進行的何種操作(如ADD,MOV,I/O)源操作數(shù)地址(SourceOperandReference):參加操作的操作數(shù)的地址,可能有多個。目的操作數(shù)地址(DestinationOperandReference):保存操作結(jié)果的地址。下一條指令的地址(NextInstructionReference):指明下一條要運行的指令的位置,一般指令是按順序依次執(zhí)行的,所以絕大多數(shù)指令中并不顯示的指明下一條指令的地址,也就是說,指令格式中并不包含這部分信息。只有少數(shù)指令需要顯示指明下一條指令的地址。,1.1指令概述,操作數(shù)的位置存儲器(存儲器地址)寄存器(寄存器地址)輸入輸出端口(輸入輸出端口地址),1.1指令系統(tǒng)概述,Applications,OS,Compiler,InstructionSetArchitecture(ISA),InstructionProcessing,Input/Output,Hardwarelayersfordesignabstraction,Datapath&Control,DigitalDesign,CircuitDesign,Softwarelayersofabstraction,指令集系統(tǒng)結(jié)構(gòu)(ISA),1.1指令系統(tǒng)概述,指令集系統(tǒng)結(jié)構(gòu)(ISA)種類大部分ISA都可歸類為通用寄存器系統(tǒng)結(jié)構(gòu)Register-Memory式ISA(如80X86)多種指令可以訪問內(nèi)存;存在寄存器操作數(shù)和內(nèi)存操作數(shù)直接運行的指令;Load-Store式ISA(如MIPS)只有裝載(LOAD)和存儲(STORE)指令可以訪問內(nèi)存運算指令操作數(shù)全部為寄存器操作數(shù);Load-Store是ISA的一種趨勢,1.1指令系統(tǒng)概述,寄存器寄存器簡單、固定長度編碼、指令執(zhí)行時鐘數(shù)基本一致與可以訪問存儲單元的結(jié)構(gòu)相比,需要更多指令總數(shù)寄存器存儲器數(shù)據(jù)無需預先裝入就可用,可產(chǎn)生較好的指令密度二元操作源操作數(shù)被破壞操作數(shù)的位置可能使指令執(zhí)行時鐘數(shù)多樣化存儲器存儲器最緊湊,不會因為中間存儲浪費寄存器指令系統(tǒng)長度變化大(考慮3操作數(shù)指令)存儲器訪問成為瓶頸,1.1指令系統(tǒng)概述,通用寄存器的優(yōu)勢寄存器比存儲器快寄存器便于編譯器使用寄存器可以保存變量減少存儲器訪問,提高速度提高代碼密度,寄存器地址比存儲器地址短,1.1指令系統(tǒng)概述,指令類型數(shù)據(jù)傳輸指令:寄存器與存儲器之間,寄存器之間傳遞數(shù)據(jù);算術/邏輯運算指令:寄存器(或存儲器)中整型數(shù)或邏輯型數(shù)據(jù)的運算操作。程序控制指令:控制程序執(zhí)行順序,條件轉(zhuǎn)移或跳轉(zhuǎn),子程序調(diào)用和返回等;浮點運算指令:處理浮點數(shù)的運算。,1.2指令格式,操作數(shù)的類型地址(操作數(shù)地址,指令地址)數(shù)值(整型數(shù)或定點數(shù),浮點數(shù),十進制數(shù))字符邏輯型數(shù),1.2指令格式,地址的數(shù)目三地址:Des(Sur1)OP(Sur2),雙地址:Des(Sur)OP(Des),單地址:累加器作為其中一個操作數(shù)的雙操作數(shù)型,或單操作數(shù)型,無地址:隱含操作數(shù)型,或無操作數(shù)型,OP,1.2指令格式,操作碼結(jié)構(gòu)固定長度操作碼:操作碼長度(占二進制位數(shù))固定不變。硬件設計簡單指令譯碼時間開銷較小指令空間效率較低可變長度操作碼:操作碼長度隨指令地址數(shù)目的不同而不同。硬件設計相對復雜指令譯碼時間開銷較大指令空間利用率較高指令長度定長指令系統(tǒng)變長指令系統(tǒng):一般為字節(jié)的整數(shù)倍,1.2指令格式,關于指令擴展操作碼的舉例1.設某機器采用固定長度指令系統(tǒng),指令長度為16位,包括3地址指令15條、雙地址指令10條和若干單地址指令,假定每個地址占4位,請問,該指令系統(tǒng)最多可以容納多少單地址指令,并設計該指令系統(tǒng)的操作碼編碼方案。,基本思路1.每一條指令需要一個唯一的操作碼編碼。2.不同類型的指令應該具有不同的標識。3.采用擴展操作碼方案。,1.3尋址方式,尋址:根據(jù)形式地址查找到操作數(shù)的過程。,形式地址與有效地址形式地址:指令中直接給出的地址編碼。有效地址:根據(jù)形式地址和尋址方式計算出來的操作數(shù)在內(nèi)存單元中的地址。,有效地址:操作數(shù)Data的內(nèi)存單元地址Add,1.3尋址方式,尋址方式定義:指令代碼中地址字段的一部分,指明操作數(shù)的獲取方式或操作數(shù)地址的計算方式。指令中每一個地址字段均有其尋址方式編碼(或隱含尋址方式),目的地址,源地址,1.3尋址方式,指令代碼和尋址描述中有關縮寫的約定OP:操作碼Des:目的操作數(shù)地址Sur:源操作數(shù)地址A或Add:形式地址(內(nèi)存地址)Mod:尋址方式Rn:通用寄存器Rx:變址寄存器Rb:基址寄存器SP:堆棧指針(寄存器)EA:有效地址Data:操作數(shù)Operand:操作數(shù)(X):表示對象X的內(nèi)容(值),如(Rn)表示寄存器Rn的內(nèi)容(值),(A):內(nèi)存中地址為A的單元的內(nèi)容。Imme.Data:立即數(shù)XXH:16進制數(shù)XX,1.3尋址方式,立即尋址操作數(shù)直接在指令代碼中給出。,說明立即尋址只能作為雙操作數(shù)指令的源操作數(shù)。Operand=Imme.Data例:MOVAX,1000H,思考立即尋址的操作數(shù)在什么地方,存儲器or寄存器?立即數(shù)的地址?,1.3尋址方式,寄存器直接尋址操作數(shù)在寄存器中,指令地址字段給出寄存器的地址(編碼)EA=Rn,Operand=(Rn)例:MOVBX,AX,Data,1.3尋址方式,存儲器直接尋址操作數(shù)在存儲器中,指令地址字段直接給出操作數(shù)在存儲器中的地址EA=A,Operand=(A)例:MOVAX,1000H,Data,1.3尋址方式,寄存器間接尋址操作數(shù)在存儲器中,指令地址字段中給出的寄存器的內(nèi)容是操作數(shù)在存儲器中的地址。EA=(Rn),Operand=(Rn)例:MOVAX,BX,Data,1.3尋址方式,存儲器間接尋址操作數(shù)在存儲器中,指令地址字段中給出的存儲器地址的單元內(nèi)容是操作數(shù)在存儲器中的地址。EA=(A1),Operand=(A1)例:MOVR1,(1000H)PDP-11的指令,Data,1.3尋址方式,基址尋址操作數(shù)在存儲器中,指令地址字段給出一基址寄存器和一形式地址,基變址寄存器的內(nèi)容與形式地址之和是操作數(shù)的內(nèi)存地址。EA=(Rb)+A,Operand=(Rb)+A)例:MOVAX,1000HBX,Data,基址尋址的作用:較短的形式地址長度可以實現(xiàn)較大的存儲空間的尋址。,1.3尋址方式,變址尋址操作數(shù)在存儲器中,指令地址字段給出一變址寄存器和一形式地址,變址寄存器的內(nèi)容與形式地址之和是操作數(shù)的內(nèi)存地址。EA=(Rx)+A,Operand=(Rx)+A)有的系統(tǒng)中,變址尋址完成后,變址寄存器的內(nèi)容將自動進行調(diào)整。Rx(Rx)+(操作數(shù)Data的字節(jié)數(shù))例:MOVAX,1000HDI,Data,變址尋址的作用:數(shù)組操作,串操作,1.3尋址方式,相對尋址基址尋址的特例,由程序計數(shù)器PC作為基址寄存器,指令中給出的形式地址作為位移量,二者之和是操作數(shù)的內(nèi)存地址。EA=(PC)+A,Operand=(PC)+A)例:JNEA,Data,1.3尋址方式,堆棧尋址堆棧的結(jié)構(gòu):一段內(nèi)存區(qū)域。棧底,棧頂,堆棧指針(SP):是一個特殊寄存器部件,指向棧頂堆棧操作:PUSH(從寄存器到堆棧),POP(從堆棧到寄存器),1.3尋址方式,堆棧尋址壓棧操作:PUSHRn,假定寄存器Rn為16位寄存器(SP)(Rn),SP(SP)-2,Data,1.3尋址方式,堆棧尋址出棧操作:POPRn,假定寄存器Rn為16位寄存器SP(SP)+2,Rn(SP),Data,1.3尋址方式,頁面尋址將程序計算器PC的高位部分與形式地址拼接形成操作數(shù)的有效地址。EA(PC)H,拼接A內(nèi)存分位若干頁,(PC)H,指明頁地址,形式地址A表明頁內(nèi)的位移量,Data,1.3尋址方式,AddressingModeUsage3programsmeasuredonmachinewithalladdressingmodes-Displacement(基址)42%avg,32%to66%-Immediate(立即)33%avg,17%to43%-Registerindirect:13%avg,3%to24%-Scaled(基址變址)7%avg,0%to16%-Memoryindirect:3%avg,1%to6%-Misc:2%avg,0%to3%75%displacement&immediate88%displacement,immediate®isterindirect,1.3尋址方式,關于立即數(shù)(Immediate)5060:小于等于8位7580:小于等于16位關于位移量(Displacement)大部分情況為:1216位,1.3指令類型,數(shù)據(jù)傳送指令:Move,Store,Load,Set,Clear,Exchange算術運算指令:包括定點數(shù)、浮點數(shù)運算和十進制數(shù)運算邏輯運算指令:And,Or,Not,Xor,Compare,Test移位指令算術移位,邏輯移位,循環(huán)移位程序控制類指令幾個重要的寄存器:程序計數(shù)器PC,程序狀態(tài)字PSW(或標志寄存器),堆棧指針SP轉(zhuǎn)移指令:無條件轉(zhuǎn)移指令,有條件轉(zhuǎn)移指令循環(huán)控制指令(LOOP)子程序調(diào)用與返回指令(CALL,RET)程序中斷指令及返回(INT,IRET)串操作指令(MOVSB,MOVSW)I/O指令:IN,OUT堆棧指令:PUSH,POP,1.3指令類型,80X86使用最多的10條指令,一、指令格式二、指令系統(tǒng)舉例三、指令系統(tǒng)設計,2.180868088指令系統(tǒng):CPU與存儲器結(jié)構(gòu),80868088CPU寄存器結(jié)構(gòu),2.180868088指令系統(tǒng):CPU與存儲器結(jié)構(gòu),存儲器及其存儲器地址結(jié)構(gòu)主存容量為1M(220),可直接訪問的主存物理地址為20位。超過1M的存儲空間通過其他方式訪問。80868088機器字長16位,所有寄存器長度位16位,數(shù)據(jù)總線16位。主存采用分段的結(jié)構(gòu)主存存儲單元的地址構(gòu)成:段基址(16bits):段內(nèi)偏移(16bits)可執(zhí)行程序(.EXE)的存儲結(jié)構(gòu):代碼段(CodeSegment),數(shù)據(jù)段(DataSegment),堆棧段(StackSegment),擴展數(shù)據(jù)段(可選)命令程序(.COM)的存儲結(jié)構(gòu):代碼段,數(shù)據(jù)段和堆棧段必須是同一個段。所以命令程序最大為64KB存儲空間。,2.180868088指令系統(tǒng):CPU與存儲器結(jié)構(gòu),存儲器地址結(jié)構(gòu)與計算,2.180868088指令系統(tǒng):CPU與存儲器結(jié)構(gòu),存儲器單元結(jié)構(gòu)按字節(jié)單元編址,字節(jié)單元(2000H)20H(2001H)10H,字單元(2000H)1020H(2004H)5060H,雙字單元(2000H)30401020H,2.280868088指令系統(tǒng):寄存器,通用寄存器:數(shù)據(jù)寄存器(DataRegister)AX,BX,CX,DX(16位);AH,AL,BH,BL,CH,CL,DH,DL(8位)各寄存器原則上沒有固定的應用AX:累加器BX:基址寄存器CX:計數(shù)器DX:數(shù)據(jù)寄存器,2.280868088指令系統(tǒng):寄存器,通用寄存器:指針寄存器(PointerRegister)堆棧指針:SP(16位)基址指針:BP(16位),默認指向堆棧段,通用寄存器:變址寄存器(IndexRegister)SI,DI:16位一般情況下,二者使用上無差異,在串操作中,SI對應源操作數(shù),DI對應目的操作數(shù),2.280868088指令系統(tǒng):寄存器,通用寄存器:段寄存器(SegmentRegister)代碼段(CodeSegment),數(shù)據(jù)段(DataSegment),堆棧段(StackSegment),擴展數(shù)據(jù)段(ExtenddataSegment)代碼段寄存器:CS(16bits)數(shù)據(jù)段寄存器:DS(16bits)堆棧段寄存器:SS(16bits)擴展段寄存器:ES(16bits),2.280868088指令系統(tǒng):寄存器,指令指針I(yè)P(InstructionPointer)IP(16bits)指向代碼段中下一條要執(zhí)行的指令。CS:IP形成下一次要執(zhí)行的指令的內(nèi)存地址。,標志寄存器FLAGS(FlagsRegister)16位,記錄當前CPU運行程序的各種狀態(tài)進位標志位CF(CarryFlag)奇偶標志位PF(ParityFlag)輔助進位標志位AF(AuxitiaryFlag)零值標志位ZF(ZeroFlag)符號標志位SF(SignFlag)溢出標志位OF(OverflowFlag)單步跟蹤標志位TF(TraceFlag)中斷允許標志位IF(Interrupt-enableFlag)方向標志位DF(DirectionFlag),2.380868088指令系統(tǒng):尋址方式,立即尋址MOVAX,1234H(指令代碼:B83412H),2.380868088指令系統(tǒng):尋址方式,寄存器(直接)尋址MOVAX,BX(指令代碼:89D8H),2.380868088指令系統(tǒng):尋址方式,(存儲器)直接尋址MOVAX,0100H(指令代碼:A10001H)等價于MOVAX,DS:0100HEA=DS:0100H,2.380868088指令系統(tǒng):尋址方式,寄存器間接尋址MOVAX,BX(指令代碼:8B07H)等價于MOVAX,DS:BXEA=DS:(BX),MOVBH,BP=MOVBH,SS:BPMOVCX,SI=MOVCX,DS:SIMOVDI,BX=MOVDS:DI,BX,2.380868088指令系統(tǒng):尋址方式,基址(變址)尋址MOVAX,1000HBX(指令代碼:8B870001H)等價于MOVAX,DS:BX1000HEA=DS:(BX)+1000H,2.380868088指令系統(tǒng):尋址方式,基址變址尋址MOVAX,1000HBXSI(指令代碼:8B800001H)等價于MOVAX,DS:BX+SI+1000HEA=DS:(BX)+(SI)+1000H基址寄存器只能選:BX,BP變址寄存器只能選:SI,DI基址寄存器BX:默認DS段基址寄存器BP:默認SS段,MOVAX,10HBXDI=MOVAX,DS:BX+DI+10HMOVAL,20HBPSI=MOVAL,SS:BP+SI+20H,2.380868088指令系統(tǒng):尋址方式,串操作尋址串操作指令(MOVSBMOVSW)隱含的尋址方式源操作數(shù)地址DS:(SI)目的操作數(shù)地址ES:(DI)尋址完成后SI,DI自動調(diào)整(根據(jù)方向標志位DF調(diào)整),MOVSI,1000HMOVDI,3000HMOVCX,0100HCLDREPMOVSB,2.380868088指令系統(tǒng):尋址方式,I/O尋址I/O指令特有的尋址方式INAL,DXOUTDX,ALI/O端口地址:12位端口地址I/O端口:I/O接口部件中可訪問的空間(寄存器),向COM1口發(fā)送字符AMOVDX,3F8HMOVAL,41HOUTDX,AL,2.480868088指令系統(tǒng):指令格式與編碼,一般雙操作數(shù)指令格式與編碼RR型或RS型,必有一個操作數(shù)在寄存器中(寄存器直接尋址)長度26個字節(jié)(前2個字節(jié)必須)Opcode:操作碼(6位)d:方向字段(1位)。在第二個字節(jié)中,REG確定一個操作數(shù)(寄存器直接尋址),MOD和R/M確定另一個操作數(shù)的尋址方式。方向字段d表明REG確定的是源操作數(shù)還是目的操作數(shù)。d=1,REG確定目的操作數(shù),MOD+R/M確定源操作數(shù)d=0,REG確定源操作數(shù),MOD+R/M確定目的操作數(shù)W:字字節(jié)字段(1位):操作數(shù)是字節(jié)(8位)還是字(16位)W=1,字(16位)W=0,字節(jié)(8位),2.480868088指令系統(tǒng):指令格式與編碼,一般雙操作數(shù)指令格式與編碼(續(xù))REG:寄存器字段,指明兩個操作數(shù)中寄存器直接尋址的那個操作數(shù)。與W字段配合使用。,2.480868088指令系統(tǒng):指令格式與編碼,一般雙操作數(shù)指令格式與編碼(續(xù))MOD和R/M:確定另外一個操作數(shù)。,2.480868088指令系統(tǒng):指令格式與編碼,一般雙操作數(shù)指令格式與編碼(續(xù))位移量部分:8位或16位,或者無。立即數(shù):8位或16位,或者無。,2.480868088指令系統(tǒng):指令格式與編碼,指令編碼舉例MOVAX,1000HBXSIMOV的操作碼Opcdoe100010d=1:目的操作數(shù)是寄存器直接尋址W=1:16位字操作REG=000:表示AXMOD=10,R/M=000:另一個操作數(shù)EA=(BX)+(SI)+1000H指令前兩個字節(jié)1000101110000000(8B80H)4字節(jié)指令編碼:8B800010H,2.480868088指令系統(tǒng):指令格式與編碼,與累加器(AX或AL)相關雙操作數(shù)的指令AX(AL):寄存器直接尋址另一操作數(shù):存儲器直接立即數(shù)指令代碼中省略累加器編碼字段,采用特定的操作碼以區(qū)別于其他雙操作數(shù)指令。1010001:MemAcc1010000:AccMem,指令:MOVAX,1000H指令代碼:101000010000000000010000,2.480868088指令系統(tǒng):指令格式與編碼,其他指令格式單操作數(shù)指令編碼格式與立即數(shù)相關的指令的特定格式,單操作數(shù)指令,2.580868088指令系統(tǒng):指令類型,指令類型傳送指令:MOV,XCHG,LDS,LEA算術運算指令:ADD,INC,SUB,CMP等邏輯運算指令:AND,OR,NOT,TEST等處理器控制指令:CLC,STC,CLI,STI,CLD,NOP等程序控制指令:CALL,RET,JMP,JNE,INT,IRET等串指令:MOVSB,MOVSW等I/O指令:IN,OUT,2.6MIPS指令格式簡介,MIPSR系列寄存器RISC處理器2328bitBytes3232bitGPRs3232bitFPRsHI,LO,PC,2.6MIPS指令格式簡介,MIPS寄存器使用的約定,2.6MIPS指令格式簡介,MIPS指令格式32位固定長度指令格式(3種格式類型)最多3地址指令:add$t0,$s1,$S2($t0$s1+$s2)對于Load/Store指令,單一尋址模式:BaseDisplacement沒有間接尋址16位立即數(shù)簡單轉(zhuǎn)移條件(與0比較,或者比較兩個寄存器是否相等)無條件碼,2.6MIPS指令格式簡介,MIPS指令格式Op:6bits,OpcdoeRs:5bits,ThefirstregistersourceoperandRt:5bits,ThesecondregistersourceoperandRd:5bits,TheregisterdestinationoperandShamt:5bits,Shiftamount(shiftinstruction)Func:6bits,functioncode(anotherOpcode),2.6MIPS指令格式簡介,MIPS尋址方式,2.6MIPS指令格式簡介,MIPS指令類型,2.6MIPS指令格式簡介,2.6MIPS指令格式簡介,RSIC的指令系統(tǒng)的特點處理器通用寄存器數(shù)量較多由使用頻率較高的簡單指令構(gòu)成;指令字長固定,操作碼固定;指令格式種類少,尋址方式種類少;訪問內(nèi)存僅限Load/Store指令,其他操作針對寄存器;指令采用流水技術,2.7PDP-11指令格式簡介,PDP-11寄存器機器字長16位816bitsGPRs,(一個作SP,一個作PC)指令字長:16位、32位和48位三種;采用擴展操作碼13類指令,零地址、單地址和雙地址包括RR型、RS型和SS型雙操作數(shù)指令(R:寄存器,S:存儲器)指令格式比較復雜尋址方式:立即、寄存器直接、寄存器間接、存儲器直接、存儲器間接、基址、自增變址、自減變址、基址變址、基址變址間接等,2.7PDP-11指令格式簡介,PDP11指令格式,一、指令格式二、指令系統(tǒng)舉例三、指令系統(tǒng)設計,3.1指令系統(tǒng)的設計,設計依據(jù)操作特性:不同操作的數(shù)量,具體是些什么操作,復雜程度等。數(shù)據(jù)類型:各種操作所處理的數(shù)據(jù)的類型。指令格式:指令長度,地址數(shù)目,指令中不同域的大小等。寄存器數(shù)目:CPU中可以直接訪問的寄存器的數(shù)目及使用方法。尋址(Addressing):操作數(shù)的尋址方式。,3.1指令系統(tǒng)的設計,指令設計的相關因素操作類型的數(shù)量:決定操作碼的位數(shù)。操作數(shù)的數(shù)量:采用幾個操作數(shù),每個操作數(shù)均應包括尋址模式編碼。有時操作數(shù)是隱含的。尋址方式數(shù)量:有時尋址方式可以是隱含的(由操作碼決定)。寄存器數(shù)量:確定寄存器編碼的位數(shù)。地址范圍:存儲器直接尋址很少見,但變址(或基址)尋址時,較大的尋址范圍必須以較多的displacement位數(shù)為前提。編址粒度(AddressGranularity):字節(jié)編址或字編址。字節(jié)編址方便,但要以更多的地址位數(shù)為代價。,3.1指令系統(tǒng)的設計,指令設計指令編碼設計首先考慮指令編碼中的固定不變的部分,然后考慮可變的部分。指令編碼中的固定部分:指令系統(tǒng)方案確定后不可能發(fā)生變化的部分。操作碼(數(shù)量,位數(shù),編碼)尋址方式(數(shù)量,位數(shù),編碼)寄存器(數(shù)量,位數(shù),編碼)不同指令所涉及的地址數(shù)量如果代碼大小至關重要:使用可變長度指令格式如果性能至關重要:使用固定長度指令格式,3.1指令系統(tǒng)的設計,指令系統(tǒng)設計舉例某機字長為16位,數(shù)據(jù)總線16位,內(nèi)存容量64KB,8個16位通用寄存器R0R7。指令系統(tǒng)基本要求是:四種尋址方式:立即尋址,寄存器直接尋址,寄存器間接尋址,變址尋址;立即數(shù)和變址尋址時位移量disp均可達16位。32條雙操作數(shù)指令(其中必有一操作數(shù)是寄存器直接尋址)。128條單操作數(shù)指令。,3.1指令系統(tǒng)的設計,指令系統(tǒng)設計舉例(續(xù))雙操作數(shù)指令格式,