Я немного поиграл с декомпилятором MSIL - ILDASM и попытался декомпилировать простой метод .NET.
Код операции выглядел примерно так:
.method private hidebysig static int32 Add(int32 a,
int32 b) cil managed
{
// Code size 18 (0x12)
.maxstack 2
.locals init ([0] int32 c,
[1] int32 d,
[2] int32 CS$1$0000)
IL_0000: nop
IL_0001: ldarg.0
IL_0002: ldc.i4.5
IL_0003: add
IL_0004: stloc.0
IL_0005: ldarg.1
IL_0006: ldc.i4.s 10
IL_0008: add
IL_0009: stloc.1
IL_000a: ldloc.0
IL_000b: ldloc.1
IL_000c: add
IL_000d: stloc.2
IL_000e: br.s IL_0010
IL_0010: ldloc.2
IL_0011: ret
}
Что мне интересно, так это атомные коды? Т.е. в ядре с вытесняющим планированием возможно ли выгрузить один код операции до его завершения? Приведенный здесь код операции может быть легко сопоставлен с инструкциями asm в значительной степени 1: 1, так как они имеют отдельные коды операций для загрузки, сохранения, добавления и т. Д.
Но что в случае более сложных кодов операций? например, «вызов», когда операндом является токен ссылки на метод, который должен сначала следовать для разрешения метода, а затем вызываться? это тоже атом?