とりあえずは基本事項を確認しようと思います。といっても現時点で分かることはあんまり無いのですが。
どうやら、C風のコメントが使えるようです。「//」と「/**/」両方使えます。カンマやセミコロンは使えないようです。
エントリポイントは特定の名前である必要は無いようです。そのメソッド内に「.entrypoint」と書けばOKです。場所はどこでも問題ないようですが、先頭に書くのが分かり易くて良いでしょう。
「assembly」をしっかりと宣言しないと実行時にエラーがでます(コンパイルは通ります)。名前は適当で良いのでしっかりと宣言しましょう。
ソースコードを読むとどうやら、クラスはなくても良いようです。確実なことは言えませんがクラス無しでもメソッドはメソッドのようです。
したのソースをアセンブリし、その後逆アセンブルしてみましょう。
.assembly extern mscorlib {} /*入れても入れなくても良い。*/
.assembly hello {}
.method static public void main() cil managed
{
.entrypoint
ldstr "Hello world!"
call void [mscorlib]System.Console::WriteLine(class System.String)
ret
}
逆アセンブル後
// Microsoft (R) .NET Framework IL Disassembler. Version 1.1.4322.573
// Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.
.assembly extern mscorlib
{
.ver 0:0:0:0
}
.assembly hello
{
.ver 0:0:0:0
}
.module hello2.EXE
// MVID: {FE208837-51D6-4A66-89C4-96AA076892F2}
.imagebase 0x00400000
.subsystem 0x00000003
.file alignment 512
.corflags 0x00000001
// Image base: 0x00d90000
// =============== GLOBAL FIELDS AND METHODS ===================
//Global methods
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.method public static void main() cil managed
{
.entrypoint
// コード サイズ 11 (0xb)
.maxstack 8
IL_0000: ldstr "Hello world!"
IL_0005: call void [mscorlib]System.Console::WriteLine(string)
IL_000a: ret
} // end of global method main
// =============================================================
//*********** 逆アセンブリが完了しました ***********************
どうやら、グローバルフィールドなる物が存在するようです。これなかなか良いかもしれないです。
と、1つ分かったこと。グローバルフィールドのメソッドには自動でスタティック属性がつくらしい。まあ、インスタンスがないんだから当然なのかもしれない。