前言

计算机组成原理的知识抽象、晦涩、不易理解并记忆,在此对“指令系统”一章中重点知识总结成提纲


指令系统的组成

组件由大到小(大包含小)依次为:

  • 指令集
  • 指令
  • 操作码+地址码(寻址特征+形式/有效地址)
  • 二进制代码

指令的格式

  • 零地址指令
  • 一地址指令
  • 二地址指令
  • 三地址指令
  • 四地址指令

或:

  • 定长操作码指令
  • 扩展操作码指令

指令的操作类型

  • 数据传送类型
  • 算术和逻辑运算类型
  • 移位类型
  • 转移类型
  • 输入输出类型

或:

  • 数据传送类型
  • 运算类型(算术和逻辑运算类型+移位类型)
  • 程序控制类型
  • 输入输出类型

寻址方式的类型

  • 指令寻址
  • 数据寻址

指令寻址的方式

  • 顺序寻址
  • 跳跃寻址

数据寻址的方式

名词注释:

  • 有效地址:EA
  • 地址/地址码:A
  • (A):地址A中的值
  • 寄存器:R
  • 程序计数器:PC
  • 基址寄存器:BR
  • 变址寄存器:IX
  • 堆栈指针:SP
数据寻址方式 有效地址(EA)
隐含寻址 EA为程序指定
立即(数)寻址 A为操作数
直接寻址 EA=A
间接寻址(一次或多次) EA=(A)(一次)
寄存器寻址(寄存器在中央处理器(CPU)中) EA=R
寄存器间接寻址 EA=(R)(一次)
相对寻址 EA=(PC)+A
基址寻址 EA=(BR)+A
变址寻址 EA=(IX)+A
堆栈寻址 EA=SP

x86处理器中的寄存器

共8个32位的通用寄存器:

  • 累加器(ACC;16位:AX;32位:EAX)
  • 基地址寄存器(BR;16位:BX;32位:EBX)
  • 计数寄存器/程序计数器(PC;16位:CX;32位:ECX)
  • 数据寄存器((M)DR;16位:DX;32位:EDX)
  • 变址寄存器(IX,区别于指令寄存器(IR);ESI,EDI共两个)
  • 堆栈基指针(寄存器)(BP;32位:EBP)
  • 堆栈顶指针(寄存器)(SP;32位:ESP)

除堆栈基指针(寄存器)(BP)和堆栈顶指针(寄存器)(SP),其他寄存器的用途比较任意


汇编指令的格式

  • AT&T格式
  • Intel格式

常用汇编指令

数据传送指令

  • mov:移动
  • push:入栈
  • pop:出栈

算术和逻辑运算指令

  • add:加法
  • sub:减法
  • inc:自增1
  • dec:自减1
  • imul:乘法
  • idiv:除法
  • and:逻辑与
  • or:逻辑或
  • xor:逻辑异或
  • not:取反
  • neg:取负
  • shl:逻辑左移
  • shr:逻辑右移

控制流指令

  • jmp:无条件跳转
  • je:相等条件跳转
  • jne:不相等条件跳转
  • jz:结果为0条件跳转
  • jg:大于条件跳转
  • jge:大于等于条件跳转
  • jl:小于条件跳转
  • jle:小于等于条件跳转
  • cmp:值比较
  • test:逐位与比较
  • call:调用
  • ret:返回

过程/函数调用执行步骤(汇编、机器级底层表示)

  1. 调用者将入口参数(实参)保存在被调用者能够访问的地方

调用者保存寄存器:累加器(ACC;16位:AX;32位:EAX)、计数寄存器/程序计数器(PC;16位:CX;32位:ECX)、数据寄存器((M)DR;16位:DX;32位:EDX)。被调用者可以访问。
2. 调用者将返回地址保存到被调用者能够访问的地方,将控制转移到被调用者
3. 被调用者保存调用者的现场(通用寄存器(GR)中的内容),为自身的非静态局部变量分配空间
4. 执行被调用者过程
5. 被调用者恢复调用者的现场,将返回结果保存在调用者能够访问的地方,释放非静态局部变量所占空间

被调用者保存寄存器:基地址寄存器(BR;16位:BX;32位:EBX)、变址寄存器(IX,区别于指令寄存器(IR);ESI,EDI共两个)。调用者可以访问。
6. 被调用者从被调用者能够访问的地方取出返回地址(能够返回到调用者的地址),将控制转移到调用者


过程/函数栈帧

假设存在过程/函数A调用B,B调用C,分别称为:调用者(A),当前调用者(B),被调用者(C)。
则对过程/函数B的栈帧,从高到低地址依次为:

  • 返回调用者(A)地址

从堆栈基指针(寄存器)(BP;32位:EBP)中获取返回调用者(A)地址并压栈。
将返回当前调用者(B)地址保存在堆栈基指针(寄存器)(BP;32位:EBP)。
即更新堆栈基指针(寄存器)(BP;32位:EBP)中保存的值。

  • 局部变量

定义局部变量时分配空间并压栈。
初始化、赋值时从寄存器中获取值并保存到栈中。

  • 参数

依据高级语言的函数调用语句,将被调用者(C)所需的参数按从右到左的顺序压栈

  • 返回当前调用者(B)地址

将返回当前调用者(B)地址保存在堆栈顶指针(寄存器)(SP;32位:ESP)中

注意:
存在因内存对齐而分配,却可能未被使用的空间。
存在不作为被调用者参数,在将寄存器中的值赋值给局部变量前需要保存的寄存器初始值的空间。

总之,过程/函数栈帧概念、图解众说纷纭,核心在于知道栈帧中保存的内容和过程/函数调用过程,不必深究从高到低地址一一对应的所保存内容。


指令系统的类型

  • 复杂指令系统计算机(CISC)。如x86架构的计算机
  • 精简指令系统计算机(RISC)。如ARM、MIPS架构的计算机

机器标志位

由中央处理器(CPU)中相应的条件码/标志位寄存器存储:

  • CF:进、借位标志
  • ZF:零标志
  • NF/SF:负数/符号标志
  • OF:溢出标志

总结

计算机组成原理的知识抽象、晦涩、不易理解并记忆,在此对“指令系统”一章中重点知识总结成提纲


参考资料

  • 《2023年计算机组成原理考研复习指导》组编:王道论坛
  • 哔哩哔哩平台《王道计算机考研 计算机组成原理》视频课

作者的话

  • 感谢参考资料的作者/博主
  • 作者:夜悊
  • 版权所有,转载请注明出处,谢谢~
  • 如果文章对你有帮助,请点个赞或加个粉丝吧,你的支持就是作者的动力~
  • 文章在描述时有疑惑的地方,请留言,定会一一耐心讨论、解答
  • 文章在认识上有错误的地方, 敬请批评指正
  • 望读者们都能有所收获