2012-06-29 7 views
1

Виртуальные машины на основе стека, такие как CLR и JVM, имеют разные команды. Есть ли какая-либо теория, лежащая в основе разработки набора команд при создании виртуальной машины? например Есть наборы команд виртуальной машины Java для загрузки констант из 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)>, то почему нам нужны вышеуказанные коды операций? И есть такие, как они.

Я очень хочу знать, в чем причина этой разницы между кодами операций разных ВМ? Существует ли какая-либо конкретная теория для разработки этих кодов операций или она полностью зависит от характеристик самой ВМ или зависит от языковых конструкций высокого уровня?

ответ

0

Типичный ответ заключается в том, что, поскольку они являются «байт-кодами», их всего 256, поэтому вы не хотите использовать весь диапазон. Вам нужно оставить место для новых байт-кодов, которые не учитывались при первоначальном дизайне.

Таким образом, обычно делается статистический анализ того, какие общие шаблоны и пытаются сократить их. (т. е. вместо того, чтобы всегда использовать общий ldc, иметь iconst0 и т. д. как более короткие/более плотные версии).

Я бы предположил, что при проектировании люди CLR и JVM видели только потребность в очень маленьких числах.

 Смежные вопросы

  • Нет связанных вопросов^_^