- 【JavaScript】スクリプト バトルロワイヤル44【pl,rb,php,py】
453 :デフォルトの名無しさん[]:2014/07/08(火) 06:49:38.69 ID:lqCYhNdm - CIL 命令セット
http://mog.xenowire.net/index.php?CIL%28MSIL%29%A5%E1%A5%E2%A5%D0%A5%C3%A5%AF%A5%A2%A5%C3%A5%D7 http://www.atelier-blue.com/program/il/command/index.htm http://www.atelier-blue.com/program/il/ecma-335/p-3/index.htm
| - 【JavaScript】スクリプト バトルロワイヤル44【pl,rb,php,py】
473 :デフォルトの名無しさん[]:2014/07/08(火) 22:33:26.78 ID:lqCYhNdm - .N
| - 【JavaScript】スクリプト バトルロワイヤル44【pl,rb,php,py】
474 :デフォルトの名無しさん[]:2014/07/08(火) 22:43:14.19 ID:lqCYhNdm - IL 命令の実行例 (.NET Framework)
.NETの仮想マシンは、スタック型と呼ばれるタイプの構造をしています。スタック型の命令は、コンパイラー作りの基本だったりします。 .NET の IL 命令は、実 CPU の命令セットと比べるとシンプルで読みやすく、 コンパイラーというものの勉強がてらに眺めてみるのもいいのではないかと思います。 ここでは、サンプル コードを示しつつ、それが実際どういう手順で実行されているかを説明します。 例: 2 * (x + y) 以下のような IL が得られます。 .method private hidebysig static int32 X(int32 x, int32 y) cil managed { .maxstack 8 IL_0000: ldc.i4.2 IL_0001: ldarg.0 IL_0002: ldarg.1 IL_0003: add IL_0004: mul IL_0005: ret } この例で出てきた IL 命令を簡単に説明すると、表1のようになります。 IL アセンブリ命令 IL マシン語(16進数) 説明 ldc.i4.2 18 int 型の定数 2 をスタックに読み込む(load constant integer(4byte) 2)。 ldarg.0 02 最初の引数の値をスタックに読み込む(load argument 0)。 ldarg.1 03 2つ目の引数の値をスタックに読み込む(load argument 1)。 add 58 加算。スタック上の2つの値を消費して、加算結果をスタックの最上位に積む。 mul 5A 乗算(multiply)。スタック上の2つの値を消費して、乗算結果をスタックの最上位に積む。 ret 2A メソッド呼び出し元に戻る(return)。 この IL 命令列がどう実行されていくか、スタックの状態も含めて図示していきましょう。 たとえば、引数として、x = 1, y = 3 を与えたとすると、以下のようになります。 http://ufcpp.net/study/dotnet/fig/il-sample1-1.png http://ufcpp.net/study/dotnet/fig/il-sample1-2.png http://ufcpp.net/study/dotnet/fig/il-sample1-3.png http://ufcpp.net/study/dotnet/fig/il-sample1-4.png http://ufcpp.net/study/dotnet/fig/il-sample1-5.png http://ufcpp.net/study/dotnet/fig/il-sample1-6.png http://ufcpp.net/study/dotnet/il_execution.html
|
|