是什么
-
定义:CISC(复杂指令系统计算机) 采用变长指令字结构与丰富的寻址方式,指令功能复杂,微程序控制为主;RISC(精简指令系统计算机) 采用定长指令字结构,仅 Load/Store 指令访存,硬布线控制为主。
-
大白话:CISC 像瑞士军刀(一条指令能直接在内存上寻址做运算,每条指令长度按需分配);RISC 像基础手术刀(每条指令严格统一长度,运算全进寄存器搞定)。
核心内容
1. RISC 与 CISC 的全方位辨析与典型代表
| 架构类型 | 典型代表芯片 / 架构 | 指令字长特征 | 访存与寄存器特征 | 控制器实现 |
|---|---|---|---|---|
| CISC | x86 架构(Intel 8086、IA-32、x86-64)、IBM 370、VAX-11 | 变长(不固定)(如 1~15 字节) | 绝大多数指令可直接访存;寄存器数量少 | 大多采用微程序控制器 |
| RISC | ARM、MIPS、RISC-V、PowerPC、SPARC | 定长(严格固定)(通常均为 4 字节/32 位) | 仅 Load/Store 能访存;通用寄存器多( 个) | 大多采用硬布线控制器(流水线友好) |
为什么机器码字节数长短不一?(以 x86 为例)
按字节编址下,1 个十六进制双字符(如 55)占用 1 个字节(8 位)。指令长度取决于该指令的组成字段多少:
-
55占 1 字节(push ebp):单字节单操作数指令。x86 将操作码(Push)与操作数(寄存器ebp的编号)直接融合编码进这 1 个字节0x55中,无需额外的寻址方式字节或偏移量,故仅占 1B。 -
C3占 1 字节(ret):零操作数指令。只有操作码自身,无任何操作数或地址字段,故仅占 1B。 -
39 4D F4占 3 字节(cmp dword ptr [ebp-0Ch], ecx):复合寻址指令。-
39(第 1 字节):操作码(Opcode),表示cmp 内存操作数, 寄存器。 -
4D(第 2 字节):ModR/M 寻址特征字节,指明基址寻址[ebp + disp8]及源寄存器ecx。 -
F4(第 3 字节):8 位偏移量(Displacement),即补码-12(-0x0C对应的补码正是0xF4)。 -
各字段拼接共 3 字节,此即 CISC 变长指令字的典型成因。
-
2. 标志位 的计算逻辑与题型通用解法
在 408 体系中,算术逻辑单元(ALU)统一采用补码加法器实现加减法运算:
-
(零标志):运算结果全部为 0 时 。
-
(符号标志):运算结果最高位(符号位)为 1 时 。
-
(溢出标志):针对有符号数,。
-
(进位/借位标志):针对无符号数。
cmp A, B 题型固定求解三步法
cmp A, B 硬件底层执行 并置标志位(不回写差值结果):
-
写出无符号数机器码:
-
关注变量是否为
unsigned。 -
若出现 ,在 位无符号数中会发生负向下溢,结果为最大值 (32 位下为十六进制
0xFFFFFFFF)。
-
-
减法转补码加法:(取反加一,负数符号位也会取反所以变成正数)
-
判定 结论(双向验证法):
-
概念法(直接比大小):比较无符号数的大小。若 (被减数小于减数),必向更高位借位,故 ====;若 ,无借位,====。
-
硬件加法器逻辑(进位取反):硬件在执行减法加补码时,借位定义为 ====。若最高位进位 ,则借位 ;若 ,则 。
-
例题
-
题目:
在按字节编址的计算机 M 上,执行函数片段:
C
int f1(unsigned n) { int sum = 1, power = 1; for (unsigned i = 0; i <= n - 1; i++) { power *= 2; sum += power; } return sum; }对应的部分机器级代码如下:
代码段
; 行号 虚拟地址 机器指令 汇编指令 1 00401020 55 push ebp ... 20 0040105E 39 4D F4 cmp dword ptr [ebp-0Ch], ecx ... 35 0040107F C3 ret-
计算机 M 是 RISC 还是 CISC?为什么?
-
第 20 条指令
cmp通过 减 实现对 和 的比较。执行 的过程中,当 时,cmp指令执行后,进位/借位标志 的内容是什么?要求给出计算过程。
-
-
分析:
-
观察机器指令:
55占 1 字节,39 4D F4占 3 字节,指令字长不固定,为典型 CISC 特征。 -
当 时,32 位无符号数 。,
cmp执行 。被减数小于减数产生借位,。
-
-
答案:
1)
CISC。
理由:指令字长不固定(如
push ebp占 1 字节,cmp指令占 3 字节,ret占 1 字节),符合复杂指令系统计算机(CISC)的特征。2)
当执行 时,。
为 32 位无符号整数, 发生下溢,机器数表示为十六进制
0xFFFFFFFF(即无符号数 )。当 时,第 20 条指令执行 。
计算机内部将其转化为补码加法运算:
加法运算最高位进位输出 。
减法运算的借位标志:
(或:作为无符号数减法,被减数 小于减数 ,产生了借位)。
的内容为 1。
⚠️ 易错点
Warning
混淆机器码长度与字长 → 一个十六进制字符占 4 位,两个十六进制字符占 1 字节(8 位)。
55是一字节,39 4D F4是三字节。RISC 的指令在机器码上长度严格相同(如 MIPS 汇编每条指令都固定输出 8 个十六进制字符/4 字节)。减法中进位 与借位 的反向关系 → 加法时 ;但做减法时,硬件加法器最高位产生进位()代表不需要向外借位(),没有进位()才代表发生借位()。
无符号数减法下溢 →
unsigned变量运算没有负号。在 32 位无符号数中, 不是 ,而是最大正整数 (0xFFFFFFFF)。