总述部分
①计算机程序是由一系列的指令所构成的,而指令系统就是计算机所有能够执行的机器指令的集合,也称指令集。
②指令系统位于计算机硬件和软件的交界面上,反映了计算机的主要属性,直接影响到计算机的性能和使用范围,同时影响到计算机的硬件和系统软件。
③指令周期可以分为取指令和执行指令两大阶段。取指令阶段是从程序存储系统中获取指令并确定指令的操作类型;执行阶段首先要获得操作数,接着进行运算产生运算结果或状态,然后向存储系统中存放运算结果,最后确定下一条要执行的指令。
④机器级指令包括机器指令和汇编指令。机器指令是由若干零一序列构成的字段,内部可以分为操作码、寻址方式、寄存器编号和操作数等多个字段;汇编指令是在机器指令的基础上引入助记符表示。
⑤指令集体系结构ISA规定了指令格式、操作种类、每种指令的操作数类型、操作数的寄存器规定、寻址方式等信息。
1.指令系统的发展和设计原则
①指令系统的优化设计有两个截然相反的方向,分别是CISC(复杂指令系统计算机)和RISC(简化指令系统计算机)。CISC增强了机器指令功能,设置了一系列复杂指令;RISC只保留最简单和使用最频繁的指令并采用流水线的方法执行指令,每一条指令的时钟周期短。一般来说,RISC的速度高于CISC。
②指令系统的设计需要遵循完整性、规范性(对称性和均匀性)、高效性和兼容性四个原则。完整性指的是指令要能满足计算机的基本运行需要;规范性要求尽可能减少特例用法使得各种指令能够对称均匀:对称性指的是各种指令需要设置对称;均匀性指指令要能够处理多种数据类型;高效性指指令的执行速度要足够快;兼容性指系列机器的指令集要能相互兼容。
③机器语言和汇编语言所写的程序依赖于计算机的硬件结构和指令系统,因此不能在不同类型的机器上执行;高级语言所写的程序不依赖于具体的硬件结构和指令系统,可以在不同类型的机器上执行。
2.指令格式
①指令字又称指令,是指表示一条指令的机器字,指令格式是指指令字用二进制代码表示的结构形式,由操作码OP和地址码A字段两部分组成。操作码给出操作的性质,地址码给出操作数的地址或形式地址,也可以给出寻址方式。
②每一条指令都必须有一条操作码,指出指令进行的是什么性质的操作。操作码编码可以分为规整性和非规整性两类,规整型采用定长编码,而非规整型采用变长编码。规整型操作码中字段的位数和位置都是固定的;非规整型操作码的字段位数不固定,而且分散在指令字的不同位置上。非规整型操作码可以压缩操作码的平均长度,但是增大了指令译码和分析的难度。最常用的非规整型编码方式是扩展操作码法,也就是对于地址个数多的指令的操作码尽可能短,对于地址个数少的指令操作码字段可以放长。扩展操作码介于定长编码和霍夫曼编码之间,操作数的位数不是固定的也不是任意的,而是有限制的几种码长。
③地址码按操作数个数划分可以分为三地址指令、二地址指令、一地址指令和零地址指令等。零地址指令只有操作码,一地址指令可以有一个操作数或两个操作数,在有两个操作数时其中隐含一个操作数固定存放在累加器ACC中。累加器也是一种寄存器,但是其进行连续计算时可以保存连续相加的结果。按照操作数的物理位置,可以将指令分为SS型指令、RR型指令和RS型指令:SS型指令的操作数和运算结果都放在内存中,RR型指令的操作数和操作结果都放在寄存器中,而RS型指令的操作数和操作结果分别在寄存器中和内存中。地址码可以进行优化以缩短地址码,可以采用寄存器间接寻址和变址寻址方式。
④指令长度是指一条指令中所包含的二进制代码的位数,它取决于操作码字段的长度、操作数地址的个数和长度。指令长度应该尽可能短以节约存储空间并提高执行速度,同时应该等于字节的整数倍从而避免浪费存储空间。机器字长是计算机能直接处理的二进制位数。如果指令字长等于多少机器字长,就称该指令是多少字长指令。
⑤指令助记符是为了方便书写和阅读从而用来表示指令的英文缩写字母。不同计算机中指令助记符的规定是不一样的,其转换通过汇编程序来完成。
⑥常见的指令集体系结构有:IA-32、MIPS、ARM等。
3.操作数类型
指令的操作数可以是地址型数据(指针)、数值型数据、位/位串/字符串型数据、逻辑型数据。
4.标志信息与使用
条件转移指令根据条件码或状态位和标志位来进行转移,可以通过执行算术指令或显式地比较和测试指令来设置条件码。常用的四种条件码有SF、OF(溢出标志)、CF(进位借位标志)ZF(零标志),条件码可以存入条件码寄存器中,也可以指定通用寄存器来存放标志位。
5.指令及数据的寻址方式
①当采用指定地址方式来形成操作数或指令地址的方式称为寻址方式,通过指令中的形式地址配合寻址方式即可获得操作数的有效地址。指令系统采用不同的寻址方式是为了缩短指令长度,扩大寻址空间,提高编程的灵活性。寻址方式可以分为指令寻址方式和数据寻址方式。
②指令寻址方式可以分为顺序寻址方式和跳跃寻址方式,其目的为找出下一条需要执行的指令。其中跳跃寻址方式是指下一条指令的地址码不是由程序计数器给出而是由本条指令给出。
③形成操作数的有效地址的方法称为操作数的寻址方式。一般来说,指令中给出的地址码并不是操作数的有效地址,因此,寻址过程就是把操作数的形式地址变换为操作数的有效地址的过程。
(重点)④常见的寻址方式如下:
1.隐含寻址:在指令中不明显给出但是隐含着操作数的地址,比如规定累加寄存器作为第
二操作数地址;
2.立即寻址:指令的地址字段直接给出操作数,这种方式的指令执行时间很短,因为无
需访存取数;
3.直接寻址:在指令的地址字段中直接指出操作数所在的内存地址;
4.间接寻址:指令地址字段给出操作数地址的指示器,也就相当于操作数地址的地址;
5.寄存器寻址和寄存器间接寻址:操作数不在内存中而是放在CPU的通用寄存器中时,指令的地址字段给出通用寄存器编号的方式为寄存器寻址,如果寄存器中的内容不是操作数而是操作数的地址则称为寄存器间接寻址;寄存器寻址和寄存器间接寻址的速度分别高于直接寻址和间接寻址,因为访问寄存器的速度高于访问内存的速度。
6.偏移寻址:是直接寻址和寄存器间接寻址的结合,可以分为相对寻址、基址寻址和变址寻址。相对寻址是把程序计数器PC中的内容加上指令格式中的形式地址A而形成的操作数的有效地址(形式地址A通常称为偏移),其优点为程序员无需用指令的直接地址编程;基址寻址是将CPU中基址寄存器中的内容加上指令格式中的形式地址形成的操作数有效地址(可以扩大寻址能力),变址寻址与基址寻址类似,但是是采用CPU中的变址寄存器(目的与基址寻址不同,是为了实现程序块的规律性变化,如遍历线性表);