4.1指令格式
    -指令的定义
    指令(机器指令)是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该机的指令系统,也称指令集。
    •指令系统是计算机的主要属性,位于硬件和软件的交界面上。
    • 一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令。
    二、指令的基本格式
    一条指令就是机器语言的一个语句,它是一组有意义的二进制代码。
    一条指令通常要包括操作码字段和地址码字段两部分:

    三、指令的分类
    按地址码数目分类:
    •零地址指令:只给出操作码OP,没有显式地址。
    OP EHC
    a. 不需要操作数的指令,如空操作、停机、关中断等指令。
    b. 零地址的运算类指令仅用在堆栈计算机中,参与运算的两个操作数隐含地聪栈顶和次栈顶弹出,送到运算器进行运算,运算结果再隐含地压入堆
    栈,
    —地址指令:
    a. 只需要单操作数,按A1地址读取操作数,进行OP操作后,结果存回原地址。
    指令含义:OP(A1)—>A1,完成一条指令需3次访存:取指一>读八1—>写八1。
    如加1、减1、取反、求补等。
    b. 需要两个操作数,但其中一个操作数隐含在某个寄存器(如ACC),运算结果也将存放在ACC中。
    指令含义:(ACC)OP(A1)—>ACC,完成4指令需2次访存:取指一>读八1。
    注:A1指某个主存地址,(A1)表示A1所指向的地址中的内容。
    •二地址指令:常用于需要两个操作数的算术运算、逻辑运算指令。
    OP Ai (目的操作数) A、(源操作数)Eric
    指令含义:(A1)OP(A2)—>A1,完成一条指令需要访存4次,取指一>读八1—>读八2—>写八1。
    •三地址指令:常用于需要两个操作数的算术运算、逻辑运算相关指令。
    指令含义:(A1)OP(A2)_>A3,完成一条指令需要访存4次,取指自读A1—>读八2 — >写八3。
    •四地址指令:
    指令含义:(A1)OP(A2)—>A3, A4=下一条将要执行指令的地址。
    完成一条指令需要访存4次,取指一〉读A1—>读八2—〉写A3。
    。正常情况下:取指令之后PC+1,指向下一条指令。
    。四地址指令:执行指令后,将PC的值修改为A4所指地址。
    直接寻址范围:
    n位地址码的直接寻址范围=2n,若指令总长度固定不变,则地址码数量越多,寻址能力越差。
    按指令长度分类:
    •定长指令字结构:指令系统中所有指令的长度都相等,执行速度快,控制简单。
    •变长指令字结构:指令系统中各种指令的长度不等,随指令功能而异。
    相关概念:
    •指令字长:指一条指令中所包含的二进制代码的位数,取决于操作码的长度、操作数地址码的长度和操作数地址的个数。
    •机器字长:CPU进行一次整数运算所能处理的二进制数据的位数(通常和A山直接相关)。
    .存储字长:一个存储单元中的二进制代码位数(通常和MDR位数相同)。
    。因为主存一般是按字节编址的,所以指令字长多为字节的整数倍。
    。指令长度与机器字长没有固定的关系,它可以等于机器字长,也可以大于或小于机器字长。
    。半字长指令、单字长指令、双字长指令一令长度是机器字长的多少倍。
    。指令字长会影响取指令所需时间。如:机器字长=存储字长=16bit,则取一条双字长指令需要两次访存。
    按操作码长度分类:
    •定长操作码:指令系统中所有指令的操作码长度都相同。
    。位操作码字段的指令系统最大能够表示2n条指令。
    。优:定长操作码对于简化计算机硬件设计,提高指令译码和识别速度很有利。
    。缺:指令数量増加时会占用更多固定位,留给表示操作数地址的位数受限,灵活性较低。
    .可变长操作码:为了在指令字长有限的前提下仍保持比较丰富的指令种类,采取可变长度操作码。全部指令的操作码字段的位数不固定,且分散地放在
    指令字的不同位置上。
    。最常见的变长操作码方法是扩展操作码,采取定长指令字结构+可变长操作码,使操作码的长度随地址码的减少而増加,不同地址数的指令可以具
    有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。
    o优:在指令字长有限的前提下仍保持比较丰富的指令种类。
    。缺:増加了指令译码和分析的难度,使控制器的设计复杂化。
    扩展操作码举例:
    指令字长为16位,每个地址码占4位:
    前4位为基本操作码字段OP,另有3个4位长的地址字段Ai、A2和A3。
    4位基本操作码若全部用于三地址指令,则有16条。
    但至少须将1111留作扩展操作码之用,即三地址指令为15条:
    1111 1111留作扩展操作码之用,二地址指令为15条;
    1111 11111111留作扩展操作码之用,一地址指令为15条;
    零地址指令为16条。
    还有其他扩展操作码设计方法。
    在设计扩展操作码指令格式时,必须注意以下两点:
    1. 不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。
    2. 各指令的操作码一定不能重复。
    通常情况下,对使用频率较高的指令,分配较短的操作码;对使用频率较低的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间。
    设指令字长固定为16位,试设计一套指令系统满足:
    a) 有15条三地址指令
    共24=16种状态
    留出16-15=1种
    b) 有12条二地址指令
    共 1 X24=16 种
    留出16-12=4种
    c) 有62条一地址指令
    共4 x24=64种
    ⑺岀64-62=2种
    d) 有32条零地址指令
    共 2x24=32 种
    设地址长度为n,上一层留出m种状态,下一层可扩展出mx2n种状态
    按操作类型分类:
    数据传送类:进行主存与CPU之间的数据传送
    1. 数据传送
    • MOV:寄存器之间传送。
    • LOAD:从内存单元读取数据到CPU寄存器。
    • STORE:从CPU寄存器写数据到内存单元。
    运算类
    2. 算术和逻辑操运算
    •算术:加(ADD)、减(SUB)、乘(MUL)、除(DIV)、加 1(INC)、减 1 (DEC)等。
    •逻辑:与(AND)、或(OR)、取反(NOT)、异或(XOR)等。
    3. 移位操作
    •算术移位、逻辑移位、循环移位(带进位和不带进位)。
    程序控制类:改变程序执行的顺序
    4. 转移操作
    •无条件转移(JMP)、条件转移(BRANCH)、调用(CALL)、返回(RETURN)、陷阱(Trap)等。
    建D调用指令和转移指令的区别:执行调用指令时必须保存下一条指令的地址(返回地址),当子程序执行结束时,根据返回地址返回到主程序继续执
    行;而转移指令则不返回执行。
    输入输出类(I/O):进行CPU和I/O设备之间的数据传送
    5. 输入输出操作
    • CPU寄存器与IO端口之间的数据传送(端口即IO接口中的寄存器)。
    4.2指令的寻址方式
    寻址方式是指寻找指令或操作数有效地址的方式,即确定本条指令的数据地址及下一条待执行指令的地址的方法。寻址方式分为指令寻址和数据寻址两大
    类。寻找下一条将要执行的指令地址称为指令寻址;寻找操作数的地址称为数据寻址。
    一、 指令寻址
    顺序寻址
    .通过程序计数器(pc)加1 (1个指令字长),自动形成下一条指令的地址。
    。此处的”r要理解为1个指令字长。
    °每次取指令结束后,一定会PC+ “1”。
    跳跃寻址
    .跳跃寻址通过转移类指令实现。所谓跳跃,是指下条指令的地址码不由程序计数器给出,而由本条指令给出下条指令地址的计算方式。
    10是否跳跃可能收到状态寄存器和操作数的控制,而跳跃到的地址分为绝对地址(由标记符直接得到)和相对地址(相对于当前指令地址的偏移
    量),跳跃的结果是当前指令修改PC值,所以下1指令仍然通过程序计数器(PC)给出。
    二、 数据寻址
    数据寻址是指如何确定本条指令的地址码指明的真实地址。
    隐含寻址
    不明显地给出操作数的地址, 而是在指令中隐含着操作数的地址。
    优点:有利于缩短指令字长。
    缺点:需増加存储操作数或隐含地址的硬件。
    立即寻址
    这种类型的指令的地址字段指出的不是操作数的地址,而是操作数本身,又称立即数。数据采用补码形式存放,#表示立即寻址特征。
    立即寻址特征
    | OP j # 一 A
    立即数
    优点:指令执行阶段不访问主存,指令执行时间最短。
    缺点:A的位数限制了立即数的范围。(如A的位数为n,且立即数采用补码时,可表示的数据范围为-2n-1~2n_1-1)
    直接寻址
    指令字中的形式地址A就是操作数的真实地址EA,即EA=A o
    优点:简单,指令执行阶段仅访问一次主存,不需专门计算操作数的地址。
    缺点:A的位数决定了该指令操作数的寻址范围,操作数的地址不易修改。
    间接寻址
    指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址,即EA=(A) o
    间接寻址可以是一次间接寻址,还可以是多次间接寻址。
    图中,主存字第一位为1时,表示取出的仍不是操作数的地址,即多次间址;主存字第一位为0时,表示取得的是操作数的地址。
    优点:可扩大寻址范围(有效地址EA的位数大于形式地址A的位数)。便于编制程序(用间接寻址可以方便地完成子程序返回)。
    缺点:指令在执行阶段要多次访存(一次间址需两次访存,多次寻址需根据存储字的最高位确定几次访存),访问速度过慢,并不常用。
    寄存器寻址
    在指令字中直接给出操作数所在的寄存器编号,即EA =RjZ其操作数在由Rj所指的寄存器内。
    优点:指令在执行阶段不访问主存,只访问寄存器,因寄存器数量较少,对应地址码长度较小,使得指令字短且因不用访存,所以执行速度快,支持向量/
    矩阵运算。
    缺点:寄存器价格昂贵,计算机中寄存器个数有限。
    寄存器间接寻址
    寄存器&中给出的不是一个操作数,而是操作数所在主存单元的地址,即EA=(R.)。
    寻址特征
    特点:与一般间接寻址相比速度更快,但指令的执行阶段需要访问主存(因为操作数在主存中)。