文章目录
- 考纲
- 第四章 指令系统
- 4.1 指令格式
- 4.2 指令的寻址方式
- 4.3 程序的机器级代码表示
- 4.4 CISC和RISC的基本概念
- 【※】扩展码指令计算
- 【※】指令系统【指令格式】
- 【※】指令的寻址方式
- 【※】指令的机器级代码表示
- x86汇编指令(重点关注 intel 格式)
- MIPS 汇编指令
- 【※】转移指令的基本过程
- 【※】解题方法
- 先观察汇编语⾔,是x86还是MIPS?
- x86
- MIPS
- AT&T vs Intel
- CISC和RISC
考纲
第四章 指令系统
本章通常在小题中考察,在大题中可能作为题目条件,或者仅作为大题的某个小问来考察。理解本章(特别是4.1、4.2小节)对于读懂计组大题至关重要。王道书的4.3部分(程序的机器级代码表示)是2022年大纲新增的内容。由于涉及到汇编语言相关知识,因此该部分对跨考同学来说是一块硬骨头。但请大家放心,计组这门课不会深入考察汇编语言,你只需要有个大致的了解,能看懂题目里出现的汇编语言指令即可,不要求你具备手写汇编语言的能力。
4.1 指令格式
- 本节常在小题中考察,或者作为大题的一个小问考察
- 本节难点是“扩展操作码指令格式”,需通过课后习题体会其考法
4.2 指令的寻址方式
- 第四章最重要的一个小节,历年真题中,小题考察过9次,大题考察过5次,值得多花时间
- 在学习进度打卡表中,为大家挑选了几个必做大题,需认真完成,有助于你深入理解各种寻址方式
4.3 程序的机器级代码表示
- 本节是2022年大纲新增考点,但事实上,2017年、2019年就已考过。因此严格来说,这个考点不算全新考点。本科阶段没学过“汇编语言”的同学,建议先看视频、再看王道书,直接硬啃书可能很难理解。
- 2017年、2019年的两个题目已收录在王道书4.3课后习题里,非常具有代表性。由于两个大题也考察了其他章节的知识,因此第一轮复习中可能会看不懂题目,这很正常,莫慌。强化阶段,我们会一起研究这两个题目。
- 汇编语言指令需要能手写吗?——不需要。这门课是“计组”,而不是“汇编语言”,不要求你手写。只要你在题目里看见一条指令,能大致猜出其作用即可。大家可以在一张纸上把课本里的这些汇编指令分类抄下来,但不加注释,以后偶尔拿出来看一眼,看看能不能回忆起每条指令作用,如果回忆不起来,再回去课本里复习。
- 条件转移指令的底层原理很重要,经常结合第二章“CF/SF/ZF/OF标志位的生成”来考察,在视频里会给大家详解介绍,需认真理解。
4.4 CISC和RISC的基本概念
- 本节通常考小题,低频考点,重点理解两种指令集之间的区别即可
- 随着第五章的学习,大家对CISC和RISC的理解会更具体,因此第一轮复习时对本节的一些知识点感觉比较模糊也没关系,第二轮再次复习效果会更好。
【※】扩展码指令计算
指令长度为 n 位,每个地址占 t 位。有 a 条零地址指令,b 条一地址指令,c 条二地址指令,d 条三地址指令,则有式子:
a + b × 2 t + c × 2 2 t + d × 2 3 t ≤ 2 n a + b \times 2^t + c \times 2^{2t} + d \times 2^{3t} \leq 2^n a+b×2t+c×22t+d×23t≤2n
考试考查:
题型一:求 x 地址指令条数
题型二:求指令长度 n,或地址字段位数 t
【※】指令系统【指令格式】
【※】指令的寻址方式
常考点
-
速度方面:立即寻址 > 寄存器寻址 > 直接寻址 > 寄存器间接寻址 > 间接寻址
-
基址寻址和变址寻址的区别
基址寻址 | 变址寻址 | |
---|---|---|
有效地址 | EA = (BR) + A | EA = (IX) + A |
寄存器内容 | 由操作系统或管理程序确定 | 由用户设定 |
程序执行过程中值是否可变 | 不可变 | 可变 |
特点 | 多用于多道程序设计和编制浮动程序 | 有利于处理数组问题和编制循环程序 |
- 程序控制是靠转移指令而非寻址方式实现的。
- 简化地址结构的基本方法是尽量采用隐地址。
- 指令寻址的方式有顺序和跳跃两种,采用跳跃寻址方式可以实现程序的无条件转移和条件转移。
- 指令字表示一条指令的机器字,就称为指令字,通常简称指令。
【※】指令的机器级代码表示
x86汇编指令(重点关注 intel 格式)
MIPS 汇编指令
【※】转移指令的基本过程
取指令
- 根据 PC 取出本条指令
- 修改 PC 为顺序执行的下一条指令地址
- (PC) + “1” -> PC
分析指令
- 检测转移条件是否满足
执行指令
- 大前提:PC 已经 + “1” 了
- 若条件满足,则转移,修改 PC 为目标地址
- 按字节编址【CISC|RISC】:(PC) + 指令字长 × OFFSET(指令条数)
- 按字编址【RISC】:(PC) + OFFSET,此时指令条数 = OFFSET / 指令字长
- PS:CISC 指令集一定是按字节编址的(因为指令的字长不固定)
- OFFSET 是用补码进行表示
- 若条件不满足,则不转移,不需要修改 (PC)
具体某条转移指令的目标地址范围
- 已知具体 (PC),分析出 A 的取值范围为 a1 ~ a2
- 则目标地址范围为 (PC) + a1 ~ (PC) + a2
转移指令的目标地址范围
- 分析 (PC) 和 A 各自的取值范围,得到范围1;
- 分析存储器的地址范围,得到范围2;
- 取范围1和范围2的交集。
【※】解题方法
先观察汇编语⾔,是x86还是MIPS?
x86
- 先搞懂 C 语言
- 基于 C 语言的逻辑分析机器指令
- 分支结构:jxxx 指令
- 循环结构:jxxx 指令、loopxxx 指令
- 函数调用:call 指令、ret 指令
- 需不需要访问函数调用参数?观察在汇编语言中如何访问调用参数?
- 函数调用参数一般在 [ebp+8]、[ebp+12] 等位置
- 需不需要定义局部变量?观察在汇编语言中如何访问局部变量?
- 局部变量的存储地址一般在 [ebp-4]、[ebp-8]、[ebp-12] 等位置
MIPS
-
先搞懂 C 语言
-
基于 C 语言的逻辑分析机器指令
- 有没有分支结构?
- 有没有循环结构?
- 有没有函数调用?
-
考不考流水线?
- 对指令进行分类:五类指令,每一类指令的运行原理要搞清楚
- 安排指令流水线
- 分析数据冒险、控制冒险
AT&T vs Intel