什么是指令?
计算机能直接识别、执行的操作命令(机器指令)。
冯诺依曼结构计算机“程序控制”原理实现的载体。
软、硬件界面和程序员操作计算机硬件的接口。
硬件设计的依据和软件设计的基础,直接影响计算机系统的性能。
什么是指令系统?
一台计算机或处理器能够识别和执行的所有计算机指令的集合。CPU通过执行一系列机器指令来完成各种计算和控制任务。指令系统通常分为两种类型:精简指令系统计算机(RISC),复杂指令系统计算机(CISC)
指令的分类
根据计算机层次结构分类
高级语言指令、汇编语言指令、机器语言指令和微指令指令。
根据指令中地址码字段个数分类
三地址指令、二地址指令、一地址指令和零地址指令。地址个数越少,指令能够访问的范围越大。
根据指令中操作数的物理位置分类
存储器-存储器(SS)型。(该指令类型要访问两次主存,指令速度较慢,故已不存在)
寄存器-寄存器(RR)型。
寄存器-存储器(Rs)型。
根据指令的功能分类
传送指令、定点算术运算指令、位运算指令和控制转移指令。
指令字长
指令中包含的二进制位数。
与机器字长相比:单字长、双字长、半字长等长度指令。
多字长指令(至少双字长)
解决寻址较大存储空间的问题。(拓展技术)
取址多次访问,影响速度,占有空间大。
等长指令:指令字长固定。(易于硬件的设计及简化)
变长指令:指令字长度根据需要可变。(怎加硬件设计和简化的难度)
5.1指令系统的发展为继承已有的软件,减少软件开发费用,诞生了系列计算机(同一公司不同时期生产,基本系统结构和指令系统相同的计算机)使得在旧机种上运行的软件可以不加任何修改地在新机种上运行。与之相对应的还有兼容机(不同公司生产,基本系统结构和指令系统相同的计算机)随着计算机的发展,指令系统也趋于多用途、强功能化,但指令结构太复杂也会带来一些不利因素,因此提出了CISC和RISC。
5.2指令格式5.2.1指令格式一条指令一般包含
操作码:具体说明操作的性质及功能。
操作数:指令的输入,即执行操作所需的数据或地址信息。
寻址方式:如何找到或计算操作数的地址。
操作控制码:有时候,指令可能包含一些额外的控制信息,用于指导处理器的具体行为。这可能包含标志位的设置、条件执行的控制等。
拓展字段:有些指令可能包含拓展字段,用于提供额外的信息或操作码的变体。这对于支持复杂操作或者特殊功能非常有用。
操作码字段的位数与支持的最大指令数量有关。
对于定长操作码而言,操作码的长度=log2N。
支持变长操作码时,操作码可向不用的地址码字段扩展。寻址方式字段的位数与支持的寻址方式种类有关。地址码字段的作用及影响与其位数和寻址方式有关。
根据地址码部分所给出地址的个数,对指令格式进行分类
零地址指令
无需任何操作数,如空操作指令、停机指令等。
操作数地址默认,如堆栈结构计算机的运算指令,所需的操作数默认在堆栈中。
一地址指令
指令中只给出一个地址,该地址既是操作数地址,又是操作结果的存储地址。
二地址指令
最常见的指令格式两个地址指出两个源操作数地址,其中一个还是存放结果的地址。
三地址指令
对A1、A2地址指出的两个元操作数进行操作后,将结果存入目的地址A3。
多地址指令
在某些性能较强的计算机中,往往设置处理成批数据的指令。
5.2.2指令操作码的扩展技术指令操作码通常有两种编码格式:固定个格式,可变格式。如何扩展:在指令字中用一个固定长度的字段表示基本操作码,而对于一部分不需要某个地址码的指令,把它们的操作码扩充到该地址字段。扩展技术使用原则:使用频度高的指令应分配短的操作码,使用频度低的指令相应地分配较长的操作码。霍夫曼编码的操作码:根据程序中指令出现频率高低而赋以不同长度的操作码。
虽然扩展码技术是一种重要的指令优化技术,可以缩短指令的平均长度,减少程序的总位数以及增加指令字所能表示的操作信息。但是,扩展操作码比固定操作码译码复杂,使控制器的设计难度增大,且需要更多的硬件支持。
5.2.3指令长度与数据字长的关系
数据字长决定了计算机的运算精度,字长越长,计算机的运算精度越高。
地址码长度决定了指令直接寻址能力。
为便于处理数据和尽可能地充分利用存储空间,一般机器的字长都是字节长度的1、2、4或8倍。
指令码的长度主要取决于操作码的长度、操作数地址的长度和操作数地址的个数。
5.3寻址方式什么是寻址?确定本条指令的数据地址及下一条要执行的指令地址的方法,与计算机硬件结构紧密相连,而且对指令格式和功能有很大影响。不同计算机有不同的寻址方式,但基本原理是相同的。有的计算机寻址种类较少,因此在指令操作码中直接表示出寻址方式;而有的计算机采用多种寻址方式,因此在指令中专设一个字段表示一个操作数的来源或去向。
5.3.1指令的寻址方式
顺序寻址:
程序的指令序列在主存顺序存放。执行时从第一条执行开始,逐条取出并逐条执行。
CPU中设置程序计数器(PC)对指令的顺序号进行计数。PC开始时存放程序的首地址,每执行一条指令,PC加”1“(存储1条指令占用的字节单元数),指出下一条指令的地址,直到程序结束。
跳跃寻址
通常通过跳转指令(分支指令)实现。
5.3.2操作数寻址方式
立即数寻址
所需的操作数由指令的地址码部分直接给出。
特点:
取指时,操作码和一个操作数同时被取出,减少了访问存储器的次数,提高了指令的执行速度。
最大优点便于程序设计(变量赋初值)。
数据大小受字段数限制。
不能修改操作数数值。
寄存器寻址
操作数在CPU的内部寄存器中
特点:
操作数在寄存器中,指令执行速度快。
能访问的数据大小一般与计算机字长有关。该指令的地址码位数只影响能访问的寄存器个数,不影响访问数据的大小。
地址字段的位数与计算机通用寄存器数量相关。
缩短指令长度,节省存储空间。
直接寻址
地址码字段直接给出操作数在内存中的地址。
特点:
提供访问主存的操作。
获得数据要访问主存,指令执行速度慢。
地址字段的位数决定了访存空间的大小,因此引入间接寻址。
间接寻址
地址码字段给出的是操作数地址的地址。
特点:
解决了直接寻址方式下地址字段的位数限制访存范围大小的问题。
获得数据要访问主存2次,指令执行速度太慢。
寄存器简介寻址
地址码字段给出的是寄存器编号。(先访问地址码字段给出的寄存器,在寄存器中获得操作数在主存中的位置)
特点:
解决了直接寻址方式下地址字段的位数限制访存范围大小的问题。
获得数据只需访问主存一次。
相对寻址
将程序计数器PC的内容与指令的地址码部分给出的位移量(Disp)之和作为操作数的地址或转移地址。
特点:
可节省指令中的地址位数,便于程序在内存中成块移动。
注意:PC的改变对计算的影响(回顾5.3.1 1.顺序寻址)
基址寻址
在计算机中设置一个专用的基址寄存器,或由指令指定一个通用寄存器为基址寄存器。操作数地址由基址寄存器的内容和指令的地址码A相加得到。地址码A通常被称为位移量。
特点:
使用基址寄存器可以访问更大的主存空间。
对某一程序而言,基址值设定后不变,故要访问不同数据需修改指令中地址码字段。
变址寻址
指定一个变址寄存器,与本地指令地址无关,内容可随要求改变。
特点:
不改变指令即可改变数据的有效地址,可在循环中使用。
在字符串处理,向量运算等等成批数据处理中非常有用。
总结
立即寻址 快,便于程序设计,赋初值,初值大小受限
寄存器寻址 快,便于程序设计,不能访问主存
直接寻址 慢,便于程序设计,提供访存,范围受限
间接寻址 很慢,解决直接寻址访存范围受限的问题
寄存器间接 慢,便于程序设计,提供访存,范围增大
相对寻址 慢,提供访存,不能再循环中使用
变址寻址 慢,便于程序设计,提供访存,可在循环中使用
基址寻址 慢,提供更大的范围的访存能力,不能在循环中使用
5.4指令格式设计5.4.1指令格式设计的主要内容
根据指令数量的要求及是否支持操作码扩展,确定操作码字段的位数。
根据对操作数的要求确定地址码字段的个数。
根据寻址方式的要求,为每个地址码字段确定寻址方式字段位数。
确定采用定长指令还是变长指令
5.4.2指令格式设计举例(抱歉喔,这儿的例题估计得耽搁一段时间,还没搞懂hexo和markdown插入图片得方法)
5.5…未完待续…