指令
程序是由一系列指令组成的,指令是要计算机执行某种操作的命令。包括:微指令、宏指令、机器指令。
微指令:微程序级指令,属于硬件
宏指令:由若干条机器指令组成的软件指令,属于软件
机器指令:介于微指令和宏指令之间,每条指令可完成一个独立的算术或逻辑运算
指令格式:
指令字(简称指令):表示一条指令的机器字。
指令格式:指令字用二进制代码表示的结构形式,由操作码字段和地址码字段组成
操作码字段:指令的操作特性与功能
地址码字段:参与操作的操作数的地址码
注:每条指令都有一个操作码,表示指令应该进行什么性质的操作;不同指令操作码字段编码是不一样的。
操作码
操作码可以分为固定长度和可变长度的代码。
固定长度编码:
即所以指令操作码长度相同。
例:64条指令,采用固定长度操作码,则需要6位编码,2^6=64 (从000000~111111)
优点:编码简单;缺点:不利于增加新的指令
可变长度编码:
即指令操作码长度不同。
优点:扩展方便(便于增加新的指令);能够缩短指令操作码的平均长度,节约空间
缺点:编码复杂
例:对100条指令进行编码设计。
(1)采用固定长度操作码编码则需要7位操作码(2^7=128,可以多于100但是不能少于100),其中前100(0-99)个用作操作码,后28(100-127)个用于扩展;操作码的平均长度=7
(2)采用不固定长度操作码编码,其中10条指令使用概率为90%,剩余90条指令使用概率为10%;
设计方案:可以先用4位代码对10条常用指令进行编码(2^4=16>10,剩余6个代码用作扩展),由于剩余6个4位代码,而我们还需要对其余90个指令进行编码,那么我们可以在这剩余的6个4位代码中进行扩展;90/6=15<2^4=16,即我们需要在剩余的6个位代码中再扩展4位即可组成一个8位操作码即可对余下的90个指令进行编码;又因为2^4*6=96。所以我们还剩下最后6个8位编码可用于扩展;
操作码的平均长度为:4*90%+8*10%=4.4
地址码
指令中指定操作数存储位置的字段称为地址码
指令中可以有一个、两个或者三个操作数,也可以没有操作数。根据指令有几个操作数地址,可将指令分为零地址指令(指令中没有地址码)、一地址指令、二地址指令、三地址指令。4个地址码的指令很少使用。
二地址指令涉及到2个操作数地址,根据2个操作数地址存在的位置分为,寄存器-寄存器类型(RR)(即两个操作数都在寄存器,速度快),寄存器-存储器类型(RS)(一个数在寄存器,另一个数在存储器),存储器-存储器类型(SS)(两个数都在存储器中,速度慢)
指令字
指令字长度:一个指令字中包含二进制代码的位数(包含操作码和地址码),其长度应该与计算机的数据字长(机器字长)相匹配,以简化指令访存的操作。一般指令字长为机器字长的整数倍。
机器字长:计算机一次能直接处理的二进制数据的位数,它确定了计算机的运算精度。指令字长等于机器字长指令称为单字长指令。使用多字长指令的缺点:必须多次访问内存以取出一整条指令,降低了cpu的运算速度,又占用了更多的存储空间。
操作码的设计原则:
从操作码较短的入手设计,即从短操作码入手。
如指令长度固定的情况下,地址码数量较多(即操作码短)的指令中可以安排较短的操作码,地址码数量较少的指令中可以安排较长的操作码。
指令和数据的寻址方式
操作数或指令的地址:某个操作数或某条指令存放在某个存储单元时其存储单元的编号。
寻址方式分类:指令寻址和数据寻址
指令寻址:确定下一条欲执行指令的指令地址
数据寻址:确定本条指令的操作数地址
指令寻址分类:顺序寻址(pc + 1)、跳跃寻址(跳跃指令)
数据寻址方式有如下情况:
(1)存储器寻址:操作数在内存中,指令的操作码部分指明了操作数所在内存单元地址
(2)寄存器寻址:指令的地址码部分指明了操作数所在的cpu中的一个寄存器
(3)立即数寻址方式:指令的地址码部分就是操作数本身
地址码分析
形式地址(A):指令字中的地址
有效地址(EA):操作数的真实地址
指令中所给出的地址码,并不一定是操作数的有效地址。可能需要经过寻址特征将形式地址转变为有效地址。
寻址过程就是把操作数的形式地址,变换为操作数的有效地址的过程。
常见的几种寻址方式
(1).隐含寻址:指令中只给出来了一个操作数地址,另一个操作数存在于累加寄存器ACC中
特点:指令中少了一个地址字段,可缩短指令字长。
(2)立即寻址:指令中给出的形式地址不是地址而是操作数本身
特点:1.指令执行阶段不访问内存(速度快);2.指令中形式地址的位数限制了操作数的范围
(3)直接寻址: EA=A
指令中给出的形式地址就是操作数的有效地址,而不需要经过转换再变为有效地址
特点:1.执行阶段访问一次内存(根据地址取出操作数);2.形式地址的位数决定了指令操作数的寻址范围
(4)间接寻址:EA=(A)
指令中给出的形式地址是操作数地址的地址;即需要根据形式地址找到内存中操作数的地址,然后根据内存中操作数的有效地址获取内存中的操作数
特点:1.执行指令阶段2次访问内存 2.可扩大寻址范围
(5)寄存器寻址:EA=Ri
指令中给出的形式地址就是有效地址即寄存器的编号,操作数位于寄存器中
特点:执行阶段不访问内存,只访问寄存器,速度快
(6)寄存器间接寻址:EA=(Ri)
指令中给出的形式地址是寄存器中指定编号单元中的地址,即有效地址位于指定寄存器编号中的地址,然后根据地址访存
特点:有效地址在寄存器中,操作数在存储器中,执行阶段访问一次内存
(7)偏移寻址:EA=A+(R)
有效地址是计算出来的,即有效地址(EA)=形式地址(A)+寄存器(R),其中形式地址是显示存在的,另一个地址字段隐含在某个专用寄存器R中。
常用的三种偏移寻址是相对寻址、基址寻址、变址寻址。
相对寻址:EA = A + (PC) (pc寄存器:当前正在执行的指令地址)
基址寻址:EA = A + (BR) (BR:基址寄存器)
变址寻址:EA = A + (IX) (IX: 变址寄存器)
形式地址A也称位移量D(相对于当前指令的位移量)
(8)段寻址方式:操作数在内存中
CISC和RISC
cisc(Complex Instruction Set Computer):复杂指令系统计算机
risc(Reduced Instruction Set Computer):精简指令系统计算机
精简指令系统
对于cisc指令系统而言,实际使用中,经常使用的指令占指令系统的20%,其使用频度为80%。80%的指令使用频度为20%。因此产生了RISC指令系统。
RISC指令系统的特点:
(1)选取使用频率高的简单指令
(2)指令长度固定,指令格式种类少
(3)只有取数/存数指令访问存储器,其余指令的操作都在寄存器之间(速度快)
例:精简指令系统SPARC中,对于一些没有选入指令系统的指令,可以通过指令集中的另外一条指令来代替实现