是什么

  • 定义:指令格式编码是将汇编语言中的操作码、寻址方式和寄存器编号按照硬件约定的位数与排布规则,转换为二进制机器码的过程;括号标记法则是用来区分直接寻址与间接寻址的数学化表达形式。

  • 大白话:寄存器名字就是编号(几个寄存器就需要几位二进制来编门牌号);指令写出来是“操作 目的, 源”,但背后执行的动作是“源数据算完流向目的”;带单括号 (R) 意味着“寄存器里的值”,带双括号 ((R)) 意味着“拿着寄存器里的值去内存找真实数据”。

核心内容

1. 寄存器编码位数计算

  • 寻址原理:计算机使用二进制编码对通用寄存器进行唯一标识。要区分 个不同的寄存器,所需的最小二进制编码位数 必须满足:

  • 4 寄存器系统(R0~R3)对应关系

    • 00 R0

    • 01 R1

    • 10 R2

    • 11 R3

在数据通路图中,一般带箭头虚线表示控制信号。

2. 寻址方式与括号层级表达

在微操作与指令语义描述中,括号的层数严格代表访问的寻址深度:

  • 无括号(如 R1:表示寄存器本身或寄存器编号。

  • 单括号 (R1):表示读取寄存器 R1 内部存储的数值。在寻址方式对应中,属于 寄存器直接寻址(有效地址就是寄存器)。

  • 双括号 ((R1)) / 汇编 (R1):表示将寄存器 R1 中的值作为主存地址,再去主存中取出真实操作数。在寻址方式对应中,属于 寄存器间接寻址,操作数 )。

3. 指令物理结构与微操作语义流向的本质区别

  • 指令格式与汇编书写(物理结构排布)

    • 机器码排布及汇编代码均遵循 目的操作数在前、源操作数在后 的顺序。

    • 标准格式:操作码 (OP) | 目的操作数 (Md, Rd) | 源操作数1 (Ms1, Rs1) | 源操作数2 (Ms2, Rs2)

    • 例如:shl R2, R1 的字段结构为:

  • 微操作语义描述(数据执行流向)

    • 题目解析中书写的 (R1) << 1 -> R2 仅是对 运算执行动作与数据流向 的数学化描述(即从右侧源数据流向左侧目的寄存器),绝不是机器码的字段拼装顺序。

是的,下半部分右边那一栏(带箭头 的部分)写的就是执行动作(数据计算与流向)。 它通过数学表达式定义了 CPU 执行这三类指令时的行为: 与下方对应

下图表示: 汇编指令 指令的注释

  • 左边(汇编指令):程序员实际编写的代码,决定机器码的物理排布。

    • 格式固定为:操作码 目的操作数, 源操作数1, 源操作数2

    • 例:sub R3, (R1), R2 表示对 (R1)R2 做减法,结果存入 R3

  • 右边(注释与微操作语义):用数学语言和箭头描述该指令具体执行了什么计算、数据流向哪里

    • 格式固定为:数据计算过程 $\to$ 结果存入的目标位置

    • 例:((R1)) - (R2) -> R3 表示“取 R1 指向的内存数据,减去 R2 寄存器中的数据,结果写入 R3 寄存器”。

例题

  • 题目

    某计算机字长为 16 位,包含 4 个通用寄存器(R0R3,编号分别为 03)。指令格式定义如下:

    OP(7位) | Md(1位) Rd(2位) | Ms1(1位) Rs1(2位) | Ms2(1位) Rs2(2位)

    其中 为寻址方式位,0 表示寄存器直接寻址,1 表示寄存器间接寻址。 为寄存器编号。未使用的字段在低位补 0

    已知减法指令 sub 的操作码为 03H,其微操作语义动作为:

    1. 试分析为什么通用寄存器字段占 2 位。

    2. 请将微操作动作 转换为标准汇编指令,并给出其 16 位十六进制机器代码。

  • 分析

    1. 系统共 4 个寄存器,,因此 2 位二进制即可完全覆盖 4 个寄存器的编号。

    2. 微操作动作中, 为源操作数 1(寄存器间接寻址,寻址位为 1,寄存器为 R1); 为源操作数 2(寄存器直接寻址,寻址位为 0,寄存器为 R2); 为目的操作数(寄存器直接寻址,寻址位为 0,寄存器为 R3)。

    3. 汇编书写规范为 sub Rd, (Rs1), Rs2 sub R3, (R1), R2

    4. 按照字段物理排布顺序 OP | Md Rd | Ms1 Rs1 | Ms2 Rs2 进行二进制拼接。

  • 答案

    1. 寄存器位数计算

      通用寄存器数量 ,由 可得最小编码位数 位,故通用寄存器字段需占 2 位。

    2. 汇编指令与机器码

      • 标准汇编:sub R3, (R1), R2

      • 字段解析:

        • OP = 0000011 (03H)

        • Md Rd = 0 (直接寻址) + 11 (R3)

        • Ms1 Rs1 = 1 (间接寻址) + 01 (R1)

        • Ms2 Rs2 = 0 (直接寻址) + 10 (R2)

      • 二进制拼接:0000 0110 1110 1010

      • 十六进制机器码:06EAH

⚠️ 易错点

Warning

  • 混淆微操作箭头方向与指令字段位置

    • 极易误将 (R1) -> R2 理解为“机器码先填 R1 再填 R2”。

    • 正确逻辑:机器码字段完全由硬件格式决定,固定先填目的操作数(R2),再填源操作数(R1);箭头仅仅是描述“数据从哪流到哪”。

  • 括号与寻址方式的对应混淆

    • 在汇编代码中:R1 表示寄存器直接寻址;(R1) 表示寄存器间接寻址。

    • 在微操作数据通路描述中:(R1) 表示取寄存器 R1 中的内容;((R1)) 表示以 R1 中的内容为主存地址进行访存(即寄存器间接寻址对应的数据)。切勿把微操作中的 (R1) 误当成间接寻址。