2012-06-29 9 views
1

CLR 및 JVM과 같은 스택 기반 가상 시스템에는 다른 명령어 집합이 있습니다. 가상 머신을 생성하는 동안 명령어 세트를 고안하는 것에 대한 이론이 있습니까? 예 : JVM 명령 이유가스택 기반 명령어 세트를 고안하는 방법은 무엇입니까?

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 

다음과 같이 CLR에서 스택으로 0 내지 8 참조로드 명령 세트가있다

iconst_0 
iconst_1 
iconst_2 
iconst_3 
iconst_4 
iconst_5 

반면 스택으로 0-5의 정수를로드 세트 존재 ldc.i4.9이고 ldc.i4 <int32 (num)>이라면 왜 위의 opcode가 필요한가요? 그리고 이런 것들도 있습니다.

다른 VM의 opcode간에이 차이가 발생한 이유는 무엇입니까? 이 opcode를 고안하는 특정 이론이 있습니까? 아니면 VM 자체의 특성에 의해 완전히 유도되거나 고급 언어 구문에 의존합니까?

답변

0

일반적인 대답은 "바이트 코드"이므로 256 개만 있으므로 전체 범위를 사용하지 않으려 고합니다. 초기 디자인 당시 고려되지 않은 새 바이트 코드를위한 공간을 남겨 둘 필요가 있습니다.

따라서 일반적으로 수행되는 작업은 일반적인 패턴이 무엇인지에 대한 통계 분석과이를 단축하려고 시도하는 것입니다. (예 : 일반 ldc를 사용하지 않고 iconst0 등을 사용하는 대신 짧고 밀도가 높은 버전으로).

그런 다음 CLR 및 JVM 사람들이 설계 할 때 아주 작은 숫자 만 필요하다는 것을 알았습니다.