目录
指令格式
按指令数目分类:
零地址指令
一地址指令
二地址指令
三地址指令
四地址指令
按指令长度分类:
指令字长
机器字长
存储字长
按操作码的长度分类
定长操作码
可变长操作码
定长指令字结构+可变长操作码------>拓展操作码指令格式
按操作类型分类
数据传送(数据传输类)
算数逻辑操作(运算类)
移位操作(运算类)
转移操作(程序控制类)
输入输出操作(输入输出类I/O)
拓展操作码
拓展操作码举例
定长操作码与拓展操作码
指令寻址
指令格式
何为指令?(指令定义)
指令:指令又称为机器指令,是指计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该计算机的指令系统,也成指令集。(一台计算机只能执行自己的指令系统,不能执行其他系统的指令)
比如说x86架构和ARM架构,目前的Intel电脑芯片基本上都是支持x86架构的,而手机芯片一般是使用ARM架构,因此在手机上的app不能够直接在电脑上运行。因为两个不同的架构所拥有的指令系统是不一样的。
-
- 一条指令就是及其语言的一个子句,它是一组有意义的二进制代码。
- 一条指令通常要包括操作码字段和地址码字段两个部分。
- 根据一条指令可能包含几个地址码数目的不同,可将指令的分为零地址指令、一地址指令、二地址指令...
按指令数目分类:
零地址指令
- 不需要操作数,如空操作、停机、关中断等指令
- 堆栈计算机:两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶。(后缀表达式)
一地址指令
- 只需要简单操作数,如加1、减1、取反、求补等
指令含义:OP(A1)--->A1 A1为某个主存地址
完成一条指令需要3次访存:取指--->读A1--->写A1
- 需要两个操作数,但其中一个操作数隐含在某个寄存器(如隐含在ACC)
指令含义:(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)与陷阱指令
输入输出操作(输入输出类I/O)
CPU寄存器与I0端口之间的数据传送(端口即I0接口中的寄存器)
拓展操作码
每个指令字长是16位,每个地址码占4位
4位基本操作码若全部用于三地址指令,则有16条。
但至少须将1111留作扩展操作码之用,即三地址指令为15条;
(留下1111拓展码的作用是为了让计算机在识别前4位为1111时能够知道这是一条二地址码,而不是一条三地址码。)
1111 1111留作扩展操作码之用,二地址指令为15条;
1111 1111 1111留作扩展操作码之用,一地址指令为15条;
零地址指令为16条;
在设计操作码指令格式时的注意点:
- 不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同;
- 各指令的操作码一定不能重复。
(这就是为什么留下1111为拓展码的原因了!)
通常情况下,对使用频率较高的指令,分配较短的操作码;对使用频率较高的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间。
拓展操作码举例
定长操作码与拓展操作码
定长操作码:在指令字的最高位部分分配固定的若干位(定长)表示操作码;
- 一般n位 操作码字段的指令系统最大能够表示条指令。.
- 优:定长操作码对于简化计算机硬件设计,提高指令译码和识别速度很有利;
- 缺:指令数量增加时会占用更多固定位,留给表示操作数地址的位数受限。
拓展操作码(不定长操作码):全部指令的操作码字段的位数不固定,且分散地放在指令字的不同位置上。
- 最常见的变长操作码方法是扩展操作码,使操作码的长度随地址码的减少而增加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。
- 优:在指令字长有限的前提下仍保持比较丰富的指令种类;
- 缺:增加了指令译码和分析的难度,使控制器的设计复杂化。