首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设计堆栈机器的指令集?

如何设计堆栈机器的指令集?
EN

Stack Overflow用户
提问于 2012-06-29 18:31:41
回答 1查看 350关注 0票数 1

基于堆栈的虚拟机,如CLR和JVM,具有不同的指令集。在创建虚拟机时设计指令集背后有什么理论吗?例如,有JVM指令集可以将0-5中的常量加载到堆栈中

代码语言:javascript
复制
iconst_0
iconst_1
iconst_2
iconst_3
iconst_4
iconst_5

而在CLR中,指令集用于将编号从0到8加载到堆栈上,如下所示

代码语言:javascript
复制
ldc.i4.0
ldc.i4.1
ldc.i4.2
ldc.i4.3
ldc.i4.4
ldc.i4.5
ldc.i4.6
ldc.i4.7
ldc.i4.8

为什么没有ldc.i4.9,如果有ldc.i4 <int32 (num)>,为什么我们需要上面的操作码?还有其他类似的。

我很想知道不同虚拟机的操作码之间的差异背后的原因是什么?有没有特定的理论来设计这些操作码,或者它完全是由VM本身的特征驱动的,或者依赖于高级语言构造?

EN

回答 1

Stack Overflow用户

发布于 2012-07-03 12:24:31

典型的答案是,因为它们是“字节码”,所以只有256个字节码,所以您不希望用完整个范围。您需要为在初始设计时没有考虑到的新字节码留出空间。

因此,通常要做的是对常见模式进行统计分析,并尝试缩短它们。(例如:不必总是使用通用的ldc,使用iconst0,等等...作为更短/更密集的版本)。

然后我会猜测,在设计时,CLR和JVM人员认为只需要非常小的数字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11260193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档