计算机组成:指令系统

153 阅读3分钟

日新计划6月更文 Day 24

  我们知道,不同企业和组织设计了不同的指令集(Instruction Set),用于不同类型的CPU,如 Intel 的x86、IA64;IBM 的 PowerPC;AMD 的 amd64 ;RISC-V等。评价一个指令集的优劣需要看它是否便于硬件设计、是否便于编译器实现、性能、功耗与成本等因素。

  一个指令系统应满足完备性、规整性、有效性、兼容性和可扩展性:

  • 完备性:指令丰富、功能齐全
  • 规整性:包括对称性(支持不同寻址方式)和匀齐性(支持不同数据类型)
  • 有效性:基于该指令集的程序可以使用
  • 兼容性:对新版的指令集或主机向上兼容

   表示一条指令的机器字,称为指令字,简称指令。一条指令需要具备操作码、寻址方式和地址码:

  • 操作码:Operation Code(OP),指出要进行的操作,即指令编号
  • 地址码:Address Code(AC),与寻址方式共同给出操作数
  • 寻址方式:Mode,如何解析地址码,可包含在地址码字段,也可隐含在操作码字段

  指令中包含二进制数的位数称为指令字长度,根据指令字长度是否固定,指令可分为定长指令与变长指令:定长指令结构简单,如 MIPS 指令;变长指令灵活,如 x86 指令。

  寻找指令或操作数有效地址的过程成为“寻址”,根据寻找的对象分为指令寻址和操作数寻址:

  程序对应的机器指令序列在主存顺序存放,执行时从第一条指令开始执行,同时使用程序计数器(Program Counter,PC)记录正在执行的指令,默认情况下执行完成后 PC++,执行下一条指令,这就是指令的顺序寻址

  对于循环、分支判断等情况,则是由指令给出下一条指令的地址,直接重写 PC,达到跳跃寻址的目的。

  操作数寻址则较为复杂,若实际有效地址为 EA, 实际操作数 S,则 S = (EA)。操作数寻址有以下几种情况:

  • 立即寻址:地址码字段是操作数本身,S = D

  • 寄存器寻址:操作数在CPU的内部寄存器中,EA = R

  • 直接寻址:地址码字段直接给出操作数在内存的地址,EA = D,S = (D)

  • 间接寻址: D单元的内容是操作数地址, D是操作数地址的地址, EA = (D),S = ((D))

    有指针内味了啊

  • 寄存器间接寻址:D单元的内容是操作数的地址,D是操作数地址的地址,EA = (R),S = ((R))

  • 相对寻址:指令中的D加上PC的内容作为操作数的地址,EA = (PC) + D

  • 基址寻址/变址寻址:操作数地址为基址/变址寄存器+偏移量,EA = (R) + D