Составители:
Рубрика:
Common Intermediate Language
89
3.2. Язык CIL: инструкции общего назначения
В этом разделе мы рассмотрим ту часть инструкций языка CIL, кото-
рая служит для организации вычислений, а именно:
• инструкции для загрузки и сохранения значений;
• арифметические инструкции;
• инструкции для организации передачи управления.
3.2.1. Инструкции для загрузки и сохранения значений
Инструкции для загрузки и сохранения значений предназначены
главным образом для обмена значениями между стеком вычислений и па-
мятью, то есть они выполняют копирование значений на стек вычислений
и сохранение значений со стека вычислений в память.
3.2.1.1. Загрузка констант
Эта группа инструкций (см. таблицу 3.2) служит для загрузки кон-
стантных значений на стек вычислений. При этом значения кодируются в
самих инструкциях в виде их кодов или встроенных операндов.
Диаграмма стека для всех инструкций этой группы выглядит следую-
щим образом:
... -> ... , constant
3.2.1.2. Работа с переменными и параметрами методов
Локальные переменные и параметры методов имеют номера от 0 до
65534. Существуют три варианта инструкций для работы с переменными и
параметрами:
• сокращенные инструкции, которые работают с переменными и
параметрами, имеющими номера от 0 до 3;
• сокращенные инструкции, допускающие номера переменных и
параметров от 0 до 255;
• обычные инструкции, работающие с любыми переменными и
параметрами.
В таблице 3.3 перечислены инструкции, выполняющие загрузку зна-
чений переменных и параметров на стек вычислений. Все они имеют сле-
дующую диаграмму стека:
... -> ... , value
Кроме инструкций, загружающих значения переменных и парамет-
ров, существуют инструкции, загружающие на вершину стека вычислений
адреса переменных и параметров (см. таблицу 3.4). Загружаемые адреса
имеют тип управляемых указателей. Диаграмма стека для этих инструкций
выглядит следующим образом:
... -> ... , address
88
CIL и системное программирование в Microsoft .NET
Код Инструкция Встроенный Описание
операнд
0x14 ldnull – Загрузка константы null
0x15 ldc.m1 – Загрузка целого числа -1 (int32)
0x16 – 0x1E ldc.0 – – Загрузка целых чисел
ldc.8 от 0 до 8 (int32)
0x1F ldc.s int8 Загрузка целых чисел от -128 до
127 (int32)
0x20 ldc.i4 int32 Загрузка целых чисел (int32)
0x21 ldc.i8 int64 Загрузка целых чисел (int64)
0x22 ldc.r4 float32 Загрузка чисел с плавающей за-
пятой (F)
0x23 ldc.r8 float64 Загрузка чисел с плавающей за-
пятой (F)
Таблица 3.3. Инструкции для загрузки параметров и локальных
переменных
Код Инструкция Встроенный Описание
операнд
0x02 – 0x05 ldarg.0 –– Загрузка параметров с номерами
ldarg.3 от 0 до 3
0x06 – 0x09 ldloc.0 — – Загрузка локальных переменных
ldloc.3 с номерами от 0 до 3
0x0E ldarg.s unsigned Загрузка параметров с номерами
int8 от 0 до 255
0x11 ldloc.s unsigned Загрузка локальных переменных
int8 с номерами от 0 до 255
0xFE 0x09 ldarg unsigned Загрузка параметров с номерами
int16 от 0 до 65534
0xFE 0x0C ldloc unsigned Загрузка локальных переменных
int16 с номерами от 0 до 65534
Таблица 3.2. Инструкции для загрузки констант
88 CIL и системное программирование в Microsoft .NET Common Intermediate Language 89
3.2. Язык CIL: инструкции общего назначения Таблица 3.2. Инструкции для загрузки констант
В этом разделе мы рассмотрим ту часть инструкций языка CIL, кото- Код Инструкция Встроенный Описание
рая служит для организации вычислений, а именно: операнд
• инструкции для загрузки и сохранения значений; 0x14 ldnull – Загрузка константы null
• арифметические инструкции; 0x15 ldc.m1 – Загрузка целого числа -1 (int32)
• инструкции для организации передачи управления. 0x16 – 0x1E ldc.0 – – Загрузка целых чисел
3.2.1. Инструкции для загрузки и сохранения значений ldc.8 от 0 до 8 (int32)
Инструкции для загрузки и сохранения значений предназначены 0x1F ldc.s int8 Загрузка целых чисел от -128 до
главным образом для обмена значениями между стеком вычислений и па- 127 (int32)
мятью, то есть они выполняют копирование значений на стек вычислений 0x20 ldc.i4 int32 Загрузка целых чисел (int32)
и сохранение значений со стека вычислений в память. 0x21 ldc.i8 int64 Загрузка целых чисел (int64)
0x22 ldc.r4 float32 Загрузка чисел с плавающей за-
3.2.1.1. Загрузка констант
пятой (F)
Эта группа инструкций (см. таблицу 3.2) служит для загрузки кон-
стантных значений на стек вычислений. При этом значения кодируются в 0x23 ldc.r8 float64 Загрузка чисел с плавающей за-
самих инструкциях в виде их кодов или встроенных операндов. пятой (F)
Диаграмма стека для всех инструкций этой группы выглядит следую-
щим образом:
... -> ... , constant Таблица 3.3. Инструкции для загрузки параметров и локальных
переменных
3.2.1.2. Работа с переменными и параметрами методов
Локальные переменные и параметры методов имеют номера от 0 до Код Инструкция Встроенный Описание
65534. Существуют три варианта инструкций для работы с переменными и операнд
параметрами: 0x02 – 0x05 ldarg.0 – – Загрузка параметров с номерами
• сокращенные инструкции, которые работают с переменными и ldarg.3 от 0 до 3
параметрами, имеющими номера от 0 до 3; 0x06 – 0x09 ldloc.0 — – Загрузка локальных переменных
• сокращенные инструкции, допускающие номера переменных и
ldloc.3 с номерами от 0 до 3
параметров от 0 до 255;
• обычные инструкции, работающие с любыми переменными и 0x0E ldarg.s unsigned Загрузка параметров с номерами
параметрами. int8 от 0 до 255
В таблице 3.3 перечислены инструкции, выполняющие загрузку зна- 0x11 ldloc.s unsigned Загрузка локальных переменных
чений переменных и параметров на стек вычислений. Все они имеют сле- int8 с номерами от 0 до 255
дующую диаграмму стека: 0xFE 0x09 ldarg unsigned Загрузка параметров с номерами
... -> ... , value
int16 от 0 до 65534
Кроме инструкций, загружающих значения переменных и парамет-
ров, существуют инструкции, загружающие на вершину стека вычислений 0xFE 0x0C ldloc unsigned Загрузка локальных переменных
адреса переменных и параметров (см. таблицу 3.4). Загружаемые адреса int16 с номерами от 0 до 65534
имеют тип управляемых указателей. Диаграмма стека для этих инструкций
выглядит следующим образом:
... -> ... , address
Страницы
- « первая
- ‹ предыдущая
- …
- 49
- 50
- 51
- 52
- 53
- …
- следующая ›
- последняя »
