指令格式
指令的基本格式
指令的定义
指令(又称机器指令):
是指示执行操作的命令,是计算机运行的最小功能单位.一台计算机的所有指令的集合构成该机的指令系统,也称为指令集.
注:一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令.
一条指令就是机器语言的一个语句,它是一组有意义的二进制代码.
一条指令通常包括操作码字段和地址码字段两部分:
一条指令可能包含0个,一个,2个,3个,4个地址码...
根据地址码数目不同,可以将指令分为零地址指令,一地址指令,二地址指令....
按地址码数目分类
零地址指令OP
指令用途
1.不需要操作数,如空操作,停机,关中断等指令
2.堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶
指令含义:OP(A1)->A1:完成一条指令需要3次访存:取值->读A1->写A1
一地址指令OP A1
1.只需要单操作数,如加1,减1,取反,求补等
2.需要两个操作数,但其中一个操作数隐含在某个寄存器
指令含:(ACC)OP(A1)->ACC:完成一条指令需要2次访存:取指->读A1
注:A1指某个主存地址,(A1)表示A1所指向的地址中的内容
二地址指令OP A1(目的操作数) A2(源操作数)
常用于需要两个操作数的算术运算,逻辑运算相关指令
指令含义:(A1)OP(A2)->A1
完成一条指令需要访存4次,取指->读A1->读A2->写A1
三地址指令OP A1 A2 A3(结果)
常用语需要俩个操作数的算术运算,逻辑运算相关指令
指令含义:(A1)OP(A2)->A3
完成一条指令需要访存4次,取指->读A1->读A2->写A3
四地址指令OP A1 A2 A3(结果) A4(下址)
指令含义:(A1)OP(A2)->A3,A4=下一条将要执行指令的地址
完成一条指令需要访存4次,取指->读A1->读A2->写A3
正常情况下:取指令之后PC+1,指向下一条指令
四地址指令:执行指令后,将PC的值修改位A4所指地址
指令-按指令长度分类
指令字长:一条指令的总长度(可能会变)
机器字长:CPU进行一次整数运算所能处理的二进制数据的位数(通常和ALU直接相关)
存储字长:一个存储单元中的二进制代码位数(通常和MDR位数相同)
单字长指令:长度等于机器字长
半字长指令:长度等于半个机器字长
双字长指令:长度等于两杯机器字长
定长指令字结构:指令系统中所有指令的长度都相等
变长指令字结构:指令系统中指令的长度不等
定长操作码:指令系统中所有指令的操作码长度都相同;控制器的译码电路设计简单,但灵活性较低
可变长操作码:指令系统中各指令的操作1码长度可变;控制器的译码电路设计复杂,但灵活性高
定长指令字结构+可变长操作码 ->扩展操作码指令格式
指令-按操作类型分类
1.数据传送
LOAD 作用:把存储器中的数据放在寄存器中
STORE作用:把寄存器中的数据放到存储器中
2.算术逻辑操作
算术:加,减,乘,除,增1,减1,求补,浮点运算,十进制运算
逻辑:与,或,非,异或,位操作,位测试
3.移位操作
算术移位,逻辑移位,循环移位
4.转移操作
无条件转移 JMP
条件转移 JZ:结果为0; JO:结果溢出;JC:结果有进位
5.输入输出操作
CPU寄存器与IO端口之间的数据传送(端口即IO接口中的寄存器)
扩展操作码
定长指令字结构+可变长操作码->扩展操作码指令格式
举例:
指令字长为16位,每个地址码占4位;
前4位为基本操作码字段OP,另有3个4位长的地址字段A1,A2和A3;
4位基本操作码若全部用于三地址指令,则有16条.
1111 1111留作扩展操作码之用,二地址指令为15条;
1111 1111 1111留作扩展操作码之用,一地址指令为15条;
零地址指令为16条
在设计扩展操作码指令格式时,必须注意以下两点:
1)不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同
2)各指令的操作码一定不能重复
通常情况下,对使用频率较高的指令,分配较短的操作码;对使用频率较低的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间
如下设计:
设地址长度为n,上一层留出m种状态,下一层可扩展出m*2^n种状态
定长操作码:
优:定长操作码对于简化计算机硬件设计,提高指令译码和识别速度很有利;
缺;指令数量增加时会占用更多固定位,留给表示操作数地址的位数受限
扩展操作码;
优:在指令字长有限的前提下扔保持比较丰富的指令种类;
缺:增加了指令译码和分析的难度,使控制器的设计复杂化;
指令寻址和数据寻址
指令寻址
指令寻址 下一条欲执行指令的地址(始终由程序计数器PC给出)
顺序寻址
通过程序计数器(PC)加1,自动生成下一条指令的地址
(PC)+“1”->PC:这里的1理解为1个指令字长,实际加的值会因指令长度,编址方式而不同;
如果系统采用变长指令字结构,每一种颜色代表一个指令字长;
读入一个字,根据操作码判断这条指令的总字节数n,修改pc的值.
(PC)+n->PC
跳跃地址
通过转移类指令实现,是否跳跃受到状态寄存器和操作数的控制
跳跃到的地址分类:绝对地址:由标记符直接得到;相对地址:相对于当前指令地址的偏移量;
跳跃的结果是当前指令修改PC值
JMP:无条件转移把PC的内容改成7;无条件转移指令类似于C语言中的goto;
数据寻址
在指令中表示一个操作数的地址
结构:操作码+寻址特征+形式地址A
那么假设我们从第100存储地址,
这里还能解释成跳转到7的地方吗?显然是错误的,这个程序是从100往后存储的,地址为7的是属于其他的存储地址,我们可以这样解读:基于100往后的7个偏移量;
那么我们再改一下
之前说过,每取出来一个数,就将PC+1,就到了104的位置,然后再往后偏移3个位置;
从上可见,数据的寻址方式,解释方式有很多很多种,下面我们会对其进行介绍,