是什么

  • 定义CISC(复杂指令系统计算机) 采用变长指令字结构与丰富的寻址方式,指令功能复杂,微程序控制为主;RISC(精简指令系统计算机) 采用定长指令字结构,仅 Load/Store 指令访存,硬布线控制为主。

  • 大白话:CISC 像瑞士军刀(一条指令能直接在内存上寻址做运算,每条指令长度按需分配);RISC 像基础手术刀(每条指令严格统一长度,运算全进寄存器搞定)。

核心内容

1. RISC 与 CISC 的全方位辨析与典型代表

架构类型典型代表芯片 / 架构指令字长特征访存与寄存器特征控制器实现
CISCx86 架构(Intel 8086、IA-32、x86-64)、IBM 370、VAX-11变长(不固定)(如 1~15 字节)绝大多数指令可直接访存;寄存器数量少大多采用微程序控制器
RISCARM、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 硬件底层执行 并置标志位(不回写差值结果):

  1. 写出无符号数机器码

    • 关注变量是否为 unsigned

    • 若出现 ,在 位无符号数中会发生负向下溢,结果为最大值 (32 位下为十六进制 0xFFFFFFFF)。

  2. 减法转补码加法:(取反加一,负数符号位也会取反所以变成正数)

  3. 判定 结论(双向验证法)

    • 概念法(直接比大小):比较无符号数的大小。若 (被减数小于减数),必向更高位借位,故 ====;若 ,无借位,====。

    • 硬件加法器逻辑(进位取反):硬件在执行减法加补码时,借位定义为 ====。若最高位进位 ,则借位 ;若 ,则

例题

  • 题目

    在按字节编址的计算机 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
    
    1. 计算机 M 是 RISC 还是 CISC?为什么?

    2. 第 20 条指令 cmp 通过 实现对 的比较。执行 的过程中,当 时,cmp 指令执行后,进位/借位标志 的内容是什么?要求给出计算过程。

  • 分析

    1. 观察机器指令:55 占 1 字节,39 4D F4 占 3 字节,指令字长不固定,为典型 CISC 特征。

    2. 时,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)。