| Коды операций | Описание |
|---|---|
| add, sub, mul, div, rem | Позволяют выполнять сложение, вычитание, умножение и деление для пар значений (rem возвращает остаток от деления) |
| and, or, not, xor | Позволяют выполнять соответствующие бинарные операции для пар значений |
| ceq, cgt, clt | Позволяют сравнивать пару значений из стека различными способами, например: ceq: сравнение в отношении равенства cgt: сравнение в отношении "больше" clt: сравнение в отношении "меньше" |
| box, unbox | Используются для конвертирования ссылочных типов и типов, характеризуемых значениями |
| ret | Используется для выхода из метода и (если это необходимо) возвращения значения вызывающей стороне |
| beq, bgt, ble, blt, switch | Используются (в дополнение к множеству других родственных кодов операций) для управления логикой ветвления в методах, например: beq: переход к заданной метке, если выполняется равенство bgt: переход к заданной метке, если больше ble: переход к заданной метке, если меньше или равно blt: переход к заданной метке, если меньше Все коды операций, связанные с ветвлением, требуют указания метки CIL-кода, по которой должен осуществляться переход в том случае, когда соответствующее сравнение возвращает true |
| call | Используется для вызова члена указанного типа |
| newarr, newobj | Позволяет разместить в памяти новый массив или новый объект (cоответственно) |
Следующая большая категория кодов операций CIL (подмножество которой показано в табл. 15.6) используется для загрузки аргументов в виртуальный стек выполнения. Обратите внимание на то, что эти относящиеся к загрузке коды операций имеют префикс ld (load – загрузка).
Таблица 15.6. Коды операций CIL для помещения данных в стек
| Код операции | Описание |
|---|---|
| ldarg (с множеством вариаций) | Помещает в стек аргумент метода. Вдобавок к общей операции ldarg (для которой требуется указать индекс, идентифицирующий аргумент), есть множество ее вариаций. Например, ldarg с числовым суффиксом (ldarg_0) используется для загрузки соответствующего аргумента. Другие вариации ldarg позволяют с помощью кодов констант CIL из табл. 15.4 указать конкретный тип загружаемых данных (например, ldarg_I4 для int32), а также тип данных и значение (ldarg_I4_5 для загрузки int32 со значением 5) |
| ldc (с множеством вариаций) | Помещает в стек значение константы |
| ldfld (с множеством вариаций) | Помещает в стек значение поля уровня экземпляра |
| ldloc (с множеством вариаций) | Помещает в стек значение локальной переменной |
| ldobj | Читает все значения объекта, размещенного в динамической памяти, и помещает их в стек |
| ldstr | Помещает в стек строковое значение |