资源描述
计算机组成原理与汇编语言(2006级),北航计算机学院刘旭东Tel:82316285Mail:liuxdliuxd,第三部分指令系统,一、指令格式二、指令系统举例三、指令系统设计,1.1指令系统概述,指令系统的基本问题操作类型:应该提供那些(多少)操作?用LD/ST/INC/BRN已经足够编写任何计算程序,但不实用,程序太长。操作对象:如何表示?可以表示多少?大多数是双值运算(如AB+C)存在单值运算(如AB)指令格式:如何将这些内容编码成一致的格式?指令长度、字段、编码等问题,1.1指令系统概述,机器指令的要素操作码(OperationCode):指明进行的何种操作(如ADD,MOV,I/O)源操作数地址(SourceOperandReference):参加操作的操作数的地址,可能有多个。目的操作数地址(DestinationOperandReference):保存操作结果的地址。下一条指令的地址(NextInstructionReference):指明下一条要运行的指令的位置,一般指令是按顺序依次执行的,所以绝大多数指令中并不显示的指明下一条指令的地址,也就是说,指令格式中并不包含这部分信息。只有少数指令需要显示指明下一条指令的地址。,1.1指令概述,操作数的位置存储器(存储器地址)寄存器(寄存器地址)输入输出端口(输入输出端口地址),1.1指令系统概述,Applications,OS,Compiler,InstructionSetArchitecture(ISA),InstructionProcessing,Input/Output,Hardwarelayersfordesignabstraction,Datapath&Control,DigitalDesign,CircuitDesign,Softwarelayersofabstraction,指令集系统结构(ISA),1.1指令系统概述,指令集系统结构(ISA)种类大部分ISA都可归类为通用寄存器系统结构Register-Memory式ISA(如80X86)多种指令可以访问内存;存在寄存器操作数和内存操作数直接运行的指令;Load-Store式ISA(如MIPS)只有装载(LOAD)和存储(STORE)指令可以访问内存运算指令操作数全部为寄存器操作数;Load-Store是ISA的一种趋势,1.1指令系统概述,寄存器寄存器简单、固定长度编码、指令执行时钟数基本一致与可以访问存储单元的结构相比,需要更多指令总数寄存器存储器数据无需预先装入就可用,可产生较好的指令密度二元操作源操作数被破坏操作数的位置可能使指令执行时钟数多样化存储器存储器最紧凑,不会因为中间存储浪费寄存器指令系统长度变化大(考虑3操作数指令)存储器访问成为瓶颈,1.1指令系统概述,通用寄存器的优势寄存器比存储器快寄存器便于编译器使用寄存器可以保存变量减少存储器访问,提高速度提高代码密度,寄存器地址比存储器地址短,1.1指令系统概述,指令类型数据传输指令:寄存器与存储器之间,寄存器之间传递数据;算术/逻辑运算指令:寄存器(或存储器)中整型数或逻辑型数据的运算操作。程序控制指令:控制程序执行顺序,条件转移或跳转,子程序调用和返回等;浮点运算指令:处理浮点数的运算。,1.2指令格式,操作数的类型地址(操作数地址,指令地址)数值(整型数或定点数,浮点数,十进制数)字符逻辑型数,1.2指令格式,地址的数目三地址:Des(Sur1)OP(Sur2),双地址:Des(Sur)OP(Des),单地址:累加器作为其中一个操作数的双操作数型,或单操作数型,无地址:隐含操作数型,或无操作数型,OP,1.2指令格式,操作码结构固定长度操作码:操作码长度(占二进制位数)固定不变。硬件设计简单指令译码时间开销较小指令空间效率较低可变长度操作码:操作码长度随指令地址数目的不同而不同。硬件设计相对复杂指令译码时间开销较大指令空间利用率较高指令长度定长指令系统变长指令系统:一般为字节的整数倍,1.2指令格式,关于指令扩展操作码的举例1.设某机器采用固定长度指令系统,指令长度为16位,包括3地址指令15条、双地址指令10条和若干单地址指令,假定每个地址占4位,请问,该指令系统最多可以容纳多少单地址指令,并设计该指令系统的操作码编码方案。,基本思路1.每一条指令需要一个唯一的操作码编码。2.不同类型的指令应该具有不同的标识。3.采用扩展操作码方案。,1.3寻址方式,寻址:根据形式地址查找到操作数的过程。,形式地址与有效地址形式地址:指令中直接给出的地址编码。有效地址:根据形式地址和寻址方式计算出来的操作数在内存单元中的地址。,有效地址:操作数Data的内存单元地址Add,1.3寻址方式,寻址方式定义:指令代码中地址字段的一部分,指明操作数的获取方式或操作数地址的计算方式。指令中每一个地址字段均有其寻址方式编码(或隐含寻址方式),目的地址,源地址,1.3寻址方式,指令代码和寻址描述中有关缩写的约定OP:操作码Des:目的操作数地址Sur:源操作数地址A或Add:形式地址(内存地址)Mod:寻址方式Rn:通用寄存器Rx:变址寄存器Rb:基址寄存器SP:堆栈指针(寄存器)EA:有效地址Data:操作数Operand:操作数(X):表示对象X的内容(值),如(Rn)表示寄存器Rn的内容(值),(A):内存中地址为A的单元的内容。Imme.Data:立即数XXH:16进制数XX,1.3寻址方式,立即寻址操作数直接在指令代码中给出。,说明立即寻址只能作为双操作数指令的源操作数。Operand=Imme.Data例:MOVAX,1000H,思考立即寻址的操作数在什么地方,存储器or寄存器?立即数的地址?,1.3寻址方式,寄存器直接寻址操作数在寄存器中,指令地址字段给出寄存器的地址(编码)EA=Rn,Operand=(Rn)例:MOVBX,AX,Data,1.3寻址方式,存储器直接寻址操作数在存储器中,指令地址字段直接给出操作数在存储器中的地址EA=A,Operand=(A)例:MOVAX,1000H,Data,1.3寻址方式,寄存器间接寻址操作数在存储器中,指令地址字段中给出的寄存器的内容是操作数在存储器中的地址。EA=(Rn),Operand=(Rn)例:MOVAX,BX,Data,1.3寻址方式,存储器间接寻址操作数在存储器中,指令地址字段中给出的存储器地址的单元内容是操作数在存储器中的地址。EA=(A1),Operand=(A1)例:MOVR1,(1000H)PDP-11的指令,Data,1.3寻址方式,基址寻址操作数在存储器中,指令地址字段给出一基址寄存器和一形式地址,基变址寄存器的内容与形式地址之和是操作数的内存地址。EA=(Rb)+A,Operand=(Rb)+A)例:MOVAX,1000HBX,Data,基址寻址的作用:较短的形式地址长度可以实现较大的存储空间的寻址。,1.3寻址方式,变址寻址操作数在存储器中,指令地址字段给出一变址寄存器和一形式地址,变址寄存器的内容与形式地址之和是操作数的内存地址。EA=(Rx)+A,Operand=(Rx)+A)有的系统中,变址寻址完成后,变址寄存器的内容将自动进行调整。Rx(Rx)+(操作数Data的字节数)例:MOVAX,1000HDI,Data,变址寻址的作用:数组操作,串操作,1.3寻址方式,相对寻址基址寻址的特例,由程序计数器PC作为基址寄存器,指令中给出的形式地址作为位移量,二者之和是操作数的内存地址。EA=(PC)+A,Operand=(PC)+A)例:JNEA,Data,1.3寻址方式,堆栈寻址堆栈的结构:一段内存区域。栈底,栈顶,堆栈指针(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的高位部分与形式地址拼接形成操作数的有效地址。EA(PC)H,拼接A内存分位若干页,(PC)H,指明页地址,形式地址A表明页内的位移量,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寻址方式,关于立即数(Immediate)5060:小于等于8位7580:小于等于16位关于位移量(Displacement)大部分情况为:1216位,1.3指令类型,数据传送指令:Move,Store,Load,Set,Clear,Exchange算术运算指令:包括定点数、浮点数运算和十进制数运算逻辑运算指令:And,Or,Not,Xor,Compare,Test移位指令算术移位,逻辑移位,循环移位程序控制类指令几个重要的寄存器:程序计数器PC,程序状态字PSW(或标志寄存器),堆栈指针SP转移指令:无条件转移指令,有条件转移指令循环控制指令(LOOP)子程序调用与返回指令(CALL,RET)程序中断指令及返回(INT,IRET)串操作指令(MOVSB,MOVSW)I/O指令:IN,OUT堆栈指令:PUSH,POP,1.3指令类型,80X86使用最多的10条指令,一、指令格式二、指令系统举例三、指令系统设计,2.180868088指令系统:CPU与存储器结构,80868088CPU寄存器结构,2.180868088指令系统:CPU与存储器结构,存储器及其存储器地址结构主存容量为1M(220),可直接访问的主存物理地址为20位。超过1M的存储空间通过其他方式访问。80868088机器字长16位,所有寄存器长度位16位,数据总线16位。主存采用分段的结构主存存储单元的地址构成:段基址(16bits):段内偏移(16bits)可执行程序(.EXE)的存储结构:代码段(CodeSegment),数据段(DataSegment),堆栈段(StackSegment),扩展数据段(可选)命令程序(.COM)的存储结构:代码段,数据段和堆栈段必须是同一个段。所以命令程序最大为64KB存储空间。,2.180868088指令系统:CPU与存储器结构,存储器地址结构与计算,2.180868088指令系统:CPU与存储器结构,存储器单元结构按字节单元编址,字节单元(2000H)20H(2001H)10H,字单元(2000H)1020H(2004H)5060H,双字单元(2000H)30401020H,2.280868088指令系统:寄存器,通用寄存器:数据寄存器(DataRegister)AX,BX,CX,DX(16位);AH,AL,BH,BL,CH,CL,DH,DL(8位)各寄存器原则上没有固定的应用AX:累加器BX:基址寄存器CX:计数器DX:数据寄存器,2.280868088指令系统:寄存器,通用寄存器:指针寄存器(PointerRegister)堆栈指针:SP(16位)基址指针:BP(16位),默认指向堆栈段,通用寄存器:变址寄存器(IndexRegister)SI,DI:16位一般情况下,二者使用上无差异,在串操作中,SI对应源操作数,DI对应目的操作数,2.280868088指令系统:寄存器,通用寄存器:段寄存器(SegmentRegister)代码段(CodeSegment),数据段(DataSegment),堆栈段(StackSegment),扩展数据段(ExtenddataSegment)代码段寄存器:CS(16bits)数据段寄存器:DS(16bits)堆栈段寄存器:SS(16bits)扩展段寄存器:ES(16bits),2.280868088指令系统:寄存器,指令指针IP(InstructionPointer)IP(16bits)指向代码段中下一条要执行的指令。CS:IP形成下一次要执行的指令的内存地址。,标志寄存器FLAGS(FlagsRegister)16位,记录当前CPU运行程序的各种状态进位标志位CF(CarryFlag)奇偶标志位PF(ParityFlag)辅助进位标志位AF(AuxitiaryFlag)零值标志位ZF(ZeroFlag)符号标志位SF(SignFlag)溢出标志位OF(OverflowFlag)单步跟踪标志位TF(TraceFlag)中断允许标志位IF(Interrupt-enableFlag)方向标志位DF(DirectionFlag),2.380868088指令系统:寻址方式,立即寻址MOVAX,1234H(指令代码:B83412H),2.380868088指令系统:寻址方式,寄存器(直接)寻址MOVAX,BX(指令代码:89D8H),2.380868088指令系统:寻址方式,(存储器)直接寻址MOVAX,0100H(指令代码:A10001H)等价于MOVAX,DS:0100HEA=DS:0100H,2.380868088指令系统:寻址方式,寄存器间接寻址MOVAX,BX(指令代码:8B07H)等价于MOVAX,DS:BXEA=DS:(BX),MOVBH,BP=MOVBH,SS:BPMOVCX,SI=MOVCX,DS:SIMOVDI,BX=MOVDS:DI,BX,2.380868088指令系统:寻址方式,基址(变址)寻址MOVAX,1000HBX(指令代码:8B870001H)等价于MOVAX,DS:BX1000HEA=DS:(BX)+1000H,2.380868088指令系统:寻址方式,基址变址寻址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指令系统:寻址方式,串操作寻址串操作指令(MOVSBMOVSW)隐含的寻址方式源操作数地址DS:(SI)目的操作数地址ES:(DI)寻址完成后SI,DI自动调整(根据方向标志位DF调整),MOVSI,1000HMOVDI,3000HMOVCX,0100HCLDREPMOVSB,2.380868088指令系统:寻址方式,I/O寻址I/O指令特有的寻址方式INAL,DXOUTDX,ALI/O端口地址:12位端口地址I/O端口:I/O接口部件中可访问的空间(寄存器),向COM1口发送字符AMOVDX,3F8HMOVAL,41HOUTDX,AL,2.480868088指令系统:指令格式与编码,一般双操作数指令格式与编码RR型或RS型,必有一个操作数在寄存器中(寄存器直接寻址)长度26个字节(前2个字节必须)Opcode:操作码(6位)d:方向字段(1位)。在第二个字节中,REG确定一个操作数(寄存器直接寻址),MOD和R/M确定另一个操作数的寻址方式。方向字段d表明REG确定的是源操作数还是目的操作数。d=1,REG确定目的操作数,MOD+R/M确定源操作数d=0,REG确定源操作数,MOD+R/M确定目的操作数W:字字节字段(1位):操作数是字节(8位)还是字(16位)W=1,字(16位)W=0,字节(8位),2.480868088指令系统:指令格式与编码,一般双操作数指令格式与编码(续)REG:寄存器字段,指明两个操作数中寄存器直接寻址的那个操作数。与W字段配合使用。,2.480868088指令系统:指令格式与编码,一般双操作数指令格式与编码(续)MOD和R/M:确定另外一个操作数。,2.480868088指令系统:指令格式与编码,一般双操作数指令格式与编码(续)位移量部分:8位或16位,或者无。立即数:8位或16位,或者无。,2.480868088指令系统:指令格式与编码,指令编码举例MOVAX,1000HBXSIMOV的操作码Opcdoe100010d=1:目的操作数是寄存器直接寻址W=1:16位字操作REG=000:表示AXMOD=10,R/M=000:另一个操作数EA=(BX)+(SI)+1000H指令前两个字节1000101110000000(8B80H)4字节指令编码:8B800010H,2.480868088指令系统:指令格式与编码,与累加器(AX或AL)相关双操作数的指令AX(AL):寄存器直接寻址另一操作数:存储器直接立即数指令代码中省略累加器编码字段,采用特定的操作码以区别于其他双操作数指令。1010001:MemAcc1010000:AccMem,指令:MOVAX,1000H指令代码:101000010000000000010000,2.480868088指令系统:指令格式与编码,其他指令格式单操作数指令编码格式与立即数相关的指令的特定格式,单操作数指令,2.580868088指令系统:指令类型,指令类型传送指令: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位立即数简单转移条件(与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的指令系统的特点处理器通用寄存器数量较多由使用频率较高的简单指令构成;指令字长固定,操作码固定;指令格式种类少,寻址方式种类少;访问内存仅限Load/Store指令,其他操作针对寄存器;指令采用流水技术,2.7PDP-11指令格式简介,PDP-11寄存器机器字长16位816bitsGPRs,(一个作SP,一个作PC)指令字长:16位、32位和48位三种;采用扩展操作码13类指令,零地址、单地址和双地址包括RR型、RS型和SS型双操作数指令(R:寄存器,S:存储器)指令格式比较复杂寻址方式:立即、寄存器直接、寄存器间接、存储器直接、存储器间接、基址、自增变址、自减变址、基址变址、基址变址间接等,2.7PDP-11指令格式简介,PDP11指令格式,一、指令格式二、指令系统举例三、指令系统设计,3.1指令系统的设计,设计依据操作特性:不同操作的数量,具体是些什么操作,复杂程度等。数据类型:各种操作所处理的数据的类型。指令格式:指令长度,地址数目,指令中不同域的大小等。寄存器数目:CPU中可以直接访问的寄存器的数目及使用方法。寻址(Addressing):操作数的寻址方式。,3.1指令系统的设计,指令设计的相关因素操作类型的数量:决定操作码的位数。操作数的数量:采用几个操作数,每个操作数均应包括寻址模式编码。有时操作数是隐含的。寻址方式数量:有时寻址方式可以是隐含的(由操作码决定)。寄存器数量:确定寄存器编码的位数。地址范围:存储器直接寻址很少见,但变址(或基址)寻址时,较大的寻址范围必须以较多的displacement位数为前提。编址粒度(AddressGranularity):字节编址或字编址。字节编址方便,但要以更多的地址位数为代价。,3.1指令系统的设计,指令设计指令编码设计首先考虑指令编码中的固定不变的部分,然后考虑可变的部分。指令编码中的固定部分:指令系统方案确定后不可能发生变化的部分。操作码(数量,位数,编码)寻址方式(数量,位数,编码)寄存器(数量,位数,编码)不同指令所涉及的地址数量如果代码大小至关重要:使用可变长度指令格式如果性能至关重要:使用固定长度指令格式,3.1指令系统的设计,指令系统设计举例某机字长为16位,数据总线16位,内存容量64KB,8个16位通用寄存器R0R7。指令系统基本要求是:四种寻址方式:立即寻址,寄存器直接寻址,寄存器间接寻址,变址寻址;立即数和变址寻址时位移量disp均可达16位。32条双操作数指令(其中必有一操作数是寄存器直接寻址)。128条单操作数指令。,3.1指令系统的设计,指令系统设计举例(续)双操作数指令格式,
展开阅读全文