概述

  • 机器指令:机器能够识别并执行的命令

  • 指令字:代表指令的一组二进制代码信息

  • 指令字长:指令字中二进制代码的位数

  • 指令集:一台计算机中的所有机器指令的集合

指令系统的研究主要包括数据表示、寻址方式和指令三方面的内容

指令系统应该满足的要求:

  • 完备性:指令齐全,编程方便
  • 高效性:占内存少,运行速度快
  • 规整性:指令与运算规则统一
  • 兼容性:向上兼容

对计算机系统来说:

  • 指令是程序设计的最小单位
  • 指令是硬件设计的依据
  • 指令是软件和硬件的接口

机器指令

指令的一般格式

形如

操作码字段 地址码字段

操作码

操作码反映了机器做什么操作

  1. 长度固定:用于指令字长较长的情况
  2. 长度可变:操作码分散在指令字的不同字段中

地址码

地址码用来指出操作数的地址(源操作数、目的操作数、下一条指令的地址)

设指令字长32位,操作码固定8位

四地址

OP $A_1$ $A_2$ $A_3$ $A_4$

$A_{1-4}$ 每个占6字节

$A_1$第一操作数地址

$A_2$第二操作数地址

$A_3$结果地址

$A_4$下一条指令的地址

$(A_1)OP(A_2)\rightarrow A_3$

四次访存,寻址范围$2^6=64$

三地址

用PC去代替四地址的$A_4$

OP $A_1$ $A_2$ $A_3$

$A_{1-3}$ 每个占8字节

$A_1$第一操作数地址

$A_2$第二操作数地址

$A_3$结果地址

$(A_1)OP(A_2)\rightarrow A_3$

还是四次访存,但是寻址范围变成$2^8=256$

二地址

把$A_3$用$A_1$或者$A_2$代替

OP $A_1$ $A_2$

$A_1,A_2$每个占12字节

$(A_1)OP(A_2)\rightarrow A_1$ 或者 $(A_1)OP(A_2)\rightarrow A_2$

仍然是4次访存,寻址范围是$2^12=4K$

如果把结果存入ACC(累加器),则变成3次访存

一地址

OP $A_1$

$A_1$占24位

$(ACC)OP(A_1)\rightarrow ACC$

2次访存,寻址范围是$2^24=16M$

零地址

即没有地址码的意思

指令字长

指令字长决定于:

  • 操作码的长度

  • 操作数地址的长度

  • 操作数地址的个数

    1. 指令字长固定

      指令字长=存储字长=机器字长

    2. 指令字长可变

      按字节的倍数变化

截屏2024-05-08 14.51.24

操作数类型和操作种类

操作数类型

地址 无符号整数
数字 定点数、浮点数、十进制数
字符 ASCII码
逻辑数 逻辑运算

数据在存储器中的存放方式

下图

截屏2024-05-08 15.11.56

操作类型

数据传送

截屏2024-05-08 15.13.54

算数逻辑操作

截屏2024-05-08 15.14.45

移位操作

  • 算数移位

  • 逻辑移位

  • 循环移位(带进位和不带进位)

转移

  1. 无条件转移 JMP

  2. 条件转移

    1. 结果为零转 JZ (Z=1)
    2. 结果溢出转 JO(O=1)
    3. 结果有进位转 JC(C=1)
    4. 跳过一条指令 SKP
  3. 调用和返回

    截屏2024-05-08 15.19.25

  4. 陷阱(Trap)与陷阱指令

    意外事故中断

    一般是不给用户直接使用的,出现事故的时候由CPU自动产生并执行

  5. 输入输出

    截屏2024-05-08 15.23.00

寻址方式

寻址方式的定义

确定本条指令的操作数地址和下一条欲执行指令指令地址

寻址方式分为

  • 指令寻址
  • 数据寻址

指令寻址

顺序寻址 $(PC)+1 \rightarrow PC$

跳跃 由转移指令指出,见下图

截屏2024-05-08 15.34.26

数据寻址

操作码 寻址特征 形式地址A

形式地址 指令字中的地址

有效地址 操作数的真实地址

约定 指令字长=存储字长=机器字长

立即寻址

形式地址A就是操作数

OP # A

指令执行阶段不访存

A的位数限制了立即数的范围

直接寻址

EA=A 有效地址由形式地址直接给出

截屏2024-05-13 09.21.23

  • 执行阶段访问一次存储器
  • A的位数决定了该指令操作数的寻址范围
  • 操作数的地址不易修改(必须修改A才能修改)

隐含寻址

操作数地址隐含在操作码中

截屏2024-05-13 09.28.12

指令字中少了一个地址字段,可以缩短指令字长

间接寻址

EA=(A) 有效地址由形式地址间接提供

截屏2024-05-13 09.32.25

寄存器寻址

EA=$R_i$

有效地址即寄存器编号

截屏2024-05-13 09.34.04

基址寻址

  1. 采用专用寄存器作基址寄存器

    EA=(BR)+A BR为基址寄存器

    截屏2024-05-13 09.36.14

  2. 采用通用寄存器作基址寄存器

    截屏2024-05-13 09.36.54逻辑地址和物理地址

截屏2024-05-13 09.46.13

变址寻址

截屏2024-05-13 09.49.33

相对寻址

截屏2024-05-13 09.50.56

堆栈寻址

截屏2024-05-13 12.24.27

软件堆栈的三个优点

  1. 可以有较大的深度

  2. 可以设置多个堆栈

  3. 除了专门的堆栈指令PUSH和POP,还可以用任何访问主存的指令来访问堆栈中的数据

    截屏2024-05-13 12.26.21