2012-06-29 21 views
1

基于堆栈的虚拟机(如CLR和JVM)具有不同的指令集。在创建虚拟机时,是否有任何理论在设计指令集?例如有JVM指令集来加载从0-5常量到堆栈如何设计基于堆栈的机器的指令集?

iconst_0 
iconst_1 
iconst_2 
iconst_3 
iconst_4 
iconst_5 

而在CLR有指令集以从0数加载到8到堆栈如下

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本身的特性驱动还是依赖于高级语言结构?

回答

0

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

因此,通常所做的是统计分析常见模式,并试图缩短它们。 (即:而不是始终使用通用ldc,将iconst0等作为更短/更密集的版本)。

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