Bonky Zhu
If someone is able to show me that what I think or do is not right, I will happily change, for I seek the truth, by which no one was ever truly harmed. It is the person who continues in his self-deception and ignorance who is harmed.

计算机组成 – 指令系统

机器指令

一般格式如下:

image-20191206154950946

操作码

  • 长度固定:用于指令字长较长的情况 ,RISC(精简指令集)
  • 长度可变:操作码分散在指令字的不同字段中
  • 扩展操作码技术: 三地址指令操作码每减少一种

地址码

四地址

image-20191206160006352

三地址

image-20191206160121004

二地址

image-20191206160235894

一地址

image-20191206160349328

零地址

无地址码

指令字长

image-20191206160708865

  • 指令字长固定:有指令字长 = 存储字长(可以理解为一个内存单元长度)
  • 指令字长可变:注意,变化的倍数也是字节的倍数。

我们还可以用一些硬件资源(主要是寄存器)代替指令字中的地址码字段,这样做可以:

  • 可扩大指令的寻址范围
  • 可缩短指令字长
  • 可减少访存次数

操作和操作数

存放方式

对于一次能处理多个字节的CPU,必然存在着如何安排多个字节的问题,也就是大端和小端模式。以 int 类型的 0x12345678 为例,它占用 4 个字节,如果是小端模式(Little-endian),那么在内存中的分布情况为(假设从地址 0x 4000 开始存放):

内存地址 0x4000 0x4001 0x4002 0x4003
存放内容 0x78 0x56 0x34 0x12

如果是大端模式(Big-endian),那么分布情况正好相反:

内存地址 0x4000 0x4001 0x4002 0x4003
存放内容 0x12 0x34 0x56 0x78

我们的 PC 机上使用的是 X86 结构的 CPU,它是小端模式;51 单片机是大端模式;很多 ARM、DSP 也是小端模式。

边界对准

image-20191206162557179

边界未对准

image-20191206162707305

寻址方式

指令寻址

  • 顺序:PC + 1
  • 跳跃:由转移指令指出

数据寻址

image-20191206203651443

立即寻址:指令执行阶段不访存

image-20191206211406843

直接寻址:内存中地址由 A 给出,执行阶段访问一次存储器,因为 A 写死了,操作数的地址不易修改

image-20191206211439215

隐含寻址:操作数地址隐含在操作码或某个寄存器中(如8086中,乘法 MUL 隐含 DX 和 AX)

屏幕快照 2019-12-06 下午9.15.55

间接寻址:执行指令阶段 2 次访存,可扩大寻址范围,然后我们可以通过修改内存,然后修改操作数,便于编写程序。

屏幕快照 2019-12-06 下午9.18.04

寄存器寻址:第一,执行阶段不访存,只访问寄存器,执行速度快。其次,寄存器个数有限,可缩短指令字长。

image-20191206212249552

寄存器间接寻址:便于编制循环程序

image-20191206212301152

基址寻址,变址寻址:其实都差不多,只不过一个是基址寄存器,一个是变址寄存器。

屏幕快照 2019-12-06 下午9.23.35


相对寻址:

image-20191206220403608

堆栈寻址:进桟 (SP)-1→SP ,出栈 (SP)+1→SP

指令格式

考虑因素

  1. 指令条统的兼容性(与以前的指令兼容)
  2. 操作类型,数据类型,指令格式,寻址方式,寄存器个数

举例

RISC 精简指令集计算机

  • RISC(Reduced Instruction Set Computer)
  • CISC(Complex Instruction Set Computer)

特征

  • 选用使用频度较高的一些简单指令, 复杂指令的功能由简单指令来组合
  • 长度固定、指令格式种类少、寻址方式少
  • 只有 LOAD / STORE 指令访存
  • 采用流水技术一个时钟周期内完成一条指令
  • 采用组合逻辑实现控制器(即使用硬件,而非微程序存储)

比较

  1. RISC更能充分利用 VLSI 芯片(超大规模集成电路)的面积
  2. RISC 更能提高计算机运算速度指令数、指令格式、寻址方式少, 通用寄存器多,采用组合逻辑,便于实现指令流水
  3. RISC 便于设计,可降低成本,提高可靠性
  4. RISC 有利于编译程序代码优化
  5. RISC 不易实现指令系统兼容(比较难增加指令)
Share

You may also like...

发表评论