您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 软件工程 > 《计算机组成与系统结构》(清华大学出版社)(袁春风编著)第五章课件
Ch5:InstructionSet指令系统第1讲:指令系统的设计第2讲:程序的机器级表示ISA.2第一讲指令系统设计一条指令必须指定的信息指令中的地址码个数指令系统设计的基本原则指令类型数据类型–寄存器组织–存储器组织操作数的寻址方式–立即/寄存器/寄存器间接/直接/间接/堆栈/偏移操作码的编码–定长编码法–变长扩展编码法条件码和标志寄存器指令设计风格指令系统举例主要内容ISA.3InstructionSetDesigninstructionsetsoftwarehardware回顾:冯.诺依曼结构机器对指令规定:用二进制表示,和数据一起存放在主存中由两部分组成:操作码和操作数(或其地址码)•OperationCode:definestheoperationtype•Operands:indicateoperationsourceanddestination指令系统处在软/硬件交界面,能同时被硬件设计者和系统程序员看到硬件设计者角度:指令系统为CPU提供功能需求(易于硬件设计)系统程序员角度:通过指令系统来使用硬件,要求易于编写编译器)指令系统设计的好坏还决定了:计算机的性能和成本ISA.4InstructionSetArchitectureADDSUBTRACTANDORCOMPARE...0101001110100111000111010...Programmer'sViewComputer'sViewCPUMemoryI/OProgram(Instructions&Data)Princeton(VonNeumann)Architecture---数据和指令存放在同一个存储器中--存储空间利用率高--统一的访问接口HarvardArchitecture---数据和指令存放在不同存储器--存储访问效率高--有利于流水线执行ISA.5一条指令须包含的信息一条指令必须明显或隐含地包含以下信息:操作码:指定操作类型(操作码长度:固定/可变)源操作数参照:一个或多个源操作数所在的地址(操作数来源:主(虚)存/寄存器/I/O端口/指令本身)结果值参照:产生的结果存放何处(结果地址:主(虚)存/寄存器/I/O端口)下一条指令地址:下条指令存放何处(下条指令地址:主(虚)存)(正常情况隐含在PC中,改变顺序时由指令给出)ISA.6地址码字段的个数据上述分析知,一条指令包含1个操作码和多个地址码零地址指令(1)无需操作数如:空操作/停机等(2)所需操作数为默认的如:堆栈/累加器等形式:一地址指令其地址既是操作数的地址,也是结果的地址(1)单目运算:如:取反/取负等(2)双目运算:另一操作数为默认的如:累加器等形式:OPOPA1二地址指令(最常用)分别存放双目运算中两个操作数,并将其中一个地址作为结果的地址。形式:三地址指令(RISC风格)分别作为双目运算中两个源操作数的地址和一个结果的地址。形式:多地址指令大中型机中用于成批数据处理的指令,如:向量/矩阵等A2A3OPA1A1OPA2ISA.7从指令执行周期看指令设计涉及的问题InstructionFetchInstructionDecodeOperandFetchExecuteResultStoreNextInstructionObtaininstructionfromprogramstorageDeterminerequiredactionsLocateandobtainoperanddataComputeresultvalueorstatusDepositresultsinstorageforlateruseDeterminesuccessorinstruction指令地址、指令长度(定长/变长)指令格式、操作码编码、操作数类型地址码格式、寻址方式、操作数格式和存放方式操作类型、标志或条件码结果数据位置下条指令地址(顺序/转移)ISA.8指令格式的选择应遵循的几条基本原则:应尽量短要有足够的操作码位数指令编码必须有唯一的解释,否则是不合法的指令指令字长应是字节的整数倍合理地选择地址字段的个数指令尽量规整与指令集设计相关的重要方面操作码的全部组成:操作码个数/种类/复杂度LD/ST/INC/BRN四种指令已足够编制任何可计算程序,但程序会很长数据类型:对哪几种数据类型完成操作指令格式:指令长度/地址码个数/各字段长度通用寄存器:个数/功能/长度寻址方式:操作数地址的指定方式下条指令的地址如何确定:顺序,PC+1;条件转移;无条件转移;……指令格式的设计一般通过对操作码的不同编码定义不同的含义,操作码相同时,再由功能码定义不同的含义!ISA.9TypicalOperations(典型的操作)DataMovementLoad(frommemory)Store(tomemory)memory-to-memorymoveregister-to-registermovepush,pop(to/fromstack)Arithmeticinteger(binary+decimal)orFPAdd,Subtract,Multiply,Divideadc(带进位加),sbb(带借位减)Logicalnot,and,or,set,clearShift(arithmatic,logic,rotate)left/rightshiftExec-SeqcontrolJump,branchSubroutineLinkagecall,returnInterrupttrap,interruptreturnSynchronizationtest&set(atomicr-m-w)Stringsearch,translateinput(fromI/Odevice)output(toI/Odevice)Input/OutputCPUcontrolstop,sti(开中断),breakISA.10操作数类型和存储方式操作数是指令处理的对象,其基本类型有:地址被看成无符号整数,用来参加运算,以确定主(虚)存地址数值数据定点数(整数):一般用二进制补码表示浮点数(实数):大多数机器采用IEEE754标准十进制数:一般用NBCD码表示,压缩/非压缩位、位串、字符和字符串用来表示文本、声音和图像等»4bitsisanibble(一个十六进制数字)»8bitsisabyte»16bitsisahalf-word»32bitsisaword逻辑(布尔)数据按位操作(0-假/1-真)ISA.11Pentium&MIPSDataTypePentium–基本类型:»字节、字(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位浮点数寄存器)ISA.12AddressingModes(寻址方式)什么是“寻址方式”?操作数指定方式。即:用来指定操作数或操作数所在位置的方法地址码编码由操作数的寻址方式决定地址码编码原则:指令地址码尽量短操作数存放位置灵活,空间应尽量大有效地址计算过程尽量简单指令的寻址----简单正常:PC增值跳转(jump/branch/call/return):同操作数的寻址操作数的寻址----复杂操作数来源:寄存器/外设端口/主(虚)存/栈顶操作数结构:位/字节/半字/字/双字/一维表/二维表/…通常寻址方式特指“操作数的寻址”为什么?目标代码短,省空间有利于编译器优化产生高效代码指令执行快ISA.13寻址方式的确定(1)在操作码中给定寻址方式如:MIPS指令,指令中仅有一个主(虚)存地址,且指令中仅有一二种寻址方式。Load/store型机器指令属于这种情况。(2)有专门的寻址方式位如:X86指令,指令中有多个操作数,且寻址方式各不相同,需要各自说明寻址方式。有效地址的含义通过指令计算得到的操作数地址基本寻址方式立即/直接/间接/寄存器/寄存器间接/偏移/堆栈基本寻址方式的算法及优缺点(见下页)AddressingModesISA.14基本寻址方式的算法和优缺点方式算法主要优点主要缺点立即操作数=A指令执行速度快操作数幅值有限直接EA=A有效地址计算简单地址范围有限间接EA=(A)有效地址范围大多次存储器访问寄存器操作数=(R)指令执行快,指令短地址范围有限寄间接EA=(R)地址范围大额外存储器访问偏移EA=A+(R)灵活复杂堆栈EA=栈顶指令短应用有限偏移方式:将直接方式和寄存器间接方式结合起来。有:相对/基址/变址三种(见后面几页!)假设:A=地址字段值,R=寄存器编号,EA=有效地址,(X)=地址X中的内容指令:OPA,R,......问题:以上各种寻址方式下,操作数在寄存器中还是在存储器中?有没有可能在磁盘中?什么情况下,所取数据在磁盘中?只有当操作数在存储器中时,才有可能“缺页”,此时操作数就在磁盘中!ISA.15偏移寻址方式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称为形式地址ISA.16偏移寻址方式相对寻址指令地址码给出一个偏移量(带符号数),基准地址隐含由PC给出。即:EA=(PC)+A(ex.MIPS’sinstruction:Beq)可用来实现程序(公共子程序)的浮动,或指定转移目标地址注意:当前PC的值可能是正在执行指令的地址或下条指令的地址基址寻址指令地址码给出一个偏移量,基准地址明显或隐含由基址寄存器B给出。即:EA=(B)+A(ex.MIPS’sinstructions:lw/sw)可用来实现多道程序重定位,或过程调用中参数的访问变址寻址指令地址码给出一个基准地址,而偏移量(无符号数)明显或隐含由变址寄存器I给出。即:EA=(I)+A可为循环重复操作提供一种高效机制,如实现对线形表的方便操作SKIPISA.17相对寻址实现公共子程序的浮动和相对转移子程序内地址关系相对独立,与用户程序的地址无关,不管浮动到哪里,总是实现AX和120相加ADDAX,.+15051120100ADDAX,.+1120101250ADDAX,.+1120251公共子程序存储器“.”表示相对寻址方式BACK问题:采用相对寻址的转移指令有两个字节,第一字节是OP,第二字节是位移量D,用补码表示,则转移目标地址相对于转移指令的范围为多少?若转移指令地址为2000H,转移目标地址为1FF0H,总是在取指令同时对PC增量,则转移指令第二字节位移量为多少?-128~+127?只有确定了按字/字节编址、位移量D是指令条数/单元数,才能确定目标地址。当按字节编址且D为单元数时,转移目标地址=(PC+2)+D1FF0H–2002H=EEH(-18)?不知道!不知道!ISA.18基址寻址实现程序重定位每个用户程序装入系统后都有一个基址,基址寻址操作数在相对于基址的偏移单元中,所以虽然偏移都是51,但操作数不同。ADDAX,#511505051120ADDAX,#51120151SUBAX,#514051130SUBAX,#51240251130用户程序1用户程序2100200“#”表示基址寻址方式基址为100基址为200存储器BACKISA.19变址寻址实现线性表元素的存取自动变址指令中的地址码A给定数组首址,变址器I每次自动加/减数组元素的长度x。
本文标题:《计算机组成与系统结构》(清华大学出版社)(袁春风编著)第五章课件
链接地址:https://www.777doc.com/doc-6983233 .html