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