2012-06-29 60 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人員只看到需要非常小的數字。