指令系统

指令

CPU 就是一个执行各种计算机指令(Instruction Code)的逻辑机器

指令字长

指令的分类

批注 2020-02-10 160201

批注 2020-02-10 160415

指令的格式

批注 2020-02-10 161205

指令系统

一台计算机中所有机器指令的集合

函数调用

计算机是如何实现一层层嵌套的函数调用:

使用栈帧,调用一个方法,就把该方法的变量表、返回地址等压入栈来实现,当从当前方法返回,把当前方法的栈帧弹掉,此时就返回上一个方法了,这点跟JVM的实现是一样的

屏幕截图 2022-06-22 210533

如果被调用的函数内部没有对其他函数的调用,可以执行一项叫做函数内联的优化,内联带来的优化是,CPU 需要执行的指令数变少了,根据地址跳转的过程不需要了,压栈和出栈的过程也不用了,是一种空间换时间的策略

寻址方式

根据冯诺依曼计算机的工作原理,需要根据物理地址从内存中去取指令和数据。如何获得指令和数据的物理地址?

指令的寻址方式

程序的指令序列在主存顺序存放。执行时从第一条指令开始,逐条取出并执行

CPU中设置程序计数器(PC)对指令的顺序号进行计数。PC开始时存放程序的首地址,每执行一条指令,PC 加"1",指出下条指令的地址,直到程序结束

需要深刻理解 "+1" => 存储1条指令占用的字节单元数与存储字长有关!

批注 2020-02-10 162617

操作数的寻址方式

当数据在主存中时, 需要计算其有效地址E

立即数寻址

地址码字段是操作数本身

特点:

寄存器寻址

操作数在CPU的内部寄存器中

特点:

直接寻址

地址码字段直接给出操作数在内存的地址

间接寻址

地址码字段给出的是操作数主存地址的地址

寄存器间接寻址

地址码字段给出的是寄存器编号R

相对寻址

E=D + (PC), D为指令中地址字段的值

基址寻址

指定一个基址寄存器B,与本指令地址无关

E= D + (B), D为指令中地址字段的值

变址寻址

指定一个变址寄存器X,与本指令地址无关, 内容可随要求改变,E= D + (X), D为指令中地址字段的值

批注 2020-02-10 170009

使用寻址方式的好处 : 有利于缩短指令字长、方便程序设计、扩展访存空间

指令格式设计

批注 2020-02-10 161205

MIPS指令

早期主要用于嵌入式系统,如Windows CE的设备,路由器,家用网关和视频游戏机,现在已经在PC机、服务器中得到广泛应用

特点

指令格式

R型指令

批注 2020-02-10 193600

操作数和保存结果均通过寄存器进行

I 型指令

批注 2020-02-10 194012

操作数中涉及立即数,结果保存到寄存器

J 型指令

寻址方式

R型指令:由op和funct字段共同隐含说明当前的寻址方式

I型和J型指令:由op字段隐含说明当前指令使用的寻址方式