目录
指令格式
按指令数目分类:
零地址指令
一地址指令
二地址指令
三地址指令
四地址指令
按指令长度分类:
指令字长
机器字长
存储字长
按操作码的长度分类
定长操作码
可变长操作码
定长指令字结构+可变长操作码------>拓展操作码指令格式
按操作类型分类
数据传送(数据传输类)
算数逻辑操作(运算类)
移位操作(运算类)
转移操作(程序控制类)
输入输出操作(输入输出类I/O)
拓展操作码
拓展操作码举例
定长操作码与拓展操作码
指令寻址
何为指令?(指令定义)
指令:指令又称为机器指令,是指计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该计算机的指令系统,也成指令集。(一台计算机只能执行自己的指令系统,不能执行其他系统的指令)
比如说x86架构和ARM架构,目前的Intel电脑芯片基本上都是支持x86架构的,而手机芯片一般是使用ARM架构,因此在手机上的app不能够直接在电脑上运行。因为两个不同的架构所拥有的指令系统是不一样的。
指令含义:OP(A1)--->A1 A1为某个主存地址
完成一条指令需要3次访存:取指--->读A1--->写A1
指令含义:(ACC)OP(A1)--->ACC
完成一条指令需要2次访存:取指--->读A1(存结果到寄存器中不需要执行,因此两次就可以了)
常用于两个操作数的算数运算、逻辑运算相关指令
指令含义:(A1)OP(A2)--->A1
完成一条指令需要访存4次:取指--->读A1--->读A2--->写A1
常用于需要两个操作数的运算符、逻辑运算相关指令
指令含义:(A1)OP(A2)--->A3
完成一条指令需要访存4次:取指--->读A1--->读A2--->写A3
指令含义:(A1)OP(A2)--->A3 ,A4=下一条将要执行指令的地址
完成一条指令需要访存4次:取指--->读A1--->读A2--->写A3
指令字长会影响取指令所需时间。如:机器字长=存储字长=16bit,则读取一条双字长指令需要两次访存
定长指令字结构:指令系统中所有指令的长度都相等
变长指令子结构:指令系统中各种指令的长度不等
一条指令的总长度(可能会改变)
CPU进行一次整数运算所能处理的二进制数据的位数(通常和ALU直接相关)
一个存储单元中的二进制代码位数(通常和MDR位数相同)
指令系统中所有指令的操作码长度相同
n位-->条指令
控制器的译码电路设计简单,但灵活性较低
指令系统中各指令的操作码长度可变
控制器的译码电路设计复杂,但灵活性较高
数据传送类:进行主存与CPU之间的数据传送
程序控制类:改变程序执行的顺序
算数类:实现了各种运算,算数、逻辑、移位
输入输出类(I/0) :进行CPU和I/0设备之间的数据传送
LOAD作用:把存储器中的数据放到寄存器中去。
STORE作用:把寄存器中的数据放到存储器中去。
算术:加、减、乘、除、增1、减1、求补、浮点运算、十进制运算
逻辑:与、或、非、异或、位操作、位测试、位清除、位求反
算术移位、逻辑移位、循环移位(带进位和不带进位)
无条件转移JMP
条件转移 JZ:结果为0 ;
JO: 结果溢出;
JC:结果有进位。
调用和返回CALL和RETURN
陷阱(Trap)与陷阱指令
CPU寄存器与I0端口之间的数据传送(端口即I0接口中的寄存器)
每个指令字长是16位,每个地址码占4位
4位基本操作码若全部用于三地址指令,则有16条。
但至少须将1111留作扩展操作码之用,即三地址指令为15条;
(留下1111拓展码的作用是为了让计算机在识别前4位为1111时能够知道这是一条二地址码,而不是一条三地址码。)
1111 1111留作扩展操作码之用,二地址指令为15条;
1111 1111 1111留作扩展操作码之用,一地址指令为15条;
零地址指令为16条;
在设计操作码指令格式时的注意点:
(这就是为什么留下1111为拓展码的原因了!)
通常情况下,对使用频率较高的指令,分配较短的操作码;对使用频率较高的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间。
定长操作码:在指令字的最高位部分分配固定的若干位(定长)表示操作码;
拓展操作码(不定长操作码):全部指令的操作码字段的位数不固定,且分散地放在指令字的不同位置上。