1、1,第四章 指令系统,2,指令系统定义:机器指令要求硬件直接实现某种运算或操作的命令;指令系统所有机器指令的集合。,指令系统与软硬件关系:,4.1 指令系统组成,指令系统是软硬件间的一个“约定”!是软硬件交界面之一,3,一、指令功能,1、指令的操作数,(1)数据结构与数据表示 *数据结构:计算机软件能够直接识别和引用的数据类型;*数据表示:计算机硬件能够直接识别和引用的数据类型;,*相互关系:,使用频率较高的数据类型,(2)指令的操作数,*操作数类型:所有种类的数据表示,通常有定点/浮点数、逻辑数、字符、地址等;,*操作数长度:部分种类有几种长度,如定点/浮点数及逻辑数等,使用频率均较高,可节
2、约存储空间,4,2、指令的操作*指令操作类型软件中使用频率较高的基本操作;如数据传送、算逻运算、转移控制等种类,课件约定第A个寄存器的地址用RA表示、内容用(RA)表示;第A个主存单元的地址用A表示、内容用A表示;操作的源操作数用内容表示、目标操作数用地址表示,(1)数据传送*操作功能:REG、主存、I/O设备间的数据传送;如 R0(R1)、R00100H,各部件均可为目标操作数,*操作数:8b/16b/的信息(数值/字符/地址等);*操作数个数:2个,无需区分数据类型(无数据运算),5,(2)算术逻辑运算*操作功能:算术运算加、减、乘、除、+1、-1、求补等;如:R0(R1)+0100H、R
3、2(R2)+1逻辑运算与、或、非等;如:R0(R0)&(R1)、R0(R0),*操作数:算术运算为8b/16b/的有符号/无符号定点数,逻辑运算为8b/16b/逻辑数,源操作数、目标操作数的数据类型应相同;*操作数个数:13个(如+1、CA+B、AA+B);,*操作结果状态:Z(是否为零)、S(是否为负数)、V(是否溢出)、C(是否有进位/借位)等状态产生与保存由ALU产生、用状态寄存器保存,关系运算=算术运算+结果状态+逻辑运算,6,(3)转移操作*操作功能:改变程序的逻辑顺序(即下条指令地址PC),有条件转移、无条件转移、调用、返回等种类;,注:条件转移操作的条件由测试条件及转移条件组成;
4、,调用操作参数有目标指令地址及返回指令地址;,返回操作参数仅为返回指令地址,嵌套调用要求堆栈是按“后进先出”顺序(不按地址)访问的部件,7,*操作数:显式指令的绝对地址或相对地址(偏移量),隐式状态寄存器的状态、堆栈的顶部内容;*显式操作数个数:1个或0个,(4)移位操作*操作功能:逻辑左/右移、算术左/右移、循环左/右移等;如:R0(R0)算术(R2),*操作数:操作数据8b/16b/的定点数或逻辑数,移动位数8b/16b/的无符号定点数;*操作数个数:2个,(5)其他类型操作浮点运算、十进制运算、字符串处理等,8,二、指令格式,*指令格式组成:由操作码、地址码两个字段组成,*指令格式的相关
5、参数:即需约定的内容,操作数对应的部件及地址?,下条指令地址?,*指令系统组成:由若干种机器指令格式组成,9,1、操作码字段*功能:用编码指明(约定)操作的性质,包括操作类型、操作数类型及长度3个方面;,例1指令系统约定:操作类型8种,加法操作需支持8/16位定点数、单/双精度浮点数,移位操作需支持8/16位定点数,逻辑非操作只需支持8位逻辑数。操作码字段如何编码?,10,*操作类型编码方法:性能参数规整性、程序中指令的平均操作码长;影响译码复杂度 影响程序空间大小,例27种操作使用频率分别为0.4、0.26、0.15、0.06、0.05、0.04、0.04,请进行各操 作类型的操作码编码。,
6、11,2、地址码字段*功能:用编码指明各操作数的地址、源/目标属性,指明下条指令地址;,*地址码个数:指令系统中规定地址码个数的最大值,不同指令中用操作码约定地址码个数;,*地址码源/目标属性:隐含约定第一个(或最后一个)地址码,显式指明;,*操作数地址的表示:下小节讨论;,*下条指令地址的表示:当前指令为顺序型PC=(PC)+当前指令长度,可隐含表示当前指令为转移型PC=IR中的(地址码), 需显式表示;,12,例3续例1,指令系统规定指令2个地址码,若加法、移位、逻辑非操作的地址码个数分别为2个、2个、1个,请说明如何约定地址码个数及源/目标属性?,13,3、指令字*组成:由操作码及地址码
7、组成,操作码在指令字前部;,*指令字类型:按地址个数分,指令字长n存储字长,机器字长m存储字长;,按指令字长分指与机器字长的关系单字长指令、半字长指令、双字长指令等,*指令字结构: (指令系统特性)定长指令字结构不同指令的指令字长完全相同,变长指令字结构不同指令的指令字长不尽相同,14,解:操作码长度=16-6-6=4,双地址指令种数=24-P-Q;,例4设指令字长为16位、各地址码均为6位,指令字有零地址、单地址、双地址3种格式;采用定长操作码时,若零地址、单地址指令分别为P种和Q种,双地址指令最多有多少种?采用扩展操作码时,若零地址、双地址指令分别为X种和Y种,单地址指令最多种类数M为多少
8、?,零、单、双地址指令操作码长度=16、10、4,,X=(24-Y)26-M26,则M=(24-Y)26-X2-6,15,4.2 操作数存放与寻址方式,一、操作数的存放方式,1、数据在REG中的存放方式基础通常REG长度CPU字长,REG按其数量进行编址。,*数据长度REG长度时的存放方式:使用REG全部位数;,*数据长度REG长度时的存放方式:有两种方案;,*地址码格式:,方案2,16,2、数据在存储器中的存放方式基础存储字长最短的数据长度;,*存放方式:存放在连续存储单元中,用最小单元地址表示数据地址;,*地址码格式:,*存放方式属性:有次序和边界两个方面,次序有大端次序和小端次序两种方式
9、,可任选一种,17,整数边界对齐方式:长度为2n个存储字的数据在存储器中存储时,最小单元地址(N)的最低n位必须为零。如长度为20、21、22个存储字的N为XXXX、XXX0、XX00,边界有边界不对齐和边界对齐两种方式,常选对齐方式,3、数据(常数)在指令中的存放方式,*存放方式:边界采用边界不对齐方式; (尽量减少指令字长)次序与存储器存放次序一致。(方便CPU处理),*地址码格式:,18,4、堆栈存取方式,*堆栈:堆栈是一种按“后进先出”顺序 存取的存储区;,按“先进先出”顺序存取的存储区称为队列,*堆栈存取方式:类似于圆桶中放入/取出木板,操作步骤入栈:先移动栈顶,再在栈顶写入数据,出
10、栈:先从栈顶读出数据,再移动栈顶;,操作类型入栈(PUSH/压栈)、出栈(POP/弹出);,存取特征后进先出顺序、不按地址访问,破坏性读出(只对栈顶操作);,19,*寄存器堆栈: -用移位REG实现,面向硬件组成特征大小及栈顶固定,,移动的是数据,*存储器堆栈: -借用主存空间实现,面向软件组成特征大小及栈顶可变,,操作步骤以入栈时SP递减移动方式为例入栈:SP(SP)-X, SP源数据出栈:目标地址SP,SP(SP)+X,对于入栈时SP递增移动方式,入栈+X、出栈-X,CPU用计数器表示“栈底”;,CPU用堆栈指针REG指向栈顶,用相关REG表示栈底或大小;,20,例1设主存按字节编址,指令
11、系统约定数据在MEM中采用小端次序存放,MEM堆栈数据长度为2B、入栈时SP递减移动。若栈底指向003FH、(R0)=0010H、(R1)=0020H,请画出空堆栈、R0入栈、R1入栈、R2出栈时,SP及栈顶内容的变化情况。,21,二、寻址方式,*寻址方式:形成当前指令操作数或操作数地址及下条指令地址的方式;,*存放数据的部件:寄存器、主存、I/O设备,堆栈、IR(指令中);*存放指令的部件:主存;,*数据/指令的MEM地址:有效地址(EA)程序中表示的MEM地址,如程序逻辑地址物理地址(PA)硬件对应的MEM地址,如主存地址,两者关系PA=EA的存储管理后地址,作业一:P1644、5、6,2
12、2,1、指令寻址方式*指令种类:顺序型指令、转移型指令;,*指令寻址方式:顺序寻址用于顺序型指令的下条指令寻址隐含寻址,下条指令EA=(PC)+“1”;,跳跃寻址用于转移型指令的下条指令寻址直接寻址,下条指令EA=(地址码);相对寻址,下条指令EA=(PC)+偏移量;,*指令寻址方式表示:地址码的表示在数据寻址方式中讨论,隐含寻址,下条指令EA=(栈顶)或(特定部件),23,(相对)EA=(PC)-“4”,24,2、数据寻址方式*目标:缩短指令中地址码长度,方便编译程序生成代码,*地址码:由部件及地址形成方式类型、地址形成参数组成,(1)立即寻址方式常数操作数为形式地址本身,即操作数存放在指令
13、中。,为便于理解,以单操作数指令为例!,(2)寄存器寻址方式REG操作数地址为形式地址本身,即数据REG编号。,25,(3)直接寻址方式主存操作数EA为形式地址本身,即程序逻辑地址。,(4)间接寻址方式主存操作数EA为形式地址对应的MEM内容。,注:主存操作数寻址方式多数可用作指令寻址方式,注:因需要2次访存,很少使用(适合于指向指针的指针操作),26,(5)寄存器间接寻址方式主存操作数EA为形式地址对应的地址REG内容。,(6)基址寻址方式主存操作数EA为基址REG内容加上形式地址的结果。注:地址REG包含基址REG和变址REG两种类型;基址寻址对存储管理特别有效(基址REG不变),注:为缩
14、短地址码长度,数据REG和地址REG常混用(通用REG),27,(8)相对寻址方式主存中指令EA为PC内容加上偏移量的结果。,(7)变址寻址方式主存操作数EA为变址REG内容加上形式地址的结果。,注:基址REG/变址REG数量=1时,均可隐含表示(B/I);变址寻址对程序的块处理很有效(形式地址A不变),注:偏移量为形式地址(机器数)的真值,是有符号数!,28,解下条指令EA=(PC)+DISP在执行阶段形成,指令取出后,(PC)=0100H+2=0102H,,指令取出后,(PC)=0102H,因DISP原=92H,故DISP=-12H,则EA=(PC)+DISP=0102H-12H=00F0
15、H。,指令执行时,故DISP=0120H-0102H=+001 1110B,0101H=A=DISP原=0001 1110=1EH,29,9、隐含寻址方式操作数地址由指令操作码隐含约定,与地址码无关。,不同计算机系统对寻址方式的命名可能有所不同!,寻址方式应用:,*隐含方式:操作数隐含在某REG中;如:(a)基于累加器CPU中,指令AC(AC)+M隐含AC(b)顺序型指令的下条指令EA=(PC)+1隐含PC,操作数/操作数地址/指令地址隐含为堆栈中。如:(a)常用堆栈传递过程调用的参数,(b)调用/返回指令的下条指令地址,30,例4某计算机主存按字节编址、有符号定点数采用原码编码,有基址REG
16、和变址REG各1个(分别记为RB和RI),单地址指令格式如右图所示,设(RB)=0037H、 (RI)=1122H、(PC)=1234H,请计算 MEM中指令内容为4428H 2244H 1392H 3592H的操作数或EA。,解指令字=0100 0100 0010 1000B,,指令字=0010 0010 0100 0100B,基址寻址(A=44H),,指令字=0001 0011 1001 0010B,变址寻址(A=92H),,指令字=0011 0101 0010 0001B,相对寻址(A=92H),,操作数原=A=28H;,操作数EA=(RB)+A=0037H+44H=007BH;,操作数
17、EA=(RI)+A=1122H+92H=1110H;,A=DSP原=92H,则DSP=-001 0010B=-12H,,转移目标指令EA=(PC)+DSP=(1234H+2)-12H=1224H。,31,例5某CPU中有4个数据REG(R0R3)、CPU字长为8位、主存按字节编址、有符号定点数采用原码编码,取指令时每取一个字节自动完成PC(PC)+1,指令系统的部分指令格式如下图所示。,指令格式中操作码特性?目标操作数、寻址方式位表示? 编程实现求主存中数组A0+A99之和。,32,解操作码:变长,目标操作数:约定在首个地址码中,寻址方式位:指令只有一种寻址方式时隐含表示;,C语言程序 BYT
18、E R0=0;/累加和BYTE R1=100;/计数器BYTE *R2=&A0;/地址do BYTE R3=*R2;R0=R0+R3;R2+;R1-; while (R10);/数据A0 /数据A99,先写C语言程序,再翻译成机器语言程序:,33,4.3 指令格式举例,一、指令格式目标,1、指令格式的目标,*对硬件有较好的支持:有助于减少译码时间,*对软件有较好的支持:有助于减少指令数及指令长度,减少指令数指令功能强、地址码个数多,地址范围大、寻址方式多、对称性好等,缩短指令长度地址码个数少、范围小,冗余空间小等;,减少译码时间指令格式规整、地址码并行译码、操作数地址形成简单等。,34,2、指
19、令格式优化方法 -指令格式目标实现方法,指令格式目标的矛盾软件目标硬件目标减少指令数缩短指令长度,采用扩展操作码编码方式;,*遵循大概率事件优先原则:利于提高性能/价格可以减少指令数、缩短指令长度,减少译码时间,高频率操作(或数据类型等)才采用硬件(机器指令)实现;,根据每种操作相关参数的使用频率,确定该操作的地址码个数、寻址方式、地址范围等,35,*可分开存放操作码:利于提高规整性,*隐含部分地址码:利于提高规整性、缩短指令长度,不利用软件编程(灵活性、指令数),*寻址方式位前移:利于地址码并行译码即将多个寻址方式位合并、紧邻操作码存放,36,二、Pentium指令系统,1、寻址方式共支持9
20、种寻址方式,多数指令使用多种寻址方式。,37,2、指令格式有近200条指令;采用变长指令格式(以字节为基本单位)。,*指令格式:指令前缀+指令本身,*指令前缀:显式扩展指令本身的功能或参数;如:新增的SSE指令,8/16位长度8/16位和32/64位等,“ ”指可缺省,应用当前指令与上条指令的指令前缀相同时,可缺省,实现兼容性的方法之一,38,*指令本身的相关约定:地址码个数2个,其中IMME型及MEM型均1个;,操作数长度支持8/16/32位,8位与16位的区分使用操作码实现,8/16位与32位的区分使用指令前缀实现,REG型操作数的存放32位采用REG全部位数,16位采用“使用REG低端”
21、方案,8位采用“使用部分REG”方案,,MEM型操作数的存放采用小端次序、边界对齐方式,39,*指令本身的操作码字段:,操作码编码采用扩展编码方法;,操作数类型/长度约定不同数据类型用不同操作码表示(如定点/浮点数),,支持长度=8位或16位时,用操作码隐含指明,支持长度=8位和16位时,用W位指明,支持长度=8/16位和32位等时,用指令前缀指明,40,*指令本身的地址码字段:,R/M型地址码MOD为寻址方式位,单/双地址指令的地址码字组成零地址指令无地址码,REG型地址码用OP隐含约定为REG寻址,同R/M的MOD=11,“空闲”可用作OP,41,目标操作数约定同时支持REG型和R/M型时
22、,用D位指明,IMME型地址码同对应数据表示指令支持IMME型和非IMME型寻址方式时,用I位指明,例1REG/MEM-REG型及REG/MEM-IMME型的数据传送指令,42,例2某8位字长的模型机中,主存按字节编址,CPU中有8个数据REG和2个变址REG。所有的7种双操作数操作的使用频率分别为0.35、0.25、0.20、0.10、0.05、0.03、0.02。(1)若约定:操作码为2种长度的霍夫曼等长扩展编码,请写出各指令操作码;(2)若约定:上述短操作码对应的是8位REG-REG型指令,长操作码对应的是16位REG-MEM型指令;MEM型地址码采用变址+偏移寻址方式,即EA=(REG
23、I)+DSP,偏移量DSP的范围不小于63;REG型、MEM型操作数均可作为目标操作数;请写出这两类指令的指令格式,标出各字段长度。,43,解(1)由霍夫曼编码可见:等长扩展的编码为2位和4位,(2)因数据长度只有一种,故指令中无需长度标志位W;,扩展编码的操作码为:0010、11001111;,REG-REG型指令格式目标操作数隐含表示(如最左),REG-MEM型指令格式目标操作数用D位显式表示,REG型地址码不需要寻址方式位,长度=,MEM型地址码不需要寻址方式位,由RI及DSP组成变址REG(RI)长度=偏移量(DSP)长度,log28=3位,1位,1位(符号)+6位(数值)=7位;,4
24、4,三、Power PC指令系统,1、寻址方式共支持6种寻址方式,多数指令只使用12种。可简化硬件设计,45,2、指令格式只有几十条指令;采用定长指令格式(32位,共有4种)。,*指令格式特征:操作码采用扩展编码方法,操作码可分开存放;,地址码4个,多数为REG型,目标操作数隐含表示;寻址方式大多数指令只有12种,占用12个操作码可省略寻址方式位,46,4.4 指令系统发展,系统性能/价格与指令系统:TCPU=INCPITC,软硬件与指令系统:指令系统是软硬件的主要交界面;,降低价格减少程序中指令数量;增加指令的功能及种类提高性能提高指令的执行速度。减少指令的功能及种类,47,一、CISC的指
25、令系统 (Complex Instruction Set Computer),*CISC指令系统的目标:侧重强化指令功能,以减少目标代码空间,*CISC指令系统的应用特点:程序目标代码空间较小;编译程序的设计复杂;指令的实现控制复杂,不利于VLSI、流水、并行,*CISC指令系统特征:采用变长指令字结构; 利于提高可扩展性、实现兼容性指令种类较多、格式复杂,支持多种寻址方式;大多为REG-MEM型指令;使用少量寄存器;指令执行时间较长(通常为几个几十个TC),48,二、RISC的指令系统 (Reduced Instruction Set Computer),*RISC指令系统特征:采用定长指令
26、字结构;指令种类较少、格式简单,支持少量寻址方式;除LOAD/STORE外,基本上全部是REG-REG型指令;使用大量寄存器;指令执行速度快(基本上为1个TC),*RISC指令系统的应用特点:目标代码空间较大;编译程序的设计简单;指令的实现控制简单,有利于VLSI、流水、并行,*RISC指令系统的目标:侧重提高指令执行速度,需简化指令功能,49,三、CISC与RISC的发展,*CISC与RISC的比较: (理论上或模拟机上)性能方面RISC略好,得益于VLSI、流水、并行技术其他方面CISC略好,得益于变长的、复杂的指令格式,*CISC与RISC的发展:停止了争吵,出现了技术交融,RISC增加指令系统复杂度,纯RISC类RISC;CISC采用RISC技术,纯CISCCISC外表+RISC内核,应用需求增加及产品换代的需要,