计算机组成原理PrinciplesofComputerOrganization广义双语教学课程青岛理工大学校级精品课程盛建伦jlsheng@qtech.edu.cn2第5章指令系统指令格式InstructionFormats寻址方式Addressingmodes指令系统的设计方法Chapter5InstructionSetsRISCAninstructionset,orinstructionsetarchitecture(ISA),isthepartofthecomputerarchitecturerelatedtoprogramming,includingthenativedatatypes,instructions,registers,addressingmodes,memoryarchitecture,interruptandexceptionhandling,andexternalI/O.盛建伦jlsheng@qtech.edu.cn3指示计算机完成某一特定操作的最基本的命令称为计算机的“指令”Instruction。指令是计算机硬件能直接识别并执行的命令,是用机器语言编写程序的基础工具。一条指令能完成某种基本操作,一台计算机有几十条到几百条不同的指令。一台计算机的指令格式及其所有指令的集合称为该计算机的指令系统。指令系统表征着计算机的基本功能,是程序设计者看到的机器的主要属性和软、硬件的主要交界面。指令系统的设计主要包括操作类型、操作内容和指令格式的设计。§5.2指令格式InstructionFormats盛建伦jlsheng@qtech.edu.cn4§5.2.1指令的一般格式计算机是通过执行指令来处理各种数据的,为了指出数据的来源、操作结果的去向及所执行的操作,一条指令应包含下列信息:(1)操作的性质及功能。(2)操作数(Operands)的地址(Address)。(3)操作结果的地址。(4)下一条指令的地址。以上信息可以归纳为两类:一是表示该指令要完成的操作,每种操作都用一个二进制形式的代码表示,称为操作码(OperationCode),操作码一般位于指令字的前部。二是描述操作数或下条指令的地址,称为地址码(AddressCode)。盛建伦jlsheng@qtech.edu.cn5指令的基本格式:操作码地址码指令中的地址码字段用来指出参与操作的操作数的地址,地址码的位数决定能够直接访问的存储空间范围。指令操作码的长度(二进制位数)决定了指令系统中完成不同操作的指令条数。指令是用来表示控制信息的一组二进制形式的代码,它应包含与自动进行某个基本信息处理操作有关的内容。指令格式InstructionFormats盛建伦jlsheng@qtech.edu.cn6指令的地址结构地址结构是指在指令中给出几个地址。根据地址码中所给出的地址个数,可有几种不同的指令格式:(1)三地址指令Three-AddressInstruction格式:OPCODEA1A2A3其中:OPCODE—操作码,A1—第一操作数地址,A2—第二操作数地址,A3—操作结果的存贮地址。其操作表达式为:(A1)OP(A2)→A3(2)两地址指令Two-AddressInstruction格式:OPCODEA1A2其操作表达式为:(A1)OP(A2)→A1目的操作数源操作数盛建伦jlsheng@qtech.edu.cn7(3)一地址指令One-AddressInstruction格式:OPCODEA一地址指令常被称为“单操作数指令”,实际上它有两种情况。一是参与操作的只有一个操作数,在对地址A所指定的操作数执行OPCODE规定的操作后,产生的结果仍存回到该地址中。例如,加1、减1、求反、(移位)等都是单操作数指令。二是参与操作的有两个操作数,其中一个是隐含的。例如,一些对两个操作数进行算术逻辑运算的指令也采用这种格式。此时,另一个操作数(目的操作数)隐含在累加器中,指令执行后目的操作数为操作结果取代。又如,堆栈操作指令也是有2个操作数的一地址指令,在指令中给出了一个操作数地址,另一个操作数隐含在栈顶。盛建伦jlsheng@qtech.edu.cn8(4)零地址指令Zero-AddressInstruction格式:OPCODE指令中只有操作码,没有操作数,所以也称无操作数指令。零地址格式的指令有两种情况:①无需任何操作数。如空操作指令,停机指令等。②操作数的地址是隐含的。(5)多地址指令某些计算机设置有一些功能很强的、用于实现成批数据处理的指令。如字符串处理指令,向量、矩阵运算指令等。为了描述一批数据,指令中需要多个地址来指出数据存放的首地址、长度和下标等信息。例如,CDCSTAR-100的矩阵运算指令,其地址码部分有7个地址字段,用以指出参加运算的两个矩阵及结果的存储情况。操作码的编码指令操作码通常有两种编码格式。(1)固定长度操作码Fixed-LengthOpcode即操作码的长度固定,且集中放在指令字的一个字段中。这种格式有利于简化硬件设计,减少指令译码时间。若操作码长度为K位,则最多可有2k条不同指令。(2)可变长度操作码Variable-LengthOpcode即操作码的长度可变,且分散地放在指令字的不同字段中。这种格式能有效地压缩程序中操作码的平均长度。但将增加指令译码和分析的难度,使控制器的设计复杂化。例如,操作码扩展技术,哈夫曼编码等。盛建伦jlsheng@qtech.edu.cn10§5.2.2指令操作码的扩展技术操作码扩展技术,在指令字中用一个固定长度的字段来表示基本操作码,对于一部分不需要某个地址码的指令,把操作码扩充到该地址字段。既能充分利用指令字的各个字段,又能在不增加指令长度的情况下扩展操作码的长度,以表示更多的指令。【例1】某计算机的字长为16位,欲设计的指令系统有零地址指令16条,一地址指令15条,两地址指令15条及三地址指令15条,设每个地址码字段为4位,应如何设计?OPCODEA1A2A3盛建伦jlsheng@qtech.edu.cn11【例1】某计算机的字长为16位,欲设计的指令系统有零地址指令16条,一地址指令15条,两地址指令15条及三地址指令15条,设每个地址码字段为4位,应如何设计?解1.按固定长度操作码格式设计。如果要求指令字长是字节的整数倍,则零地址指令长度应该为8位,一地址指令长度应该为16位,二地址指令长度应该为16位,三地址指令长度应该为24位。地址码字段的长度均可大于4位。零地址指令长度为6位,一地址指令长度为10位,二地址指令长度为14位,三地址指令长度为18位。∵26=6461∴操作码长度为6位共61条指令。盛建伦jlsheng@qtech.edu.cn12【例1】某计算机的字长为16位,欲设计的指令系统有零地址指令16条,一地址指令15条,两地址指令15条及三地址指令15条,设每个地址码字段为4位,应如何设计?解2.按操作码扩展技术设计。指令格式为:OPA1A2A315121187430指令格式包括1个基本操作码字段和3个地址码字段。各字段均为4位,指令字长为16位。要求三地址指令15条,24=1615,所以,基本操作码字段长度为4位。地址码字段4位。4位基本操作码,共有16个码位。其中0000~1110作为15条三地址指令的操作码,1111作为扩展标志用于把操作码扩展到A1。15条二地址指令操作码为11110000~11111110。留下一个码字11111111作为扩展标志用于把操作码扩展到A2。15条一地址指令的操作码为111111110000~111111111110。码字111111111111作为扩展标志用于把操作码扩展到A3。16条零地址指令的操作码为1111111111110000~1111111111111111操作码扩展标志三地址指令0000~11101111二地址指令11110000~1111111011111111一地址指令111111110000~111111111110111111111111零地址指令1111111111110000~1111111111111111OPA1A2A315121187430盛建伦jlsheng@qtech.edu.cn14此外还有其它的扩展方法。例如,可以形成15条三地址指令,14条两地址指令,31条一地址指令和16条零地址指令。本例所用的操作码扩展方法称为15/15/15法。它是指在4位二进制表示的16个码点中,用15个来表示最常用指令的操作码,剩下的一个码字用于把操作码扩展到下一个4位。而下一个4位表示的16个码字也按同样的原则处理和扩展。作为今天的作业题15§5.2.3指令长度与数据字长的关系指令的长度(指令字长InstructionLength)主要取决于操作码的长度、操作数地址的长度和操作数地址的个数。指令的长度有定长格式的,也有变长格式的。当操作数地址是主存储器的直接地址时,其地址码的位数就很长。当操作数地址是寄存器号时,地址码的位数就很短。所以,在两地址和多地址指令中通常只有一个操作数地址是存储器直接地址。为了充分利用存储空间,指令的长度通常为字节的整数倍。指令的长度与机器的字长没有固定的关系,既可以大于或等于机器的字长,也可以小于机器的字长。指令的长度大于机器的字长时称为长格式指令,它需要几个连续字单元或字单元加字节单元来存储。指令的长度小于或等于机器的字长时,称为短格式指令,它只需一个字单元或一至几个连续的字节单元来存储。盛建伦jlsheng@qtech.edu.cn16存储器按:字编址字节编址位编址数据在存储器中的存放方式字地址为低字节地址字地址为高字节地址37621540字地址04低字节04512673字地址04高字节低字节在前高字节在前地址000001010011100101110111数据ABCDEFGHJKLMNOPQ存储器内容为GHEFCDABPQNOLMJK存储器内容为ABCDEFGHJKLMNOPQ地址(十进制)04812162024283236双字双字(地址32)双字双字(地址24)半字(地址20)半字(地址22)半字(地址16)半字(地址18)字节(地址8)字节(地址9)字节(地址10)字节(地址11)字(地址4)字(地址0)字节(地址14)字节(地址15)字节(地址13)字节(地址12)边界对准地址(十进制)048字节(地址7)字节(地址6)字(地址2)半字(地址10)半字(地址8)半字(地址0)字(地址4)边界未对准存储器中的数据存放(存储字长为32位)盛建伦jlsheng@qtech.edu.cn18§5.4指令类型指令的操作类型按功能可分成算术逻辑运算、数据传送、程序控制、输入输出等类型。1.算术逻辑运算Arithmetic&Logical一些低档的微型机只有定点加减运算指令、求补指令、比较指令、加1减1指令等算术运算指令。较高档的机器还有十进制运算指令、定点乘除指令、浮点运算指令等。一些大型机、巨型机还设有向量运算指令,可以直接对整个向量Vector或矩阵Array进行求和、求积等运算。逻辑运算类指令包括逻辑与、或、非、异或和测试等。有些机器还有位操作BitManipulation、位测试等指令。算术逻辑运算指令都影响状态标志位Flag(程序状态字PSW)盛建伦jlsheng@qtech.edu.cn192.移位操作Shift移位有算术移位、逻辑移位和循环移位三种。可以实现对操作数左移或右移一位或多位。循环移位Rotate有带进位位的大循环和不带进位位的小循环两种,常用于实现循环式控制、压缩BCD码高低字位互换及多倍字长的移位等。6336CyCyCyCy交换后盛建伦jlsheng@qtech.edu.cn203.数据传送DataTransfer在程序中使用最多的是数据传送指令。这类指令的功能是实现寄存器与寄存器,寄存器与存储单元以及存储单元与存储