【总结笔记】指令系统与寻址方式

本部分涵盖:RISC vs CISC辨识、MIPS三大指令格式、硬件参数推导、常见寻址方式、相对寻址与PC更新、大小端判断、标志位分析(ZF/SF/OF/CF)、条件转移指令、乘法溢出、数据通路。


一、RISC vs CISC 快速辨识

特征RISCCISC
指令字长定长(如MIPS固定32位)变长(x86为1~15字节)
访存指令只有Load/Store访存大多数指令可直接访存
寄存器多(≥32个通用寄存器)
控制器硬布线控制器(流水线友好)微程序控制器
典型代表ARM、MIPS、RISC-V、PowerPCx86(Intel/AMD)、IBM 370

判别题眼:看机器码字节数是否固定

  • 固定(每条指令16进制字符数相同)→ RISC
  • 不固定(各条指令字节数不同)→ CISC

x86变长原因:单字节操作码(如55=push ebp)、多字节寻址特征字节(ModR/M)和偏移量按需拼接。


二、硬件参数推导(必考配对关系)

硬件参数对应题干信息计算方式
ALU宽度计算机字长(机器字长)直接等于字长
IR位数指令字长直接等于指令字长
MAR位数地址总线条数等于地址线位数
MDR位数数据总线条数(或存储字长)等于数据线位数;若未指明则等于机器字长
可寻址空间地址线条数 + 编址方式
通用寄存器个数寄存器字段位数

MDR陷阱:若题干明确说”数据总线8位”,MDR=8位,而非机器字长!


三、MIPS三大指令格式(定长32位)

R型(Register,寄存器-寄存器运算)

[ 000000(6位) | rs(源1) | rt(源2) | rd(目标) | op1/funct(功能码) ]
  • 操作
  • 用途:算术逻辑运算(加减与或异或)、寄存器间接跳转(jr rs)

I型(Immediate,立即数/访存/分支)

[ op2(6位) | rs(源) | rt(目标/源) | imm(立即数/偏移量) ]
  • 立即数运算
  • 访存Load/Store,然后
  • 条件分支:比较rs和rt,满足则

J型(Jump,长距离无条件跳转)

[ op3(6位) | target(长地址,剩余所有位) ]
  • 操作(高位保持当前PC高位不变)

操作码扩展(前缀码原理)

  • 高位6位操作码总编码空间:
  • R型占用 000000 一种,内部靠功能码扩展
  • I型与J型最多可用:

四、常见寻址方式速查

寻址方式有效地址EA访存次数核心用途
立即寻址A即为操作数(无EA)0次常数操作,最快
直接寻址EA = A1次访问固定地址全局变量
间接寻址EA = (A)2次(一级)通过地址访问地址
寄存器寻址OPR = (Ri),在寄存器0次最常用,最快
寄存器间接EA = (Ri)1次指针访问
基址寻址EA = (BR) + A1次多道程序/动态重定位
变址寻址EA = (IX) + A1次数组遍历、循环
相对寻址EA = (PC) + A1次分支跳转(PC相对)

区别:基址寻址中基址寄存器BR由OS设定不变,偏移A可变;变址寻址中IX可变,A固定(数组首地址)


五、PC相对寻址(重点!)

关键公式

PC的值:CPU取指后自动 ,所以执行时PC已指向下一条指令!

偏移量计算(已知源地址和目标地址求偏移量):

补码存储:若偏移量为负数(向前跳),需转换为补码存入指令

编址方式判断(看PC自增量):

  • 16位指令,PC+2 → 按字节编址
  • 32位指令,PC+4 → 按字节编址
  • 16位指令,PC+1 → 按字编址

六、大小端判断

方式定义规律
大端(Big-Endian)高位字节存低地址内存中顺序与人类书写顺序相同
小端(Little-Endian)低位字节存低地址内存中顺序与书写顺序相反(x86、ARM常见)

快速判别(以 0x12345678 存在地址 1000H):

地址:  1000H  1001H  1002H  1003H
大端:   12     34     56     78   (高字节在低地址,顺序相同)
小端:   78     56     34     12   (低字节在低地址,顺序相反)

机器码判别法:看偏移量字节在机器码中的顺序。若数值 0xFFFFFFD6 在机器码中排列为 D6 FF FF FF(低位在前)→ 小端


七、标志位分析(ZF / SF / OF / CF)

标志位含义触发条件
ZF(零标志)结果为0运算结果全部为0时 ZF=1
SF(符号标志)结果符号结果最高位为1时 SF=1(即负数)
OF(溢出标志)有符号溢出
CF(进位/借位)无符号进借位加法:最高位进位;减法:

CF的计算(cmp A,B 题型固定三步法)

cmp A, B 底层执行 ,置标志位但不存结果:

  1. 写出无符号机器码(注意 unsigned 0-1 = 2^n-1,不是-1!)
  2. 减法转补码加法
  3. 判定CF
    • 直观法:(无符号比较)→ CF=1 → CF=0
    • 硬件法:加法器最高位 CF=1 → CF=0

条件转移的标志位规则

比较无符号(用CF/ZF)有符号(用SF/OF)
ZF=1ZF=1
CF=1SF⊕OF=1
CF=1 或 ZF=1(SF⊕OF=1) 或 ZF=1
CF=0 且 ZF=0(SF⊕OF=0) 且 ZF=0

八、条件转移指令

指令类型说明常见指令
条件转移检查标志位,满足才跳jlejljgejgje/jzjne/jnzjcjo
无条件跳转必然跳jmp
子程序调用保存返回地址+跳转call
子程序返回从栈弹出PCret
中断返回iret

条件转移范围位偏移量,按字节编址,指令长2字节):


九、乘法溢出判定

位有符号乘法结果为 位,若截断保存为 位:

判定条件:高 位不是低 位符号位的”纯复制”时,溢出。

  • 即:高 位不全为 0 且不全为 1 时 → OF=1(溢出)

代数真值法(考场最直观)

  1. 计算真实结果的十进制值
  2. 看是否落在 位有符号数范围(如16位:
  3. 超出范围 → 溢出

十、二维数组地址计算

数组 type a[M][N],首地址 Base,元素大小 字节:

  • (总行数):不参与元素地址计算,只是循环上限
  • (每行列数):决定行大小,参与计算

十一、立即数的零扩展 vs 符号扩展

场景应用扩展方式原因
有符号算术运算(加减偏移量)符号扩展保持真值不变(负数补1,正数补0)
逻辑操作(AND、OR、按位测试)零扩展高位必须为0,不影响按位结果
访存基址寻址偏移量符号扩展需支持负偏移量(向低地址访问)
无符号数操作零扩展无符号数无符号位概念

十二、高频易错汇总

错误正确做法
MDR宽度默认等于机器字长题干明确数据线位数时,MDR=数据线位数
I/J型操作码数算成64R型占了000000,I/J最多
相对寻址的基准PC是当前指令地址基准PC是下一条指令地址(当前地址+指令长度)
减法中减法:,进位反向才是借位
unsigned 0-1 = -1unsigned 0-1 = (最大无符号数,下溢回绕)
乘法16位结果直接判定溢出算真实十进制,超出才是溢出
M参与数组地址计算数组a[M][N]中M不参与地址计算,只有N参与
大端=低字节在低地址大端=字节在低地址(与书写顺序相同)