CIL - В чем разница между ldc.i4 33 и ldc.i4.33? - PullRequest
3 голосов
/ 30 апреля 2011

Я пытаюсь выяснить код CIL.Но, похоже, эти два утверждения делают одно и то же (согласно всему, что я прочитал).

ldc.i4 33

и

ldc.i4.33

Оба предположительно «загружают int32 в стек значения 33».

Это правильно?Зачем?Я бы подумал, что ldc.i4.33 будет «загрузить целое число из индекса локальной переменной 33 в стек».

Где я здесь ошибаюсь?

1 Ответ

6 голосов
/ 30 апреля 2011

Код операции ldc.i4.33 не существует.

Существует несколько специальных (называемых макро) опкодов:

ldc.i4.m1  // has the same effect as: ldc.i4 -1

до

ldc.i4.8   // has the same effect as: ldc.i4  8

Но это всего лишь краткая форма кода операции ldc.i4, для общих случаев, для оптимизации размера CIL.

Аналогично, ldloc.0 - это краткая форма (т. Е. Имеет более компактную кодировку CIL, но выполняет точно так же, как) ldloc 0 и т. Д.

...