2024.06.13:计算机组成原理机器指令学习笔记
第13节 机器指令
- 3.1 指令的作用
- 3.2 指令的格式
- 3.2.1 操作码字段(用户要干什么)
- 3.2.2 (操作数)地址码字段(对谁进行操作)
- 3.2.3 格式分类*(一步步优化)
- (1) 四地址指令
- (2) 三地址指令
- (3) 二地址指令
- (4) 一地址指令
- (5) 零地址指令
- 3.3 指令的字长*
- 3.4 定长操作码与扩展码
- 3.4.1 定长操作码
- 3.4.2 扩展操作码
- 3.5 数据在存储器中的存放位置
- 3.5.1 不进行边界对齐
- 3.5.2 进行边界对齐
指令要好好学习,为了后续CPU的学习做准备
3.1 指令的作用
CPU中运行的指令到底是什么?
- 冯诺依曼机:计算机就是连续执行每一条机器指令而实现全自动工作的
- 进程:进程里面有一部分就是指令的集合,执行进程其实就是在执行一条条指令
- 全部机器指令的集合称为机器的指令系统
计算机的目的就是为了执行指令,执行一条条指令就可以完成我们想要的操作。我们想要达到什么目的,就把它编写成算法,算法在机器内就会被拆解成一步一步的指令去完成
3.2 指令的格式
指令是由机器码和地址码两部分组成的
- 操作码往往写在前面,指示要做什么样的动作,机器就可以读懂
- 地址码其实是记录着这个指令可能用到的操作数它的地址,值得注意的是这里的地址并不一定是它的真实地址或者有效地址
3.2.1 操作码字段(用户要干什么)
- 操作码用来指明该指令所要完成的操作
- 操作码位数反映了机器的操作种类,即机器允许的指令条数
- 操作码占n位,则该机器最多包含2的n次幂条指令
- 操作码长度可以固定也可以变化
怎么变化就是扩展操作码的内容
3.2.2 (操作数)地址码字段(对谁进行操作)
- 地址码用来指出该指令的源操作数的地址、结果的地址以及下一条指令的地址
这里我们是把整个地址码字段划成一个了,那在不同的指令里面,可能有多个地址码,那它就可以分别指示原操作数的地址、结果地址等等
- 这个地址可以是主存地址,也可以是寄存器地址
具体如何要看选址方式
3.2.3 格式分类*(一步步优化)
指令格式:操作码字段(用户要干什么)+地址码字段(对谁进行操作)
- op:指令对应的操作
- A1:第一个地址码字段
- A2:第二个地址码字段
- A3:保存计算结果
- A4:下一条指令的地址码字段
根据一条指令中有几个操作数地址,可将该指令称为几操作数指令或者几地址指令
()表示取地址码所在的存储单元内的信息,或者说取地址里面的值。即加括号取存的信息,不加就取地址信息
(1) 四地址指令
- A1记录了第一个操作数
- A2记录了第二个操作数
- 结果写在A3这个地址
- A4用于指示下一条指令的地址
注意:程序中指令一般按顺序执行,PC可以通过自增自动形成下一条指令的地址,因此A4可以省去
(2) 三地址指令
第一个操作数A1对第二个操作数A2进行OP操作,最终结果写回A3,后续指令的地址就由PC自增得出
思考:什么是PC自增?PC是程序计数器,它用来指示当前你执行的这个指令,它的地址是什么,执行完这条指令,取完这条指令之后,PC就可以自动地去计算下一条执行指令的地址
如果指令运算的结果是中间结果,那么就没有必要每次都放入主存
Why?
假如说有连续的两条指令,第一条指令算的结果,第二条指令还要用,那其实我们没有必要把它写回主存,不然我们执行下一条指令的时候还需要从主存去把它取出来,我们知道寄存器的访问速度是比主存要快的,如果选择访存,效率就会比较低,但是如果我们把中间结果放在寄存器里面,下一次再用的话,访问速度就可以得到提升,可以暂存在CPU的寄存器中。
(3) 二地址指令
对于二地址指令来说,我们可以将一个源操作数隐含在运算器的ACC中
(4) 一地址指令
对于一地址指令,我们还可以直接去掉地址字段,形成零地址指令
(5) 零地址指令
- 空操作NOP、停机HLT这类指令只有操作码
- 子程序返回RET、中断返回IRET这类指令没有地址码,其操作数的地址隐含在堆栈指针SP(实际是寄存器)中
3.3 指令的字长*
- 指令的长度即为指令字长:操作码字段长度+地址码字段长度
- 早期计算机中,指令长度 == 机器字长 == 存储字长
访问某个存储单元即可取出一条完整的指令
- 随着计算机的发展,现代计算机的机器字长 > 存储字长,而指令长度取字节的整数值
如果按字节编址,访问多个存储单元才可取出一条完整的指令
3.4 定长操作码与扩展码
3.4.1 定长操作码
指令字的最高位部分分配固定的若干位表示操作码
3.4.2 扩展操作码
- 指令的操作码字段的位数不固定,操作码的长度随地址码的减少而增加
- 不同地址码指令具有不同长度的操作码,从而在满足需要的前提下有效缩短指令字长
看图悟,BOK老师的图画得特别清晰
留下1111这种编码作为扩展窗口,和后面的4位组成8位的操作码字段,让机器能够识别出这是二地址指令
- n地址指令的操作码字段拿出(若干种编码)来表示此时应按n-1地址指令来解释这些编码叫做扩展窗口
注意:扩展操作码一定是从多地址指令往低地址指令去扩展的
3.5 数据在存储器中的存放位置
操作数的一个关键知识点:数据在存储器中的一个存放方式,其实就是边界对齐
3.5.1 不进行边界对齐
- 每一个数据的起始位置是不做限制的
- 按字节编址的32位机器:机器字长是32位,即CPU进行一次整数计算的位数是32位
3.5.2 进行边界对齐
K字节大小的数据起始地址必须是K的整数倍