1、第三章第三章 指令系统指令系统n3.1 指令系统的定义及性能要求指令系统的定义及性能要求n3.2 指令格式及指令类型指令格式及指令类型n3.3 指令和数据的编码及寻址方式指令和数据的编码及寻址方式n3.4 堆栈寻址方式堆栈寻址方式n3.5 RISC机型机型 指令系统是指一台计算机所有机指令系统是指一台计算机所有机器指令的集合,构成了计算机的机器器指令的集合,构成了计算机的机器语言,是计算机硬件与上层软件的接语言,是计算机硬件与上层软件的接口。计算机的指令系统决定了计算机口。计算机的指令系统决定了计算机的的CPU的功能和结构。的功能和结构。CISC和和RISC是现代两大典型指令系统体系结构。是现
2、代两大典型指令系统体系结构。设计一台机器的指令系统应考虑到其设计一台机器的指令系统应考虑到其完备性和完整性、兼容性、均匀性、完备性和完整性、兼容性、均匀性、可扩充性。可扩充性。裸机裸机软件软件指令系统指令系统指令格式指令格式 操作码表示指令要完成的操作,其长度决操作码表示指令要完成的操作,其长度决定了指令系统可以表示的指令条数;操作数是定了指令系统可以表示的指令条数;操作数是操作的对象,对象的类型由寻址方式部分决定操作的对象,对象的类型由寻址方式部分决定操作数(操作数(D)寻址方式寻址方式地址码地址码数数值值寄寄存存器器内内存存地地址址操作码操作码(OP)指令分类:依据操作数个数来分 OP O
3、P D OP D1 D2 OP D1 D2 D3 指令中地址个数的选取要考虑诸多的因指令中地址个数的选取要考虑诸多的因素。从缩短程序长度,用户使用方便,增加素。从缩短程序长度,用户使用方便,增加操作并行度等方面来看,选用三地址指令格操作并行度等方面来看,选用三地址指令格式较好;从缩短指令长度,减少访存次数,式较好;从缩短指令长度,减少访存次数,简化硬件设计等方面来看,一地址指令格式简化硬件设计等方面来看,一地址指令格式较好。对于同一个问题,用三地址指令编写较好。对于同一个问题,用三地址指令编写的程序最短,但指令长度最长,而用二、一、的程序最短,但指令长度最长,而用二、一、零地址指令来编写程序,
4、程序的长度一个比零地址指令来编写程序,程序的长度一个比一个长,但指令的长度一个比一个短。一个长,但指令的长度一个比一个短。双操作数运算类指令的执行n对于双操作数运算类指令(如加法指令)来对于双操作数运算类指令(如加法指令)来说,每条指令中都需要包含以下说,每条指令中都需要包含以下 个地址信个地址信息:息: 第一操作数地址第一操作数地址A ; 第二操作数地址第二操作数地址A ; 操作结果存放地址操作结果存放地址A ; 下条将要执行指令的地址下条将要执行指令的地址A 。n这些地址信息可以明显地给出,称为显地址;这些地址信息可以明显地给出,称为显地址;也可以依照某种事先的约定,用隐含的方式也可以依照
5、某种事先的约定,用隐含的方式给出,称为隐地址。给出,称为隐地址。n()() 三地址双操作三地址双操作数指令数指令 三地址双操作数指令有三地址双操作数指令有 个显地址,指令的含义为:个显地址,指令的含义为:(A A )OPOP(A A ) A A假设指令存放在主存的假设指令存放在主存的 号号单元中,第一、第二操作数分别单元中,第一、第二操作数分别存放在主存的存放在主存的 和和 号单元中,结果存放在主存的号单元中,结果存放在主存的 号单元,如图号单元,如图 所示。所示。执行一条三地址的加法指令需要访问执行一条三地址的加法指令需要访问 次主存。次主存。第一次从号单元中取指令,第二次从第一次从号单元中
6、取指令,第二次从 号单元中取第一操作数,第三次从号单元中取第一操作数,第三次从 号单元号单元中取第二操作数,第四次将加法的结果保存到主中取第二操作数,第四次将加法的结果保存到主存的号单元。存的号单元。n()() 二地址双操作数指令二地址双操作数指令 二地址双操作数指令有两个显地址,第一操二地址双操作数指令有两个显地址,第一操作数地址同时兼作结果存放地址(目的地作数地址同时兼作结果存放地址(目的地址)址) ,指令的含义为,指令的含义为 (A )OP(A ) A执行一条二地址的加法指令同样需要访问执行一条二地址的加法指令同样需要访问 次次主存。第一次从主存。第一次从 号单元中取指令,第二次号单元中
7、取指令,第二次从从 号单元中取第一操作数,第三次从号单元中取第一操作数,第三次从 号单元中取第二操作数,第四次将加法的号单元中取第二操作数,第四次将加法的结果保存到主存的结果保存到主存的 号单元。号单元。n()() 一地址双操作数指令一地址双操作数指令 一地址双操作数指令只有一个显地一地址双操作数指令只有一个显地址,参加运算的另一个操作数来自累加址,参加运算的另一个操作数来自累加寄存器寄存器Acc 。指令的含义为。指令的含义为: (Acc)OP(A ) Acc执行一条一地址的加法指令只需要访问两次主执行一条一地址的加法指令只需要访问两次主存,第一次从存,第一次从 号单元中取指令,第二次从号单元
8、中取指令,第二次从 号单元中取操作数。由于第一操作数和号单元中取操作数。由于第一操作数和运算结果都放在累加寄存器中,所以读取第一运算结果都放在累加寄存器中,所以读取第一操作数和存放加法的结果都不需要访问主存。操作数和存放加法的结果都不需要访问主存。n()() 零地址双操作数指令零地址双操作数指令 零地址双操作数指令中只有操作码字段,零地址双操作数指令中只有操作码字段,操作数地址都是隐含的。操作数在堆栈的栈操作数地址都是隐含的。操作数在堆栈的栈顶位置和次栈顶位置,它们分别从堆栈中弹顶位置和次栈顶位置,它们分别从堆栈中弹出,送到运算器中进行运算,运算的结果再出,送到运算器中进行运算,运算的结果再压
9、入堆栈。执行一条零地址的加法指令访问压入堆栈。执行一条零地址的加法指令访问主存的次数取决于堆栈的结构。主存的次数取决于堆栈的结构。举例n例:分别利用三地址、二地址、一地址和零地址指令例:分别利用三地址、二地址、一地址和零地址指令编制计算算术表达式编制计算算术表达式x (ab c d) (e f)的程序。)的程序。 解:假设解:假设a、b 、c 表示操作数,表示操作数,A 、B 、C 表示操作表示操作数所在存储地址。数所在存储地址。n()() 三地址指令程序三地址指令程序 MUL A ,B ,X ADD X ,C ,X SUB X ,D ,X ADD E ,F ,Y DIV X ,Y ,Xn共需
10、共需 条三地址指令,每条指令条三地址指令,每条指令 次访存,执行此次访存,执行此程序共访存程序共访存 次。次。n()() 二地址指令程序二地址指令程序 MOV X ,A MUL X ,B ADD X ,C SUB X ,D MOV Y ,E ADD Y ,F DIV X ,Yn共需共需 条二地址指令,条二地址指令,MOV 指令指令 次访存,算术运次访存,算术运算指令算指令 次访存,执行此程序共访存次访存,执行此程序共访存 次。次。n()() 一地址指令程序一地址指令程序LOAD E ADD F STORE XLOAD AMUL BADD CSUB DDIV XSTORE Xn共需共需 条一地址
11、指令,每条指令条一地址指令,每条指令 次访存,执行此次访存,执行此程序共访存程序共访存 次。次。n()() 零地址指令程序零地址指令程序PUSH APUSH BMULPUSH CADDPUSH DSUBPUSH EPUSH FADDDIVPOP Xn共需共需 条指令,其中条指令,其中 条一地址的进、出栈指令,条一地址的进、出栈指令, 条零地址的算术运算指令。进、出栈指令条零地址的算术运算指令。进、出栈指令 次访次访存,算逻指令存,算逻指令 次访存,执行此程序共访存次访存,执行此程序共访存 次。次。n例:例: 某一机器的指令系统,操作码某一机器的指令系统,操作码 位,位,地址码均为地址码均为 位
12、,位,CPU 与主存之间每次传与主存之间每次传送送 位数据。位数据。A 、B 、C 、D 、E 表示字地表示字地址,存放址,存放 位数据。位数据。 ()() 分别用三地址、二地址、一地址和零地分别用三地址、二地址、一地址和零地址指令编写程序,计算址指令编写程序,计算A (B C) (D E)(不允许覆盖任何操作数,可以使)(不允许覆盖任何操作数,可以使用暂存单元)用暂存单元) 。 ()() 分别计算所写程序的总字节数。分别计算所写程序的总字节数。 ()() 分别计算程序执行时的访存次数。分别计算程序执行时的访存次数。 三地址指令程序三地址指令程序 SUB B ,C ,A SUB D ,E ,T
13、mp MUL A ,Tmp ,A 因为操作码因为操作码 位,地址码位,地址码 位,所以:位,所以:三地址指令程序中每条指令占三地址指令程序中每条指令占 个字节,程个字节,程序的字节总数为序的字节总数为 个字节;个字节; 因为三地址指令占因为三地址指令占 个字节,每条指令需访个字节,每条指令需访存存 次才能取出,接下来每条指令还需要访次才能取出,接下来每条指令还需要访存存 次,所以次,所以 条指令共访存条指令共访存 次。次。 二地址指令程序二地址指令程序 MOV A ,B SUB A ,C MOV Tmp ,D SUB Tmp ,E MUL A ,Tmp 二地址指令程序中每条指令占二地址指令程序
14、中每条指令占 个字节,个字节,程序的字节总数为程序的字节总数为 个字节;个字节; 因为二地址指令占因为二地址指令占 个字节,每条指令需访个字节,每条指令需访存存 次才能取出。除取指令外,传送指令还次才能取出。除取指令外,传送指令还需访存需访存 次,运算指令还需访存次,运算指令还需访存 次,所以次,所以总的访存次数为:总的访存次数为: 次。次。指令分类:依据指令功能来分n算术逻辑运算类指令(算术逻辑运算类指令(ADD、AND)n移位指令和循环指令移位指令和循环指令(CLR、RL)n传送类指令传送类指令(MOV)n串指令串指令(CWB)n顺序控制类指令顺序控制类指令(JMP)n特权指令特权指令(C
15、HMOD)n输入输出指令输入输出指令(IN OUT或利用访存指令或利用访存指令)指令系统的设计n指令的编指令的编/译码译码:操作码编码、操作:操作码编码、操作数编码数编码n指令及操作数的寻址指令及操作数的寻址操作码编码方式n固定长度、区域集中:可表示的指令个数有固定长度、区域集中:可表示的指令个数有限,译码简单、快速限,译码简单、快速n可变长度、区域分散:控制器复杂,可表示可变长度、区域分散:控制器复杂,可表示的指令多的指令多 通常采用两者结合的方式进行设计,选择设计方通常采用两者结合的方式进行设计,选择设计方案的原则是常用的指令尽量分配简短的操作码,以降案的原则是常用的指令尽量分配简短的操作
16、码,以降低占用的存储空间,缩短译码时间,从而提高程序运低占用的存储空间,缩短译码时间,从而提高程序运行速度行速度例:指令格式如下:如何表示61条指令,其中三地址、两地址、一地址指令各15条,零地址指令16条?能否表示更多条指令?4位4位4位4位OPOPA A1 1A A2 2A A3 34 4位位4 4位位4 4位位4 4位位OPOP1515条三地址指令条三地址指令0000 XXXX YYYY ZZZZ0000 XXXX YYYY ZZZZ1110 XXXX YYYY ZZZZ1110 XXXX YYYY ZZZZ111111111515条二地址指令条二地址指令11111111 0000 XX
17、XX YYYY 0000 XXXX YYYY1111 1110 XXXX YYYY1111 1110 XXXX YYYY1111 11111111 11111515条一地址指令条一地址指令1111 11111111 1111 0000 XXXX 0000 XXXX1111 1111 1110 XXXX1111 1111 1110 XXXX1111 1111 11111111 1111 11111616条零地址指令条零地址指令1111 1111 11111111 1111 1111 0000 00001111 1111 1111 11111111 1111 1111 1111扩展窗口扩展窗口扩展
18、窗口扩展窗口扩展窗口扩展窗口OPOPA1A1A2A2OPOPA1A1OPOP操作数的编码方式n立即数:直接将数据表示成二进制形式立即数:直接将数据表示成二进制形式n寄存器寄存器/存储器:直接给出寄存器或存储存储器:直接给出寄存器或存储器的地址码(名称)即可;器的地址码(名称)即可;注:注:寄存器(寄存器(CPU内部或外围设备内部)内部或外围设备内部)及存储器的编址方式:及存储器的编址方式:1)字编址、字节编址、位编址;)字编址、字节编址、位编址;2)统一编址、非统一编址)统一编址、非统一编址操作数的编码方式n例:设某机主存容量为例:设某机主存容量为MB ,机器,机器字长字长 位,若最小寻址单位
19、为字节位,若最小寻址单位为字节(按字节编址)(按字节编址) ,其地址码为多少位?,其地址码为多少位? 若最小寻址单位为字(按字编址)若最小寻址单位为字(按字编址) ,其,其地址码又为多少位?地址码又为多少位? 解:若按字节编址,地址码应为解:若按字节编址,地址码应为 位位( MB) ;若按字编址,;若按字编址,地址码只需地址码只需 位。位。操作数的编码方式 例例:假设某外设接口中有假设某外设接口中有 个寄存器,它们通个寄存器,它们通过数据总线与过数据总线与CPU 相连,其总线地址如下:相连,其总线地址如下: 数据寄存器数据寄存器FFH 命令字寄存器命令字寄存器FFH 状态字寄存器状态字寄存器F
20、FH下列下列 条指令完成的操作分别是什么?条指令完成的操作分别是什么?()() MOV FFH ,R()() MOV R ,FFH()() MOV R ,FFH()() MOV FFH ,R常用操作数寻址方式n立即寻址立即寻址 immen直接寻址直接寻址 EA=Dn间接寻址间接寻址 EA=(D)n寄存器直接寻址寄存器直接寻址 EA=Rn寄存器间接寻址寄存器间接寻址 EA=(R)n寄存器变址寻址寄存器变址寻址 EA=R+Dn相对寻址相对寻址 EA=PC+Dn基址寻址基址寻址 EA=BX+Dn隐含寻址隐含寻址 n其他寻址方式(块寻址、段寻址)其他寻址方式(块寻址、段寻址)注:内存寻址时存在的对齐方
21、式:大端序、小端序注:内存寻址时存在的对齐方式:大端序、小端序 例例: 设寄存器设寄存器R 中的数值为中的数值为H ,地址为,地址为H 的存的存储单元中存储的内容为储单元中存储的内容为H ,地址为,地址为H 的存储的存储单元中存储的内容为单元中存储的内容为H ,PC 的值为的值为H ,问以,问以下寻址方式下访问到的操作数的值是什么?下寻址方式下访问到的操作数的值是什么?()() 寄存器寻址寄存器寻址R ;();() 寄存器间接寻址(寄存器间接寻址(R) ;();() 直接寻址直接寻址H ;();() 间接寻址(间接寻址(H) ;();() 相对寻址相对寻址 H(PC) ;();() 立即寻址立
22、即寻址 H 。 解:解:()() 采用寄存器寻址采用寄存器寻址,操作数在寄存器中,操作数在寄存器中,S (R) H 。()() 采用寄存器间接寻址采用寄存器间接寻址,操作数的有效地,操作数的有效地址在寄存器中,址在寄存器中,EA (R) ,操作数,操作数S (R) (H) H 。()() 采用直接寻址采用直接寻址,操作数的有效,操作数的有效地址在指令中给出,地址在指令中给出,EA H ,操作数,操作数S (H) H 。()() 采用间接寻址采用间接寻址,操作数有效地址在,操作数有效地址在主存单元中,主存单元中,EA (H) H ,操作数,操作数S (H) H 。()() 采用相对寻址采用相对寻
23、址,操作数,操作数有效地址为有效地址为PC 中的内容与指令中的位移量中的内容与指令中的位移量D 之和,即之和,即EA (PC) D H H H ,操作,操作数数S (H) H 。()() 采用立即寻址采用立即寻址,操作数直接在指令中给出,操作数直接在指令中给出,S H 。常用指令寻址方式常用指令寻址方式n顺序寻址方式顺序寻址方式n跳跃寻址方式:直接、相对、间接跳跃寻址方式:直接、相对、间接1、栈的分类:、栈的分类: 用寄存器实现堆栈(用寄存器实现堆栈(串联堆栈串联堆栈) 内存中开辟内存中开辟堆栈区堆栈区 自底向上生成堆栈自底向上生成堆栈 自顶向下生成堆栈自顶向下生成堆栈2、栈的建立:、栈的建立
24、: 将栈顶地址传送到将栈顶地址传送到SP中中3、栈的操作:、栈的操作: PUSH/POP、MOV栈及相关概念栈及相关概念从从“20-80律律”出发,人们开始了对指令系出发,人们开始了对指令系统合理性的研究,提出了精简指令系统的想法,统合理性的研究,提出了精简指令系统的想法,出现了精简指令系统计算机,简称出现了精简指令系统计算机,简称RISC。80%不常用不常用指令指令复杂指复杂指令系统令系统20%常用常用指令指令精简指令精简指令系统系统RISC机型机型RISC机:机:n指令数少指令数少n长度固定,格式少、寻址方式少长度固定,格式少、寻址方式少n大多数指令一个机器周期可完成大多数指令一个机器周期
25、可完成n通用寄存器多,只有存数通用寄存器多,只有存数/取数指令访问取数指令访问存储器存储器指令格式8位位O P0 000 001 010 011 100 101A D DSU BA N DX O RL O A DST O R E00: 单单 字字01: 双双 字字 指指 令令源源 操操 作作 数数 寻寻 址址0: 寄寄 存存 器器 直直 接接 寻寻 址址1: 立立 即即 数数 寻寻 址址b7b3寄寄 存存 器器 编编 号号一一 地地 址址 指指 令令 , 目目标标 地地 址址 隐隐 含含 为为 累累加加 器器1 000 001 010B 7=1:双双 字字 指指 令令SLR L+1零零 地地 址址 指指 令令 ,目目 标标 地地 址址 隐隐 含含为为 累累 加加 器器1 1M O Vb3只只 能能 为为 1, 且且 为为直直 接接 寻寻 址址 方方 式式 即即下下 一一 个个 字字 为为 内内 存存单单 元元 地地 址址源源 寄寄 存存 器器 编编 号号b7b6目目 标标 寄寄 存存 器器 编编 号号双双 地地 址址 直直 接接 寻寻址址 指指 令令 , 两两 地地址址 都都 为为 寄寄 存存 器器直直 接接 寻寻 址址 方方 式式