LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1744|回复: 9

[体系结构]问大家一个指令系统的问题

[复制链接]
发表于 2006-5-7 19:04:23 | 显示全部楼层 |阅读模式
题目:
某指令系统指令长16位,每个操作数的地址码长6位,指令分为无操作数,单操作数和双操作数3种。若双操作数指令有K条,无操作数指令有L条,问单操作数指令最多有多少条?

附答案是:
(2^4-K)*2^6 - L/(2^6) (取整数)

我认为不对。
发表于 2006-5-7 19:22:01 | 显示全部楼层
操作码是定长的吗?
1)是。则操作码长=16-6-6=4; 则单操作数指令=2^4 - K - L
2)否。??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-7 20:23:41 | 显示全部楼层
不好意思没说清楚,它使用扩展指令系统。操作码不是定长的。
回复 支持 反对

使用道具 举报

发表于 2006-5-7 21:09:36 | 显示全部楼层
如果操作码不定长的话,单操作指令最多为:
(2^4 - K - L/(2^12) ) * 2^6 = (2^4 - K)*2^6 - L/(2^6)   其中除法均取整数。
原题答案正确但不严密。
回复 支持 反对

使用道具 举报

发表于 2006-5-7 21:14:00 | 显示全部楼层
思路在于: 所有指令的操作码部分必须相异,故从双操作数指令入手,考察高4位的情况:
高4位区分了3种指令集,即形成三个划分。以此等式为方程即可求得单操作数指令的最大值。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-7 21:16:44 | 显示全部楼层
我们假设K=0,L=1,因为L至少有一个编码,设为0000H,那么单操作数指令就不能使用00,0000,0000了,就只有2^10 - 1条。所以答案错误。我的分析对吗?
回复 支持 反对

使用道具 举报

发表于 2006-5-7 21:24:02 | 显示全部楼层
如果把答案改成  (2^4 - K - ceiling(L/(2^12) ) × (2^6) 呢?
ceiling() 表示向上取整


PS:此答案依旧不严密,怀疑题目问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-7 21:39:20 | 显示全部楼层
我认为正确的答案是:
1. 当L <= 2^6  时 (2^4 - K)*2^6 - 1
2. 当L >  2^6   时 (2^4 - K)*2^6 - L/(2^6) 取整

因为
1 情况时 L = 000000--111111B,L只占用了 0000H

修改为
1 情况时 L = 0000,000000,000000--0000,000000,111111B,L只占用了 0000H
回复 支持 反对

使用道具 举报

发表于 2006-5-7 21:46:03 | 显示全部楼层
应该是题目不够严格。题目必须申明三种指令都必须处于一种“饱和”状态,即所有可能指令空间都被利用了。

(2^4-K)*2^6 - L/(2^6)只在 (L > 2^12 )且低12位均被无操作数指令使用时有效
回复 支持 反对

使用道具 举报

发表于 2006-5-7 21:59:05 | 显示全部楼层
Post by ideawu
我认为正确的答案是:
1. 当L <= 2^6  时 (2^4 - K)*2^6 - 1
2. 当L >  2^6   时 (2^4 - K)*2^6 - L/(2^6) 取整

因为
1 情况时 L = 000000--111111B,L只占用了 0000H

那 K=0,  而无操作数指令高四位为 0001b~ 1111b ,且低12位均为0, 即L值为 2^4 -1 时呢?
那此时答案应该是 (2^4 - K - (2^4-1)) * 2^6 = 2^6 了。与你的答案1有出入。

所以题目不严密
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表