• 前一篇文章分析了指令系统(ISA)的设计方法,这里以IA-32指令系统为例进行分析
  • 前文链接:​​计算机组成原理(4.1)—— 指令系统设计​​

文章目录

  • ​​一、IA-32架构基础​​
  • ​​二、操作数类型和表示方式​​
  • ​​1. 操作数类型​​
  • ​​2. 操作数表示方式​​
  • ​​三、指令格式​​
  • ​​1. 前缀段​​
  • ​​2. 指令段​​
  • ​​四、寻址方式​​
  • ​​1. 操作数的来源​​
  • ​​2. 指令中必须给出的信息​​
  • ​​3. 寻址方式​​
  • ​​4. 寻址过程​​
  • ​​5. 示例​​
  • ​​五、MMX指令技术​​

一、IA-32架构基础

  • 泛指:基于英特尔IA-32架构的32位微处理器
  • 特点:向下兼容
  • 并行化程度:流水线
  • 处理器位数:32
  • 三种工作方式:
  1. 保护方式(包含一种子工作方式:虚拟8086方式)
  2. 实地址方式
  3. 系统管理方式
  • 指令集类型:CISC(IA-32是CISC类型的指令集的典型代表)
  • 寄存器配置
  1. 8个32位通用寄存器
  • 用于存储数据、参与算数逻辑运算、给出存储单元地址
  • 变长寄存器:可以用作32位寄存器,也可拆为16位和8位寄存器使用
  • 详见:​​IA-32汇编语言笔记(2)—— IA32处理器及其寄存器​​
  1. 6个段寄存器
  • 段寄存器存放着当前使用的逻辑地址中的段号(实模式下是段值;保护模式下是段选择子),用于获得段起始地址
  • 利用段寄存器存储段起始地址,就好像在连续的内存地址空间中打了几个标签,这样我们就可以把内存划分为若干逻辑段,可以实现代码和数据的隔离,也有利于实现程序的重定位。
  • 任一个段起始地址加上段内偏移量(有效地址),都可以访问到整个内存空间。因此各个逻辑段之间可以有重叠;甚至可以所有段寄存器都写成一样的值,不进行分段(整个内存为一个段),这样写起程序来更方便
  • 我个人认为,段寄存器的存在就是为了方便程序员写程序,因为其实只要有一个寄存器存段号就可以实现访存,更多的段寄存器只是为了在逻辑上进行一些划分
  • 段寄存这部分涉及到IA-32架构下的寻址的具体物理过程,后面再具体总结
  • 可以参考我以前的两篇文章:
  • ​​IA-32汇编语言笔记(4)—— 段寄存器 & 寻址方式​​
  • ​​我理解的物理地址、虚拟地址、逻辑地址​​
  1. 1个标志寄存器
  • 标志寄存器是IA-32和MIPS的一大区别,上一篇文章已经说明过:​​计算机组成原理(4.1)—— 指令系统设计​​
  • 还可参考:​​IA-32汇编语言笔记(3)—— 简单传送、加减指令 & 标志寄存器​​

二、操作数类型和表示方式

1. 操作数类型

计算机组成原理(4.2)—— IA-32指令系统(CSIC)_指令系统

2. 操作数表示方式

计算机组成原理(4.2)—— IA-32指令系统(CSIC)_寄存器_02

三、指令格式

  1. 指令字长度:变长指令字,长1~15字节
  2. 操作码长度:变长操作码编码,长1~2字节
  3. 一条指令由两部分组成:​​前缀段+指令段​​,其中前缀段可以没有

1. 前缀段

  • 前缀段位于指令操作码(指令段)之前,但不是每条指令都有
  • 前缀段格式
  • 四种前缀类型

2. 指令段

  • 指令段:指出操作类型、给出操作数或操作数地址
  • 指令段格式:
  • 计算机组成原理(4.2)—— IA-32指令系统(CSIC)_ISA_03


  • 各字段说明
  • 计算机组成原理(4.2)—— IA-32指令系统(CSIC)_寄存器_04


四、寻址方式

1. 操作数的来源

计算机组成原理(4.2)—— IA-32指令系统(CSIC)_ISA_05

2. 指令中必须给出的信息

计算机组成原理(4.2)—— IA-32指令系统(CSIC)_IA-32_06

3. 寻址方式

  • IA-32寻址方式
  • 计算机组成原理(4.2)—— IA-32指令系统(CSIC)_IA-32_07


  • 对比上篇文章 计算机组成原理(4.1)—— 指令系统设计 中给出的一般设计规则,IA-32中除了立即寻址、寄存器寻址等,提供了很丰富的偏移寻址方式
  • 存储单元的有效地址(即段内偏移地址)可以由三部分内容相加构成(可省去任意两部分)
    1. 一个32位基地址寄存器
    2. 一个可乘上比例因子1/2/4/8的32位变址寄存器
    3. 一个8/16/32位位移量

计算机组成原理(4.2)—— IA-32指令系统(CSIC)_IA-32_08

  • 这印证了上篇文章指出的:一般RISC机器不提供自动变址寻址,并将变址和基址寻址统一成一种 “偏移寻址方式”

  • 详见:IA-32汇编语言笔记(4)—— 段寄存器 & 寻址方式

4. 寻址过程

  1. 实方式下的寻址过程
  2. 计算机组成原理(4.2)—— IA-32指令系统(CSIC)_ISA_09


  3. 保护方式寻址过程
  4. 计算机组成原理(4.2)—— IA-32指令系统(CSIC)_指令系统_10


5. 示例

  • 现在要存储如下操作数

    int x;
    float a[100];
    short b[4][4];
    char c;
    double d[10];
  • 内存中存储情况
  • 计算机组成原理(4.2)—— IA-32指令系统(CSIC)_ISA_11

  • 各个变量使用的寻址方式
  • 计算机组成原理(4.2)—— IA-32指令系统(CSIC)_IA-32_12

五、MMX指令技术

计算机组成原理(4.2)—— IA-32指令系统(CSIC)_计算机组成原理_13