Инструкции MSIL

Последнее обновление: 07.07.2022

Базовые инструкции

  • add: складывает два числа

  • add.ovf/add.ovf.un: складывает два целочисленных значения с проверкой на переполнение

  • and: поразрядная операция И (поразрядное умножение)

  • arglist: возвращает список аргументов

  • beq.<длина>: сравнивает два значения, и если они равны, выполняет переход по определенному адресу

  • bge.<длина>: сравнивает два значения, и если первое значение больше или равно второму, выполняет переход по определенному адресу

  • bge.un.<длина>: сравнивает два значения (значения беззнаковые или неупорядоченные), и если первое значение больше или равно второму, выполняет переход по определенному адресу

  • bgt.<длина>: сравнивает два значения, и если первое значение больше второго, выполняет переход по определенному адресу

  • bgt.un.<длина>: сравнивает два значения (значения беззнаковые или неупорядоченные), и если первое значение больше второго, выполняет переход по определенному адресу

  • ble.<длина>: сравнивает два значения, и если первое значение меньше или равно второму, выполняет переход по определенному адресу

  • ble.un.<длина>: сравнивает два значения (значения беззнаковые или неупорядоченные), и если первое значение меньше или равно второму, выполняет переход по определенному адресу

  • blt.<длина>: сравнивает два значения, и если первое значение меньше второго, выполняет переход по определенному адресу

  • blt.un.<длина>: сравнивает два значения (значения беззнаковые или неупорядоченные), и если первое значение меньше второго, выполняет переход по определенному адресу

  • bne.un<длина>: сравнивает два значения, и если они не равны, выполняет переход по определенному адресу

  • br.<длина>: выполняет безусловный переход по определенному адресу

  • break: применяется для поддержки отладки, сигнализирует инфраструктуре CLI, что достигнута точка прерывания

  • brfalse.<длина>: выполняет переход по определенному адресу, если аргумент равен false, null или 0

  • brtrue.<длина>: выполняет переход по определенному адресу, если аргумент Не равен false или null

  • call: вызывает метод

  • calli: непрямой вызов метода (через указатель на метод)

  • ceq: сравнивает два значения, если они равны, возвращает 1, иначе возвращает 0

  • cgt: сравнивает два значения, если первое значение больше второго, возвращает 1, иначе возвращает 0

  • cgt.un: сравнивает два значения (значения беззнаковые или неупорядоченные), если первое значение больше второго, возвращает 1, иначе возвращает 0

  • ckfinite: проверяет, что значение представляет число с плавающей точкой. Если значение таковым не является, то генерирует ArithmeticException

  • clt: сравнивает два значения, если первое значение меньше второго, возвращает 1, иначе возвращает 0

  • clt.un: сравнивает два значения (значения беззнаковые или неупорядоченные), если первое значение меньше второго, возвращает 1, иначе возвращает 0

  • conv.<тип_данных>: выполняет преобразование данных

  • conv.ovf.<тип_данных>: выполняет преобразование данных с проверкой на переполнение

  • conv.ovf.<тип_данных>.un: выполняет преобразование беззнаковых данных с проверкой на переполнение

  • cpblk: копирует данные из одного адреса в другой

  • div: выполняет операцию деления

  • div.un: выполняет операцию деления беззнаковых значений

  • dup: дублирует в стеке значение, которое находится в его верхушке

  • endfilter: завершает фильтр обработки исключений

  • endfinally: завершает выражения finally и fault в блоке обработки исключений

  • initblk: инициализирует блок памяти для значения

  • jmp: выполняет переход к методу

  • ldarg.<длина>: загружает аргумент в стек

  • ldarga.<длина>: загружает адрес аргумента

  • ldc.<тип_данных>: загружает числовую константу

  • ldftn: загружает указатель метода

  • ldind.<тип_данных>: загружает в стек указатель на значение

  • ldloc: загружает в стек локальную переменную

  • ldloca.<длина>: загружает адрес локальной переменной

  • ldnull: загружает нулевой указатель

  • leave.<длина>: производит выход из блока кода и осуществляет переход по определенному адресу

  • localloc: выделяет память в локальном динамическом пуле памяти

  • mul: перемножает значения

  • mul.ovf.<тип_данных>: перемножает значения с проверкой на переполнение

  • neg: выполняет операцию отрицания

  • nop: отсутствие операции

  • not: поразрядное отрицание

  • or: поразрядная операция ИЛИ

  • pop: удаляет элемент из верхушки стека

  • rem: вычисляет остаток от деления

  • rem.un: вычисляет остаток от деления беззнаковых чисел

  • ret: выполняет выход из метода

  • shl: поразрядный сдвиг числа влево

  • shr: поразрядный сдвиг числа вправо

  • shr.un: поразрядный сдвиг беззнакового числа вправо

  • starg.<длина>: сохраняет значение в слот для аргумента

  • stind.<тип_данных>: сохраняет значение из стека по определенному адресу

  • stloc: берет значение из верхушки стека и сохраняет его в локальную переменную

  • sub: выполняет операцию вычитания

  • sub.ovf.<тип_данных>: выполняет операцию вычитания с проверкой на переполнение

  • switch: берет значение из верхушки стека, сравнивает его с набором значений и на основании результата сравнения производит переход в определенную точку кода

  • xor: поразрядная операция XOR

Инструкции объектной модели

  • box: преобразует значение в объект (т.н. упаковка)

  • callvirt: вызывает метод объекта

  • castclass: преобразует значение в объект определенного класса

  • cpobj: копирует значение из одного адреса в другой

  • initobj: инициализирует значение по определенному адресу

  • isinst: проверяет, является ли значение объектом определенного класса или интерфейса

  • ldelem: загружает элемент массива

  • ldelem.<тип_данных>: загружает элемент массива

  • ldelema: загружает адрес элемента массива

  • ldfld: загружает поле объекта

  • ldflda: загружает адрес поля объекта

  • ldlen: загружает длину массива

  • ldobj: копирует значение из одного адреса в памяти в стек

  • ldsfld: загружает статическое поле класса

  • ldsflda: загружает адрес статического поля

  • ldstr: загружает строковый литерал

  • ldtoken: загружает представление токена метаданных

  • ldvirtftn: загружает указатель на виртуальный метод

  • mkrefany: добавляет в стек типизированную ссылку (ссылку определенного класса)

  • newarr: создает одномерный массив

  • newobj: создает новый объект

  • refanytype: загружает токен типа из типизированной ссылки

  • refanyval: загружает адрес из типизированной ссылки

  • rethrow: повторно генерирует текушее исключение (например, в catch генерируется то же самое исключение, которое обрабатывается этим выражением catch)

  • sizeof: загружает размер типа в байтах

  • stelem: сохраняет элемент в массив

  • stelem.<тип_данных>: сохраняет элемент определенного типа в массив

  • stfld: сохраняет значение в поле объекта

  • stobj: сохраняет значение по определенному адресу

  • stsfld: сохраняет значение в статическое поле класса

  • throw: генерирует исключение

  • unbox: преобразует упакованное значение в его исходную форму до упаковки

  • unbox.any: извлекает упакованное в объект значение

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850