汇编习题之某机指令字长16位,共有单地址指令和双地址指令两类,若每个地址字段均为5位,且双地址指令已用了X条,问单地址指令最多可以有多少条?

题目:某机指令字长16位,共有单地址指令和双地址指令两类,若每个地址字段均为5位,且双地址指令已用了X条,问单地址指令最多可以有多少条?

明确两点:

  • 机器指令字长为16位
  • 只有单地址指令和双地址指令两类,不考虑零地址指令

明确这两点后,我们还需要知道一个知识点,就是哈夫曼编码,哈夫曼编码的主要思想就是短码不能是长码的前缀。
接下来就是对这道题的理解:
我们知道每个地址字段是5位,那么双地址指令中有10位是地址码,剩余6位是操作码,那么我们就能知道这6位操作码最多能后实现2^6 个指令,也就是从000000-111111,这里说双地址已经用了X条,也就是说000000-111111这些编码里面已经有X被用掉了,根据短码不能是长码的前缀的要求,也就是说单地址指令的表示中不能出现这X条的编码,那么在前单地址指令的前6位操作码中可用的只剩下(64-X)条,也就是2^6 -X条指令。此外单地址指令有5位地址码,11位操作码,前面的6位可能的编码情况已经确定,那么接下来就是后面5位的编码情况,只要满足了前面的6位编码不是双地址的指令编码就可以,后面的5位就可以随便,也就是有2^5 个编码,所以单地址指令最多有(2^6 -X)* 2^5 条。

补充题目:某处理器的指令字长为16位,有二地址指令、一地址指令和零地址指令三种,每个地址字段的长度均为6 位。如果二地址指令有15条,一地址指令和零地址指令的条数基本相等,那么一地址指令和零地址指令各有多少条?试为这三种指令分配操作码。

这一道题,相比于上一道题多了零地址指令,不过思想都是一样的。
双地址指令的结构:4位操作码,6位地址码A,6位地址码B;
单地址指令的结构:10位操作码,6位地址码;
零地址指令的结构:16位操作码。
指令分配过程中必须满足的条件:短码不能是长码的前缀。
这里设单地址指令有X条,由于单地址指令的前4位操作码已经被双地址指令用了15条,那么可用的还有2^4 -15,也就是一条,那么后面6位操作码中应该有X中编码方式(因为我们前面已经假设单地址指令有X条,根据(2^4 -15)* 后六位操作码编码方式 = X),单地址指令确定后,我们再来看零地址指令,由于零地址指令没有地址码,16位都是操作码,并且我们知道零地址指令的16位操作码中的前10位操作码编码不能是双地址指令的前缀也不能是单地址指令的前缀,我们根据前面的分析可知,零地址指令还可以有(2^6 – X)* 2^6 种编码方式,由于单地址指令跟零地址指令的条数基本相等,那么我们知道
X ≈ \approx (2^6 – X ) * 2^6 ,那么我们可以计算出X=63。
这道题的答案就出来啦!

    原文作者:_山山而川_
    原文地址: https://blog.csdn.net/qq_44840079/article/details/104964582
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞