5.1
指令系统简介:
指令系统概述
指令:
计算机能直接识别、执行的操作命令(机器指令)
是冯诺依曼结构计算机“程序控制”原理实现的载体
是软、硬件界面和程序员操作计算机硬件的接口
是硬件设计的依据,是软件设计的基础,直接影响计算机系统的性能
指令系统(指令集): 一台计算机中所有机器指令的集合
系列机:同一公司不同时期生产,系统结构和指令系统基本相同的计算机(向下兼容性)
兼容机:不同公司生产,系统结构和指令系统基本相同的计算机
指令字长:
指令中包含的二进制位数
决定于操作码的长度、操作数地址的长度、操作数的个数
与机器字长相比可分为:单字长指令、双字长指令、半字长指令等长度指令
多字长指令:解决寻址较大存储空间的问题(扩展指令长度),但取指令的访存次数较多,影响速度,占用空间大
等长指令:指令字长度固定,对硬件的设计简化有利
变长指令:指令字长度根据需要可变
指令分类:
根据计算机层次结构分类
根据指令中地址码字段的个数分类
根据指令中操作数的物理位置分类
根据指令的功能分类
指令的存储: 大端模式与小端模式(详细见本栏文章《存储器层次结构总结——基本知识要点汇总》大端和小端数据存放方式部分)
指令格式
指令基本格式
操作码:指出指令所进行的操作
地址码:表示参加运算的数据应从存储器的哪个单元取,运算的结果应存到哪个单元
操作码字段的位数与支持的最大指令数量有关
寻址方式字段的位数与支持的寻址方式种类有关
地址码字段的作用及影响与其位数和寻址方式有关
在指令系统中若所有指令的长度相同,则称为等长指令;相应的如果指令系统中指令的长度不相同,则称为变长(不等长)指令
等长指令方便设计;不等长指令节约存储空间
等长指令格式
优点: 定长指令结构规整,有利于简化硬件,尤其是指令译码部件的设计
不足: 定长指令平均长度长,容易出现冗余码点和指令不易扩展等不足
在等长指令系统中,指令可以采用固定长度的操作码(即定长操作码),也可以采用长度不固定的操作码(即扩展/变长操作码)
定长操作码指令格式
假定操作码占m位,则最多表示2m个不同指令
扩展(变长)操作码指令格式
定长指令中将操作码位数扩展至操作数地址码字段(即将用不到的地址码位数并入到操作码中用作操作码),或将操作数位数向前扩展至操作码字段(即将操作码左移,将操作码用不到的位数并入到操作数地址码中用作地址码)
变长指令格式
各种指令字的长度随指令功能的不同而不同,如指令可分为单字长指令、半字长指令或多字长指令
优点: 变长指令结构灵活,能充分利用指令中的每一位,因此指令码点冗余少,指令的平均长度短,易于扩展
不足: 但由于格式不规整,不同指令的取指事件可能不同,导致控制复杂
混合编码指令格式
混合编码指令格式是定长指令格式和变长指令结构的综合,它提供若干长度固定的指令字,以期达到既能减少目标代码的长度又能降低译码复杂度的目标
指令和操作数的寻址方式
基本概念:
寻址方式:确定本条指令的操作数地址或下一条要执行指令的指令地址,直到程序结束
寻址方式的划分:指令寻址、操作数寻址(即指令中数据的寻址)
程序计数器PC:用于存放下一条指令所在单元的地址。ARM型CPU中为程序计数器PC,X86型CPU中为指令指针寄存器IP,用于控制程序中指令的执行顺序
指令寻址
顺序寻址
指令在内存中是顺序存放,当执行一段程序时,通常是一条指令接一条指令地顺序执行。程序计数器PC(指令指针寄存器IP)每执行一条指令,PC+1(“1”指存储1条指令所占用的字节单元数,和编址方式有关),指向下一条欲执行指令的指令地址,这种程序顺序执行的过程称为指令的顺序寻址
跳跃寻址
当程序执行循环指令或转移指令等指令时,指令的寻址采用跳跃寻址方式,即下一条指令的地址不是由程序计数器PC+1产生,而是将本条指令给出的目标地址直接装入PC给出
操作数寻址(数据寻址)
基本概念:
形式地址:指令字中的地址
有效地址:操作数的真实内存地址
地址码字段通常为形式地址,形式地址与有效地址间需要进行转换,寻址过程就是把操作数的形式地址根据寻址方式转换为操作数的有效地址的过程,寻址方式由寻址特征位标识
立即寻址(立即数寻址)
形式地址就是操作数,一般以补码形式进行表示
取指操作将数据与指令一并读入CPU内部的寄存器,即只取指令访存一次,执行阶段不访存
优点:数据直接送给CPU,因此在指令执行阶段不访存,取指操作将数据与指令一并读入CPU内部的寄存器,指令执行速度快,便于程序设计(如变量赋初值)
缺点:形式地址的位数限制的立即数的范围
一般为双字长指令
直接寻址(直接内存寻址)
形式地址就是有效地址
以一地址指令为例
执行过程为直接利用有效地址访问对应内存,从内存单元中将操作数取出并对其完成操作码的操作,之后送到寄存器,即执行阶段需要访存一次
优点:操作数地址直接给出不需要变换,实现简单
缺点:形式地址的位数决定了该指令操作数的寻址范围,且操作数的地址不易修改
通常为双字长指令
间接寻址
通过地址码字段中的形式地址访问主存一次,获得有效地址,再基于有效地址进行二次访问内存,才能获得操作数(以速率换访存范围),即执行阶段最少访问主存两次,也可能进行多次间址
优点:可扩大寻址范围,便于编制程序
缺点:多次访问主存,访问速率过慢
寄存器寻址
操作数不放在内存中,而是放在CPU的通用寄存器中,指令中给出的操作数地址是通用寄存器的编号
优点:操作数在寄存器中,指令执行速度快;能访问的数据大小一般与计算机字长有关,不受形式地址的限制
寄存器间接寻址
地址码在字段给出的是寄存器编号,通过地址码字段中的形式地址访问寄存器一次,获得有效地址,再基于有效地址访问内存获得操作数(解决间接寻址两次访问主存速度慢的问题)
便于编制循环程序