今回は前回の経験を実際に生かす一歩目として、定数ロードについて詳しく学びましょう。
それではILの実行スタックに定数をロードしてみましょう。
.assembly hina{}
.method public static void main(){
.entrypoint
.maxstack 1
ldc.i4 123 //int32型の定数ロード
call void [mscorlib]System.Console::WriteLine(int32)
ldc.i8 123456 //int64型の定数ロード
call void [mscorlib]System.Console::WriteLine(int64)
ldc.r4 123.456 //float64型の定数ロード
call void [mscorlib]System.Console::WriteLine(float32)
ldc.r8 123456.789 //float64型の定数ロード
call void [mscorlib]System.Console::WriteLine(float64)
ret
}
今回の命令は「ldc.i8」「ldc.r4」「ldc.r8」です。説明ははしょりますのであしからず。
IL命令ではint32の特定の値に限って短縮形の命令が用意されています。バイトコードの量を減らしたい時に活用すると良いでしょう。
詳細は定数ロードの命令一覧にあります。