您好,欢迎访问三七文档
Ch5:InstructionSet指令系统第1讲:指令系统的设计第2讲:程序的机器级表示2第一讲指令系统设计指令系统设计的基本原则指令类型和格式数据类型–寄存器组织、存储器组织操作数的寻址方式–立即/寄存器/寄存器间接/直接/间接/堆栈/偏移操作码的编码–定长编码法、变长扩展编码法条件码和标志寄存器指令设计风格指令系统举例主要内容3InstructionSetDesigninstructionsetsoftwarehardware一个完善的指令系统应满足以下几个方面的要求:完备性:指令系统提供的指令足够使用有效性:程序能够高效率运行规整性:对称性、匀齐性、一致性兼容性:相同的基本结构、共同的基本指令集可扩充性:操作码字段预留一定的空间指令系统处在软/硬件交界面,同时被硬件设计者和系统程序员看到硬件设计者角度:指令系统为CPU提供功能需求,要求易于硬件设计系统程序员角度:通过指令系统来使用硬件,要求易于编写编译器指令系统设计的好坏还决定了:计算机的性能和成本伪指令指令微指令4一条指令须包含的信息问题:一条指令必须明显或隐含包含的信息有哪些?操作码:指定操作类型(操作码长度:固定/可变)源操作数参照:一个或多个源操作数所在的地址(操作数来源:主(虚)存/寄存器/I/O端口/指令本身)结果值参照:产生的结果存放何处(目的操作数)(结果地址:主(虚)存/寄存器/I/O端口)下一条指令地址:下条指令存放何处(下条指令地址:主(虚)存)(正常情况隐含在PC中,改变顺序时由指令给出)回顾:冯.诺依曼结构机器对指令规定:用二进制表示,和数据一起存放在主存中指令由两部分组成:操作码和操作数(或其地址码)•OperationCode:definestheoperationtype•Operands:indicateoperationsourceanddestination5一条指令中应该有几个地址码字段?零地址指令(1)无需操作数如:空操作/停机等(2)所需操作数为默认的如:堆栈/累加器等形式:一地址指令其地址既是操作数的地址,也是结果的地址(1)单目运算:如:取反/取负等(2)双目运算:另一操作数为默认的如:累加器等形式:二地址指令(最常用)分别存放双目运算中两个操作数,并将其中一个地址作为结果的地址。形式:三地址指令(RISC风格)分别作为双目运算中两个源操作数的地址和一个结果的地址。形式:多地址指令大中型机中用于成批数据处理的指令,如:向量/矩阵等(SIMD)OPOPA1A2A3OPA1A1OPA26从指令执行周期看指令设计涉及的问题InstructionFetchInstructionDecodeOperandFetchExecuteResultStoreNextInstruction从存储器取指令对指令译码,以确定将要做什么操作计算操作数地址并取操作数进行相应计算,并得到标志位将计算结果保存到目的地计算下条指令地址(通常和取指令同时进行)指令地址、指令长度(定长/变长)指令格式、操作码编码、操作数类型地址码、寻址方式、操作数格式和存放方式操作类型、标志或条件码结果数据位置(目的操作数)下条指令地址(顺序/转移)7指令格式的选择应遵循的几条基本原则应尽量短要有足够的操作码位数指令编码必须有唯一的解释,否则是不合法的指令指令字长应是字节的整数倍合理地选择地址字段的个数指令尽量规整与指令集设计相关的重要方面操作码的全部组成:操作码个数/种类/复杂度LD/ST/INC/BRN四种指令已足够编制任何可计算程序,但程序会很长数据类型:对哪几种数据类型完成操作指令格式:指令长度/地址码个数/各字段长度通用寄存器:个数/功能/长度寻址方式:操作数地址的指定方式下条指令的地址如何确定:顺序,PC+1;条件转移;无条件转移;……指令格式的设计一般通过对操作码进行不同的编码来定义不同的含义,操作码相同时,再由功能码定义不同的含义!8操作类型不同机器的指令系统是各不相同的从系统功能来考虑,一个较为完善的指令系统中常见的指令类型包括:–数据传送指令:用于数据在寄存器、主存单元、栈顶和I/O之间进行传送–运算指令:用于各种算术运算和逻辑运算–字符串处理指令:用于字符串查找、扫描、转换等–程序流控制指令:用于条件转移、无条件转移、调用、返回等–输入输出指令:用于CPU与外设接口进行数据、状态、命令等信息的交换–系统控制指令:用于内核进程控制机器的启动、停止、系统模式切换等9操作数类型和存储方式操作数是指令处理的对象,与高级语言数据类型对应,基本类型有哪些?地址(指针)被看成无符号整数,用来参加运算以确定主(虚)存地址数值数据定点数(整数):一般用二进制补码表示浮点数(实数):大多数机器采用IEEE754标准十进制数:用NBCD码表示,压缩/非压缩(汇编程序设计时用)位、位串、字符和字符串用来表示文本、声音和图像等»4bitsisanibble(一个十六进制数字)»8bitsisabyte»16bitsisahalf-word»32bitsisaword逻辑(布尔)数据按位操作(0-假/1-真)存放在寄存器或内存单元中10IA-32&MIPSDataTypeIA-32–基本类型:»字节、字(16位)、双字(32位)、四字(64位)–整数:»16位、32位、64位三种2-补码表示的整数»18位压缩8421BCD码表示的十进制整数–无符号整数(8、16或32位)–近指针:32位段内偏移(有效地址)–浮点数:IEEE754(80位扩展精度浮点数寄存器)MIPS–基本类型:»字节、半字(16位)、字(32位)、双字(64位)–整数:16位、32位、64位三种2-补码表示的整数–无符号整数:(16、32位)–浮点数:IEEE754(32位/64位浮点数寄存器)11AddressingModes(寻址方式)什么是“寻址方式”?指令或操作数地址的指定方式。即:根据地址找到指令或操作数的方法。地址码编码由操作数的寻址方式决定地址码编码原则:指令地址码尽量短操作数存放位置灵活,空间应尽量大地址计算过程尽量简单指令的寻址----简单正常:PC增值跳转(jump/branch/call/return):同操作数的寻址操作数的寻址----复杂(想象一下高级语言程序中操作数情况多复杂)操作数来源:寄存器/外设端口/主(虚)存/栈顶操作数结构:位/字节/半字/字/双字/一维表/二维表/…通常寻址方式特指“操作数的寻址”为什么?目标代码短,省空间利于编译器优化产生高效代码指令执行快SKIP12指令顺序寻址方式由于指令地址在主存中顺序排列,当执行一段程序时,通常是一条指令接着一条指令地顺序执行这种程序顺序执行的过程称为指令的顺序寻址方式–必须使用程序计数器PC来计数指令的顺序号–该顺序号就是指令在主存中的地址–指令逐条顺序执行,由PC+1→PC控制指令地址指令内容存储器PC+101234567BACK13指令跳跃寻址方式指令的跳跃寻址,是指下一条指令的地址码不是由程序计数器给出,而是由本条指令直接给出程序跳跃后,按新的指令地址开始顺序执行–指令计数器的内容也必须相应改变,以便及时跟踪新的指令地址采用指令跳跃寻址方式,可以实现程序转移或构成循环程序,从而缩短程序长度,或将某些程序作为公共程序调用指令系统中的各种条件转移或无条件转移指令,就是为了实现指令的跳跃寻址而设置的BACK指令地址指令内容存储器PC+101JMP4234514寻址方式的确定(1)没有专门的寻址方式位(由操作码确定寻址方式)如:MIPS指令,一条指令中最多仅有一个主(虚)存地址,且仅有一到两种寻址方式,Load/store型机器指令属于这种情况。(2)有专门的寻址方式位如:X86指令,一条指令中有多个操作数,且寻址方式各不相同,需要各自说明寻址方式,因此每个操作数有专门的寻址方式位。有效地址的含义操作数所在存储单元的地址(可能是逻辑地址或物理地址),可通过指令的寻址方式和地址码计算得到基本寻址方式立即/直接/间接/寄存器/寄存器间接/偏移/堆栈OperandsAddressingModes15立即/直接/间接/寄存器/寄存器间接操作码…操作数直接地址…指令存储器操作码…操作数地址…间接地址操作数…指令存储器操作码……R1指令寄存器R1操作数直接寻址间接寻址寄存器寻址操作码……R1指令寄存器R13A00H……操作数形式地址有效地址3A00H存储器寄存器间接寻址andi$s1,$s2,100立即寻址16偏移寻址方式R存储器操作数寄存器堆A+AOP偏移寻址:EA=A+(R)R可以明显给出,也可以隐含给出R可以为PC、基址寄存器B、变址寄存器I•相对寻址:EA=A+(PC)相对于当前指令处位移量为A的单元•基址寻址:EA=A+(B)相对于基址(B)处位移量为A的单元•变址寻址:EA=A+(I)相对于首址A处位移量为(I)的单元......指令中给出的地址码A称为形式地址17偏移寻址方式相对寻址指令地址码给出一个偏移量(带符号数),基准地址隐含由PC给出。即:EA=(PC)+A(ex.MIPS’sinstruction:Beq)可用来实现程序(公共子程序)的浮动或指定转移目标地址注意:当前PC的值可以是正在执行指令的地址或下条指令的地址基址寻址指令地址码给出一个偏移量,基准地址明显或隐含由基址寄存器B给出。即:EA=(B)+A(ex.MIPS’sinstructions:lw/sw)可用来实现多道程序重定位或过程调用中参数的访问变址寻址指令地址码给出一个基准地址,而偏移量(无符号数)明显或隐含由变址寄存器I给出。即:EA=(I)+A可为循环重复操作提供一种高效机制,如实现对线性表的方便操作SKIP18相对寻址实现公共子程序的浮动子程序内地址关系相对独立,与用户程序的地址无关,不管浮动到哪里,总是实现AX和120相加ADDAX,.+15052120100101=(PC)ADDAX,.+1120102250251=(PC)252ADDAX,.+1120公共子程序存储器“.”表示相对寻址方式有效地址EA=(PC)+1即:操作数在当前指令随后的一条指令后!假定每条指令占一个单元通常计算有效地址时,PC已指向下条指令!19相对寻址实现相对转移BACK举例:双字节定长指令字,其中转移指令的第一字节是操作码Jxx,第二字节是位移量D,用补码表示,则转移目标指令相对于转移指令的范围为多少?若转移指令地址为2000H,转移目标地址为1FF0H,总是在取指令同时对PC增量,则转移指令第二字节位移量为多少?-128~+127?只有确定了是按字还是字节编址、位移量D是指指令条数还是单元数,才能确定目标地址范围(目标地址范围不等于位移量D的表示范围!)。当按字节编址且D为单元数时,转移目标地址=(PC)+2+D跳转范围:-126~128单元-63~64条指令D=1FF0H–2002H=EEH(–18)不一定!不知道!1FF0H=2000H+2+D举例:MIPS指令“beq$1,$2,25”的转移目标地址为(PC)+4+4*25,这里的25是指令条数而不是单元数,MIPS采用定长指令字,按字节编址,所有指令的长度都是32位(4字节)。JxxD转移D2000H1FF0H20基址寻址实现程序重定位用户程序装入系统后有一个基址,虽然偏移量都为51,但因基址不同,故操作数不同。ADDAX,#511505051120ADDAX,#51120151SUBAX,#514051130SUBAX,#51240251130用户程序1用户程序2100200“#”表示基址寻址方式有效地址EA=基址值+51基址为100基址为200存储器BACK21变址寻址实现线性表元素的存取自动变址指令中的地址码A给定数组首址,变址器I每次自动加/减数组元素的长度x。EA=(I)+AI=(I)±x例如,X86中的串操作指令对于“for(i=0;iN;i++)….”,即地
本文标题:第5章指令系统.
链接地址:https://www.777doc.com/doc-2110472 .html