Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Связывание параметров с локальными переменными

Связывание параметров с локальными переменными

Вы только что видели, как в CIL с помощью .local init объявляются локальные переменные, однако нужно еще выяснить, как передать отступающие параметры локальным методом. Рассмотрим следующий статический метод C#.

public static int Add(int a, int b) {
 return a + b;
}

Этот внешне "невинный" метод в терминах CIL существенно более "многословен". Во-первых, поступающие аргументы (а и b) следует поместить в виртуальный стек выполнение с помощью кода операций ldarg (загрузка аргумента). Затем используется код операции add, чтобы извлечь два значения из стека, найти сумму и снова сохранить значение в стеке. Наконец, эта сумма извлекается из стена и возвращается вызывающей стороне с помощью кода операции ret. Если дизассемблировать указанный метод C# с помощью ildasm.exe, вы обнаружите, что компилятор csc.exe добавляет множество дополнительных лексем, хотя сущность CIL-кода оказывается исключительно простой.

.method public hidebysig static int32 Add(int32 a, int32 b) cil managed {
 .maxstack 2
 ldarg.0 // Загрузка 'a' в стек,
 ldarg.1 // Загрузка 'b' стек,
 add // Сложение этих значений.
 ret
}

Оглавление книги


Генерация: 1.139. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз