Skip to content

模型Model

指令集的架构状态与转移

Instruction-set architecture state · ISA state transition

以 RV32I 的五条指令定义 PC、寄存器与字节内存的顺序转移,分开 ISA 契约和实现周期。

形式陈述 ​

先固定程序能观察什么 ​

指令集架构(ISA)给出机器指令对架构状态的作用。本页选取 RISC-V 文档 v20260120 中 RV32I 2.1 的 add/addi/lw/sw/beq,定义正常执行教学片段:状态为 (PC,X,M),PC 和 X[0..31] 为32位,X[0]=0,M 按字节寻址。指令地址四字节对齐,数据访问有效且四字节对齐,内存选择小端。不含异常、并发、设备和自修改代码。

记 sext12 为把12位立即数符号扩展为32位,low32 为保留低32位,L(M,a)=∑i=03M[a+i]28i。正常转移如下,未提及的状态不变,写 x0 被丢弃:

指令 数据效果 下一 PC
add rd,rs1,rs2 X[rd]←low32(X[rs1]+X[rs2]) PC+4
addi rd,rs1,imm X[rd]←low32(X[rs1]+sext12(imm)) PC+4
lw rd,imm(rs1) X[rd]←L(M,a) PC+4
sw rs2,imm(rs1) 把 X[rs2] 的四个字节小端写至 a PC+4
beq rs1,rs2,off 两寄存器位串相等时跳转 相等为 PC+off,否则 PC+4

这里 load/store 的 a=low32(X[rs1]+sext12(imm));PC计算也取低32位。分支偏移 off 是从B格式重组并符号扩展得到的有符号偶数字节偏移。本页例子不触及地址环绕。

直觉

ISA 描述“一条指令完成后,该看见什么”,不描述指令内部必须经过几级,也不承诺每条指令只花一周期。抽象机器的状态—转移思想在这里具体化为可编码的寄存器和内存动作。

定宽模加法决定算术结果,控制流决定下一条指令地址,两者都属于架构契约。缓存标签、旁路多路器和流水级寄存器是实现状态;程序通常不能把它们直接当 ISA 寄存器读写。

例子与边界

按一条指令一次转移复算 ​

初始 PC=0,X[1]=0x100,其他非零号寄存器为零,M[0x100..0x103]=[7,0,0,0]。代码为:

0x00: lw   x2,0(x1)
0x04: add  x3,x2,x2
0x08: sw   x3,4(x1)
0x0c: beq  x3,x0,+8
0x10: addi x4,x3,-1

五次顺序转移分别得到:x2=7;x3=14;地址 0x104..0x107 为 [14,0,0,0];分支不跳、PC成为 0x10;x4=13、PC成为 0x14。最后停止观察只是片段结束,不是把 0x14 定义成一条 halt 指令。

若初始被加载的字为零,前三条数据结果也为零,分支便从自身PC 0x0c 跳到 0x14,跳过最后一条。错误地用 PC+4+off 计算目标,会跳到 0x18;这是可直接检测的语义错误。

x0 丢弃结果,不丢弃操作 ​

add x0,x1,x1 完成后 x0 仍为零。可是 lw x0,0(x1) 仍是一次 load;在完整 ISA 中,不能因目的寄存器为零便取消应有的异常或其他规定效果。本页仅排除了这些特殊情形,没有把它们定义成不存在。

推论与应用

单周期数据通路和五级流水线可实现同一份转移契约。比较二者的正确性应比较正常执行的指令效果,而不是要求每个内部时钟边沿都对应一次 ISA 转移。

Word-RAM提供另一种目的的抽象:它为字级操作计分析成本。ISA 页固定可执行行为,流水页固定教学时序,成本模型固定计费方式,三者不可互相代替。

参考资料
  • RISC-V International,RV32I Base Integer Instruction Set, Version 2.1,固定文档版 v20260120,§1.1.1、§1.1.4–1.1.6;本文只取五条指令的正常执行子集。
  • David A. Patterson and John L. Hennessy, Computer Organization and Design RISC-V Edition, 2nd ed., 2021,Chs. 2, 4。小端、有效地址范围和片段停止方式是本文明示的教学环境选择。
关系图谱22 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组