2022年12月5日修改
原来的博客是 2018-09-21 17:27:41 发布 的啊,MarkDown可能 “ ^ ” 这个符号有特殊含义了,所以以前的公式都乱了……不怪我understand(:
题目:
某机为定长指令字结构,指令长度16位;每个操作数的地址码长6位,指令分为无操作数、单操作数和双操作数三类。
(1)若双操作数指令已有K种,无操作数指令已有L种,问单操作数指令最多可能有多少种?
(2)上述三类指令各自允许的最大指令条数是多少?
解析:
对于双操作数,操作码长度为16-2*6=4位;
已知双操作数已有K种,所以留有(2^4-K)=16-K 个编码给单操作数。
对于单操作数,操作码长度为16-6=10位,可扩展位为6位;
已知无操作数已有L种,设单操作数有Y种,那么有:
L=[(2^4-K)*2^6-Y]*2^6
化简得:
Y=(2^4-K)*2^6-L/(2^6)
所以单操作数指令最多可能有(2^4-K)*2^6-L/(2^6))
种
(1)已知:双操作数指令已有K种,无操作数指令已有L种,设单操作数有Y种,则
操作数地址码长 | 操作数码长 | 可扩展位 | 指令数种类 | 余下给其他指令的种类数 | |
---|---|---|---|---|---|
双操作数指令 | 12 | 4 | 0 | K | 2^4-K |
单操作数指令 | 6 | 10 | 双’基础上+6 | Y=(2^4-K)*2^6-L/(2^6) | (2^4-K)*2^6-Y |
无操作数指令 | 0 | 16 | 单’基础上+6 | L | 0 |
(2)由于必须保证三类指令都要有,所以双操作数、单操作数都必须至少留出1个指令数便于进一步扩展。所以有:
对于双操作数,满足K<=2^4
且K为整数,即K=15,要保证最大指令数为2^4-1=15个;
对于单操作数,首先满足1种双操作数,再留有1个指令数给无操作数扩展,即K=1,最大指令数为(2^4-1)*2^6-1
=959个;
对于无操作数,首先满足1种双操作数和1种单操作数,即K=1、Y=1,最大指令数为[(2^4-1)*2^6-1]*2^6=2^16-2^12-2^6
=61376个
最大指令条数 | |
---|---|
双操作数指令 | 15 |
单操作数指令 | 959 |
无操作数指令 | 61376 |
注意区别:
A.满足双操作数最大指令条数的情况下,单操作数指令条数最大可为多少?无操作数指令条数最大可为多少?
B.同时满足双操作数/单操作数最大指令条数的情况下,无操作数指令条数最大为多少?