1第三章指令系统CPU的主要工作是执行指令,指令是指挥计算机执行某些操作的命令,一台计算机所有指令的集合构成该计算机的指令系统。指令和指令系统是计算机最基本的概念.指令系统是计算机的主要属性,位于硬件和软件的交界面上,它既是硬件设计的依据,又是软件设计的基础。2本章主要内容指令格式操作码的扩展、地址结构的简化常见寻址方式的含义、特点指令的类型、特点3一、机器指令的格式一条指令就是机器语言的一个语句,由一组二进制代码来表示。一条指令由两部分构成:OPAddr操作码:指明指令的操作性质及功能。地址码:指明操作数的地址。一条指令必须有一个操作码,可能包含几个地址码。指令涉及指令长度、操作码结构、地址码结构等问题。41、指令长度指令长度是指一条指令中所包含的二进制代码的位数,它取决于操作码字段的长度、操作数地址的个数及长度。一般希望指令长度短一些。指令长度与机器字长没有固定的关系。指令长度可以等于机器字长,也可以大于或小于机器字长。在一个指令系统中,若所有指令的长度都相等,称为定长指令字结构;若各种指令的长度随指令功能不同而不同,称为变长指令字结构。52、操作码指令系统中的每一条指令都有一个唯一确定的操作码,指令不同,其操作码的编码也不同。通常,希望用尽可能短的操作码字段来表达全部的指令。指令操作码的编码可以分为定长编码和变长编码。6①定长编码这是一种最简单的编码方式,操作码的位数和位置固定,指令长度不固定。操作码的位数越多,所能表示的操作种类就越多。操作码不同涉及的操作数的个数不同,所以指令的长度随操作码而变化。例如,IBM370机就是采用这种定长操作码格式。IBM370机(字长32位)的指令可分为三种不同的长度,不论指令的长度有多少位,其中的操作码字段一律都是8位。7IBM370机的指令格式OPOPOPOPOPD2D1D1D2D2R1R1R1R2R2L1B1B2B2B2X2B1I28888844444444444881212121212RR型RX型RS型SI型SS型OP一样长,操作码译码器设计就简单多了。8②变长编码这是一种操作码长度不固定,而指令长度固定的设计方法。这种设计方法使操作码分散在指令字的不同位置上。PDP-11机(字长16位)的指令分为单字长、两字长、三字长三种,操作码字段占4~16位不等,可遍及整个指令长度。显然,操作码字段位数的不固定将增加指令译码的难度,使控制器的设计复杂化。但是,它有效地利用每个二进制位。9PDP-11机的指令格式OP不一样长,控制器设计变得难多了。10③指令操作码的扩展技术变长操作码常常采用扩展操作码的方法来设计。扩展思路:让操作数地址个数多的指令的操作码字段短些(如三地址指令),让操作数地址个数少的指令的操作码字段长些(如一或零地址指令)。假设某机器指令长16位,包括一个操作码字段和三个地址字段,其中操作码字段4位,每个地址字段也是4位。其格式如下:如果按照定长编码的方法,4位操作码字段最多只能表示16条不同的三地址指令。OPA1A2A31512118743011指令操作码的扩展技术(续)0000XXXXYYYYZZZZ1110XXXXYYYYZZZZ…15条三地址指令11110000XXXXYYYY11111110XXXXYYYY…15条二地址指令111111110000XXXX111111111110XXXX…15条一地址指令11111111111100001111111111111111…16条零地址指令扩展窗口扩展窗口扩展窗口123、地址码根据一条指令中有几个操作数地址,可将该指令称为几地址指令。一般的指令有被操作数、操作数以及操作结果这三个数,因而就形成了三地址指令格式,这也是早期计算机指令的基本格式。在三地址格式的基础上,后来又发展成了二地址格式、一地址格式和零地址格式。13三地址指令格式:执行的操作:(A1)OP(A2)→A3A1为被操作数地址,A2为操作数地址,A3为结果的存放地址。A1、A2、A3可以是内存单元地址,也可以是运算器中的通用寄存器。如果全是内存中的单元地址,则执行一条三地址指令至少需要访问4次主存。OPA1A2A314二地址指令格式:执行的操作:(A1)OP(A2)→A1A1为目的操作数地址,兼做存放结果的地址;A2为源操作数地址。(A1原先的值无需保存)A1、A2可以是内存中的单元地址,也可以是运算器中的通用寄存器。如果是内存中的单元地址,则执行一条二地址指令至少要访问4次主存.OPA1A215一地址指令格式:执行的操作:(AC)OP(A1)→AC这种指令以累加寄存器AC中的数为被操作数,指令中地址码字段所指明的数为操作数,操作结果又放回累加寄存器AC中(隐含约定AC)。A1可以是内存中的单元地址,也可以是运算器中的通用寄存器。如果是内存中的单元地址,则执行一条一地址指令至少需要访问2次主存。OPA1计算机中有许多寄存器其中有一个称为累加寄存器(AC),存放操作数16零地址指令格式:零地址指令只有操作码,而没有地址码。例如下面的情况不需要地址码:指令不需要操作数,例如停机指令就没有操作数.操作数隐含约定在累加器AC中。操作数隐含指定在堆栈中,例如堆栈计算机,零地址指令的操作数从堆栈中获得。OP17简化地址结构与减少地址码字段的位数简化地址结构的途径:隐含约定地址PC代替指令中的后继指令地址结果存放在操作数地址操作数或结果约定在AC中约定所有地址的位置,如零地址指令减少地址码字段地位数的途径:采用隐含约定地址减少地址数,位数减少采用寄存器寻址、寄存器间接寻址,位数减少18按操作数的物理位置分类第一种是访问内存的指令格式,我们称这类指令为存储器—存储器型指令(SS)。这种指令操作时都涉及内存单元,参与操作的数都放在内存里。从内存单元取操作数,操作结果放回内存中。机器执行这种指令需要多次访问内存,执行速度慢。第二种是访问寄存器的指令格式,我们称这类指令为寄存器—寄存器型指令(RR)。机器执行这类指令过程中,需要多个通用寄存器和个别专用寄存器。从寄存器中取操作数,把结果放回寄存器,因此,不需要访问内存。机器执行寄存器—寄存器型指令的速度很快。第三种类型是寄存器—存储器型指令(RS)。执行此类指令既需要访问内存单元,又要访问寄存器。执行速度介于第一种和第二种之间。19二、指令和数据的寻址方式存储器既可以存放指令,又可以存放数据。当某指令或操作数存放在某个存储单元时,该存储单元的编号,就是该指令或操作数在存储器中的地址。所谓寻址就是寻找操作数的地址或下一条要执行的指令的地址,而形成操作数或指令地址的方式,称为寻址方式。寻址方式分为两类,即指令寻址方式和数据寻址方式。201、指令寻址方式寻找下一条将要执行的指令的地址称为指令寻址。指令寻址比较简单,它又可以细分为顺序寻址和跳跃寻址。21顺序寻址方式指令在内存中是顺序存放的,当执行一段程序时,通常是一条指令接一条指令地顺序执行。CPU顺序取出指令、执行指令的过程我们称为指令的顺序寻址方式。必须有一个跟踪程序执行顺序的措施,那就是程序计数器PC。程序计数器PC用来记录指令的顺序号,该顺序号是指令在内存中的地址。计算机中有许多寄存器其中有一个称为程序计数器(PC),放指令地址22顺序寻址方式(续)下图是指令顺序寻址方式的示意图:程序启动时,由操作系统把程序的首地址放入程序计数器PC中。23跳跃寻址方式当程序转移执行的顺序时,指令的寻址就采用跳跃寻址方式。所谓跳跃,是指下条指令的地址不是由程序计数器给出,而是由转移指令给出。跳跃寻址时,转移地址形成方式有3种,直接寻址、间接寻址、相对寻址。它们与数据寻址方式中的直接寻址、间接寻址、和相对寻址完全相同,只不过寻找的不是操作数的有效地址而是转移的有效地址,具体内容将在数据寻址中详细介绍。采用指令跳跃寻址方式,可以实现程序转移和公共程序调用等功能。例如,指令系统的各种条件转移或无条件转移指令,就是采用跳跃寻址实现程序转移。24跳跃寻址方式(续)下图是指令跳跃寻址的示意图:252、数据寻址方式根据指令中地址码字段的内容(形式地址)形成操作数有效地址的方式,称为数据寻址方式。形式地址A有效地址EA数据寻址方式的种类很多,但其最终目的是寻找所需要的操作数。寻址方式与操作数可能存放的地方有直接关系。寻址方式26操作数可能存放的地方操作数可能存在的地方有:操作数包含在指令中。操作数在CPU的某个寄存器中。操作数在主存中。操作数在堆栈中。操作数在某个输入/输出端口中。由于各种机器的结构不同、数据的来源不同,从而形成了各种不同的数据寻址方式。下面介绍一些比较典型而且常用的寻址方式。27隐含寻址这类型指令,不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址,即采用隐含约定的方式实现寻址。例如,单地址指令格式:ADDAddr明显给出的只是第一操作数的地址Addr,该地址中的数据跟谁加?约定累加器AC为第二操作数地址,它并不出现在指令的地址码字段中。因此,累加器AC对单地址指令格式来说是隐含地址。28立即寻址指令的地址码字段给出的不是操作数的地址,而是操作数本身,这种寻址方式称为立即寻址。例如:MOVCX,8中,8的寻址方式就是立即寻址方式,8称为立即数。立即寻址指令的执行时间很短,因为数据包含在指令中,指令和操作数同时取出,不需要再次访问内存。在程序执行过程中,立即数不能被修改,灵活性差;一般用来提供初始值。29直接寻址指令中地址字段直接给出操作数的有效地址,形式地址就是有效地址。这种寻址方式称为直接寻址方式。直接寻址方式给出的地址是绝对地址,也叫绝对寻址方式。操作数S=(A)这种寻址方式不需要寻址运算,便于硬件实现,但地址空间有限。形式地址=有效地址30间接寻址间接寻址意味着指令中给出的地址A不是操作数的地址,而是存放操作数地址的主存单元的地址,简称操作数地址的地址。通常在指令格式中划出一位作为直接或间接寻址的标志位。操作数S=((A))该寻址方式是早期计算机经常采用的寻址方式,由于两次访存,影响指令执行速度,但能够用同一条指令指向不同的主存单元。原来是地址的地址…31寄存器寻址寄存器寻址指令的地址码给出的是CPU中通用寄存器的编号,该编号指定的寄存器里存放着操作数。操作数S=(Ri)特点:1、从寄存器取数比从内存取数要快;2、表示寄存器的地址码字段比表示内存地址的地址码字段要短.32寄存器间接寻址指令中的地址码给出某一通用寄存器的编号,该编号指定的寄存器中存放着操作数的有效地址,而操作数存放在内存单元中。间接寻址需要特征位来指明。操作数S=((Ri))指令较短,只需一次访存,比间接寻址要快。寄存器里放有效地址33相对寻址把程序计数器PC的内容加上指令中形式地址D,而形成操作数的有效地址,这种寻址方式为相对寻址。相对寻址需要特征位给予指示。形式地址D常称为偏移量,这个偏移量可以是正数,也可以是负数。采用相对寻址的好处在于,操作数的地址与指令地址总是差一个固定的值,因而所编写的程序是浮动的,可以放在内存的任何地方执行而不需修改,解决了程序运行时的再定位问题。有效地址EA的计算为:EA=(PC)+D浮动程序在内存任何地方都能运行!34基址寻址基址寄存器Rb的内容与指令中给出的形式地址D相加,形成操作数有效地址,这种寻址方式称为基址寻址。基址寻址需要特征位给予指示.基址寄存器的内容称为基址值。指令地址码字段给出一个偏移量,偏移量可正、可负。有效地址的计算:EA=(Rb)+D1、基址寻址面向系统,用于逻辑地址和物理地址的变换,以解决程序在内存中的再定位和扩大寻址空间的问题;2、对用户而言,基址寻址中基址寄存器提供基准值、是固定的;而形式地址为偏移量、是可变的。3、如多用户管理。计算机中有许多寄存器其中有的用作基址寄存器(Rb),存放基址值。35变址寻址变址寻址是把CPU中的变址寄存器