扩展操作码的总结
来源:互联网 发布:算法分析导论 下载 编辑:程序博客网 时间:2024/04/29 16:57
需要建立的一种直观的认知是:既然是扩展操作码,就意味着操作码的位数越变越多!
之所以这么强调,是因为常常混淆了操作码的扩展方向。
再看扩展的原理:
假设指令字长是16位,平均劈开成4份,高位4位用作操作码,低12位分别用作三个地址码。
那么操作码的个数就是四个二进制所能表达的离散数目:
OK,如果地址码只能做地址码,这是最终的结局了。
但是,如果地址码可以化身为操作码,这并不难对吧,毕竟都是二进制的数位而已。
非常粗略的认为,现在第一个地址4位也用作操作码,那么总的看来就是高8位用作操作码,低8位用作两个地址码了。
按理说
虽然,用8位和用4位各自表达操作码,互不干扰的。但是,实际上呢,单操作码只有15条,且二地址的操作码只有16条,如果还要继续扩展,二地址的也只有15条了!
为什么差别这么大?
答案是两个原则不可以破:
- 不允许短码是长码的前缀
- 各指令的操作码一定不能重复
为了满足第一条,我们看8位操作码的时候,前面四位全是四位操作码已经出现过的!
所以,设计思路只能变成:前面四位只用15种离散状态,保留一个给二地址扩展用。因此,8位操作码,实际上限定了高4位的值,只是低四位可以离散,共16种状态,要想再继续扩展,自己最多只敢用15种,还得保留一个种子呢!
这便是整个的扩展操作码的原理。当然可以有其他变种,这里不做展开。
看一个例子:
一个计算机系统采用32位单字长指令,地址码是12位,如果定义了250条二地址指令,那么还有(24K )条单地址指令。
怎么理解,这里的地址码限定为12位,说的是一个地址码就12位,如果有2个地址,那就是24位了!我会下意识的以为,哦,只分配12位作地址码,这是不对的。
由原理分析我们知道得问自己一下,这个是不是从三地址开始扩展来的?计算一下,12*3 = 36,超过了总的位数,因此,二地址是起点。之所以这么想,是因为我们知道二地址不一定是扩展的起点。
二地址共用掉24位作操作数地址,高位有8位作操作码。共有
PS:
以上。
- 扩展操作码的总结
- js时间操作扩展总结
- 扩展操作码的编程实现
- LCT的扩展操作
- 扩展消息的总结
- 指令操作码扩展
- 扩展操作码
- 结构元素的扩展操作
- 结构元素的扩展操作
- 对 字符串 的扩展操作
- 数组的扩展操作_legend
- 字符串的扩展操作22
- 变量的扩展问题--总结
- jquery的扩展方法总结
- Nova的扩展服务总结
- Jquery 的扩展方法总结
- 一些扩展kmp的总结
- OC类的扩展总结
- CF 712C Journey(dp+graph)
- CF374 Maxim and Array
- [读书笔记]weight知多少
- win7下删除windows文件夹下文件的方法:
- Android:Activity学习(1) 生命周期
- 扩展操作码的总结
- 模板-prim
- 【C入门向】输入2010任意一天得出星期几的程序
- 【C入门向】最大公约数
- LeetCode[213] House Robber II
- acm入门之-HDUOJ
- Linux平台下软件推荐及主题图标推荐
- 《常用算法深入学习实录》随记-20161002
- H5移动端开发-CSS知识点