Составители:
Рубрика:
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
- …
- следующая ›
- последняя »