今天我们来讲一讲指令系统里面的知识点以及做题技巧
1、定义
考点1:指令定义
指令是指示计算机执行某种操作的命令,一台计算机的所有指令的集合构成该机的指令系统,也称为指令集。指令系统是指令集体系结构ISA中最核心的部分,ISA完整定义了软件与硬件之间的接口。
一条指令就是机器语言的一个语句,这是一组有意义的二进制代码。一条指令通常包括操作码字段以及地址码两部分:
操作码字段 | 地址码字段 |
其中,操作码指出指令中该指令应该执行什么样的性质的操作以及有何种功能。具体的指令操作类型有:
①数据传送:例如从CPU寄存器写数据到内存单元的STORE指令。
②算数和逻辑运算:例如加ADD、减SUB、与AND、或OR等等。
③移位操作:包括算数移位、逻辑移位、循环移位等。
④转移操作:包括无条件转移JMP、条件转移BRANCH、调用CALL等
⑤输入输出操作
而地址码给出被操作的信息(指令或数据)的地址,包括参加运算的一个或者多个操作数所在的地址、运算结果的保存地址、程序的转移地址、被调用的子程序的入口地址等等。
其实也很容易理解这些,这就好比有一个海王或者说是时间管理大师,操作码字段就好比是他要去干什么比如说逛街呀、看电影呀诸如此类,而地址码则表明是那几位“舔狗”或者“鱼儿”的编号,表明和谁去进行这个活动。有的时候进行的活动很累或者是需要很多的人,比如说爬山或者是捉迷藏,于是要和好几位鱼儿去进行活动,所以会有好几个地址。
需要特别注意:指令长度与机器字长没有固定关系,既可以等于机器字长,也可以等于机器字长,也可以大于或者等于机器字长。具体关系如下表:
指令长度与机器字长的关系 | 指令名称 |
指令长度=机器字长 | 单字长指令 |
指令长度=机器字长×0.5 | 半字长指令 |
指令长度=机器字长×2 | 双字长指令 |
在一个指令系统中,若所有指令的长度都是相等的,则称为定长指令字结构;若各种指令的长度随功能而异,则称为变长指令结构。
特别注意:主存一般是按照字节编址的,所以指令字长多为字节的整数倍。这一点它不会直接考,它会间接的考这一点,后续有一个题目就是这样,特别阴,一不小心就因为这个错了。
我们先来做一道例题感受一下这一章的难度吧:
例题:以下关于指令系统的说法中的,错误的是():
A.指令系统是一台机器硬件能执行的指令全体
B.任何程序运行前都要先转换为机器语言程序
C.指令系统是计算机软件与硬件的界面
D.单字长指令只有一个操作数
【答案】:D
【解析】:单字长指令的“单”,不是指只有一个操作数,而是说它与机器字长的关系,等于一倍的机器字长。而且我们刚刚还把指令比作“海王”,这是指望海王只钓一条鱼吗?虽然确实有海王只钓了一条鱼,但是不能代表大多数。
2、指令格式
考点2:指令的几种格式
好的,刚刚谈论到海王,那么有合格的海王,也会有不合格的海王。我们根据指令中操作数地址码的数目不同,可将指令分成下面几种格式:
①零地址指令
OP |
这个是最弱的海王,只有操作码OP,而没有显式地址,有下面两种可能:
A.真的不需要操作数,比如说空操作指令、停机指令、关中断指令
B.它是堆栈计算机,它的两个操作数隐含的从栈顶和次栈顶弹出,送到运算器进行运算,运算结果再隐含的压入栈。
②一地址指令
OP | A1 |
这种海王就是逊啦,它只有一个操作数。不过有两种情况:
A.只有目的操作数的单操作数指令,按A1地址读取操作数,进行AP操作后,结果存回原地址。例如加一,减一,取反等等。
用符号语言表示为:OP(A1)A1
B.隐含约定目的地址的双操作数指令,也就是说,这个海王不是只有一条鱼,而是另一条鱼在别的地方。按指令地址A1课读取源操作数,另一个操作数可由ACC累加器提供,运算结构也将存放在ACC中。
用符号语言表示为:(ACC)OP(A1)ACC
假设指令字长32位,而操作码占8位,那么一个地址码占24位,寻址范围为16M。
③二地址指令
这种海王就开始渣了,有两个听话的“舔狗”要受它的摆布。
OP | A1 | A2 |
对于常用的算数指令以及逻辑运算指令,往往需要两个操作数,需要分别给出目的操作数和源操作数的地址,其中目的操作数用来保存运算结果。
用符号语言表示为:(A1)OP(A1)A1
假设指令字长32位,而操作码占8位,那么一个地址码占12位,寻址范围为4K。
④三地址指令
是的,你没看错,脚踏三条船,太渣了!
OP | A1 | A2 | A3 |
其中A1、A2代表目的操作数与源操作数,而A3存放运算的结果。
用符号语言表示为:(A1)OP(A2)A3
假设指令字长32位,而操作码占8位,那么一个地址码占8位,寻址范围为256。
⑤四地址指令
我原本以为三地址已经天下无敌了,没想到有人比他还勇猛,四地址指令,厉害,您这已经不属于海王了,您这是海之霸主。
OP | A1 | A2 | A3 | A4 |
用符号语言表示:(A1)OP(A2)A3,A4=下一条将要执行指令的地址。
假设指令字长32位,而操作码占8位,那么一个地址码占6位,寻址范围为64。
上题目练练手:
例题:堆栈计算机中,有些堆栈零地址的运算类指令在指令格式中不给出操作数的地址,参加的两个操作数来自_______和__________
【答案】:堆栈的栈顶 次栈顶单元
【解析】:这个写不出来要把课本和文章好好看一下
3、定长操作码与扩展操作码指令格式
定长操作码指令在指令字的最高位部分分配固定的若干位表示操作码,一般n为操作码字段的指令系统最大能表示条指令,定长操作码可以简化计算机硬件设计。
而对于扩展操作码指令,可以在保持指令字长有限的前提下保持比较丰富的指令种类。具体怎样操作,我们马上来分析。
比如说对于指令字长为16位的指令,我们用四位表示基本操作码字段OP,剩下的地址字段均为4位,如下图:
OP(4位) | A1(4位) | A2(4位) | A3(4位) |
那么,我们可以用OP的这四位,表示所有三地址指令的数量,最广的范围为0000~1110(不是1111的原因是1111用来提示此时已经是二地址指令了),那么有条三地址指令。
当我们想表示二地址指令的时候,OP就变为1111,山中无老虎,猴子当霸王,A1它变身了,它要开始发号施令了!它进化为了指令。同理,也可以表示15条指令。同理单地址指令也是如此,也有15条指令。而零地址指令不用留出1111,故有16条。
这种扩展方式需要满足两个条件:a.不允许短码是长码的前缀,b.各个指令的操作码不能重复
顺着推理特别容易,但是反着推,告诉你零一二三地址有多少条,让你推有多少位,这个就相当麻烦了。我们看一个例题,大家自行感受一下:
例题:某计算机按字节编址,指令字长固定且只有两种指令格式,其中三地址指令有29条,二地址指令有107条,每个地址字段为6位,则指令字长至少应该是()位。
A.21
B.23
C.24
D.32
【答案】:C
【解析】:这一题有一点水平的读者会选B,真正学懂了的会选C。它只有两种指令格式,即三地址以及二地址指令,每个地址字段为6位,所以我们要把OP有多少位算出来,就能解决这一题了对吧?,所以很明显,OP有五位,且多出来了3种。那么二地址指令最多有3×=192,大于107,满足条件。所以答案是5+6+6+6=23。选B是吧?又错了,按字节编址,说明指令字长至少是八的倍数,选大于23且满足八的倍数的,即24。
我理解大家可能暂时还看不懂答案,为什么是3×64,来让小编分析一波:首先29比32小3,对吧?然后最后这三个数分别是11101、11110、11111。所以计算机只要发现了OP是这三个数字,就会意识到,这就是一个二地址指令呀,然后在每一个没被三地址指令用到的数字下,A1都能产生64种可能性,所以说二地址指令最多有3×64种。
想要检测自己是不是真的学懂了,来做一道大题,能做出来很棒,做不出来再接再厉:
假设指令字长为16位,操作数的地址码为6位,指令有零地址、单地址、二地址3种格式。
(1)设操作码固定,若零地址指令有M种,单地址指令有N种,则二地址指令有多少种
(2)采用扩展操作码技术,则二地址指令最多有几种?
(3)采用扩展操作码技术,若二地址指令有P条,零地址指令有Q条,则一地址指令有多少种?
【答案】16-M-N;15;
【解析】(1)操作码固定,所以是定长操作码,它有16-6-6=4位,有=16种指令,三种指令合起来16种,故二地址指令有16-M-N种
(2)扩展操作码,那么二地址指令最多为种,要留出一种表示此时不是二地址指令了,而是单地址指令或者说零地址指令
(3)OP能表示16种可能性,而二地址指令有P条,所以剩余(16-P)条留给了一地址指令,一地址指最多有(16-P)×-1条,设一地址有R条指令,则零地址指令有[(16-P)×-R]×条。
根据Q=[(16-P)×-R]×,得出R=
好的,本期的计算机考研408课就到此为止啦,感兴趣的小伙伴们快来关注一波,您的关注就是对小编最大的支持