Составители:
Рубрика:
то есть например, если op соответствует операции вычитания, то из value1
вычитается value2.
Некоторые бинарные операции могут использоваться для операндов
различных типов. Другими словами, в коде инструкции не содержится ин-
формации о типах ее операндов, так как эти типы определяются на этапе
JIT-компиляции. Поэтому, например, одну и ту же инструкцию add можно
использовать для сложения как двух целых чисел, так и двух чисел с плава-
Common Intermediate Language
93
• инструкция ckfinite, проверяющая конечность значений с пла-
вающей точкой;
• инструкции преобразования значений.
3.2.2.1. Бинарные арифметические операции
Бинарные арифметические операции потребляют со стека вычисле-
ний два операнда. Соответственно, диаграмма стека для таких операций
выглядит следующим образом:
... , value1 , value2 -> ... , result
Действие бинарных операций можно записать как
result := value1 op value2,
92
CIL и системное программирование в Microsoft .NET
Код Инструкция Встроенный Описание
операнд
0x46 ldind.i1 – Косвенная загрузка значения
int8
0x47 ldind.u1 – Косвенная загрузка значения
unsigned int8
0x48 ldind.i2 – Косвенная загрузка значения
int16
0x49 ldind.u2 – Косвенная загрузка значения
unsigned int16
0x4A ldind.i4 – Косвенная загрузка значения
int32
0x4B ldind.u4 – Косвенная загрузка значения
unsigned int32
0x4C ldind.i8 – Косвенная загрузка значения
(ldind.u8) int64 и unsigned int64
0x4D ldind.i – Косвенная загрузка значения
native int
0x4E ldind.r4 – Косвенная загрузка значения
float32
0x4F ldind.r8 – Косвенная загрузка значения
float64
0x50 ldind.ref – Косвенная загрузка объектной
ссылки
Таблица.3.6. Инструкции для косвенной загрузки значений
Код Инструкция Встроенный Описание
операнд
0x51 stind.ref – Косвенное сохранение объект-
ной ссылки
0x52 stind.i1 – Косвенное сохранение значения
int8
0x53 stind.i2 – Косвенное сохранение значения
int16
0x54 stind.i4 – Косвенное сохранение значения
int32
0x55 stind.i8 – Косвенное сохранение значения
int64
0x56 stind.r4 – Косвенное сохранение значения
float32
0x57 stind.r8 – Косвенное сохранение значения
float64
0xDF stind.i – Косвенное сохранение значения
native int
Таблица 3.7. Инструкции для косвенного сохранения значений
Код Инструкция Встроенный Описание
операнд
0x25 dup – Копирование значения на вер-
шине стека:... , value -> ... ,
value, value
0x26 pop –Удаление значения с вершины
стека:... , value -> ...
Таблица 3.8. Специальные инструкции для работы со стеком.
92 CIL и системное программирование в Microsoft .NET Common Intermediate Language 93 Таблица.3.6. Инструкции для косвенной загрузки значений Таблица 3.7. Инструкции для косвенного сохранения значений Код Инструкция Встроенный Описание Код Инструкция Встроенный Описание операнд операнд 0x46 ldind.i1 – Косвенная загрузка значения 0x51 stind.ref – Косвенное сохранение объект- int8 ной ссылки 0x47 ldind.u1 – Косвенная загрузка значения 0x52 stind.i1 – Косвенное сохранение значения unsigned int8 int8 0x48 ldind.i2 – Косвенная загрузка значения 0x53 stind.i2 – Косвенное сохранение значения int16 int16 0x49 ldind.u2 – Косвенная загрузка значения 0x54 stind.i4 – Косвенное сохранение значения unsigned int16 int32 0x4A ldind.i4 – Косвенная загрузка значения 0x55 stind.i8 – Косвенное сохранение значения int32 int64 0x4B ldind.u4 – Косвенная загрузка значения 0x56 stind.r4 – Косвенное сохранение значения unsigned int32 float32 0x4C ldind.i8 – Косвенная загрузка значения 0x57 stind.r8 – Косвенное сохранение значения (ldind.u8) int64 и unsigned int64 float64 0x4D ldind.i – Косвенная загрузка значения 0xDF stind.i – Косвенное сохранение значения native int native int 0x4E ldind.r4 – Косвенная загрузка значения float32 Таблица 3.8. Специальные инструкции для работы со стеком. 0x4F ldind.r8 – Косвенная загрузка значения Код Инструкция Встроенный Описание float64 операнд 0x50 ldind.ref – Косвенная загрузка объектной 0x25 dup – Копирование значения на вер- ссылки шине стека:... , value -> ... , value, value • инструкция ckfinite, проверяющая конечность значений с пла- 0x26 pop – Удаление значения с вершины вающей точкой; стека:... , value -> ... • инструкции преобразования значений. 3.2.2.1. Бинарные арифметические операции то есть например, если op соответствует операции вычитания, то из value1 Бинарные арифметические операции потребляют со стека вычисле- вычитается value2. ний два операнда. Соответственно, диаграмма стека для таких операций Некоторые бинарные операции могут использоваться для операндов выглядит следующим образом: различных типов. Другими словами, в коде инструкции не содержится ин- ... , value1 , value2 -> ... , result формации о типах ее операндов, так как эти типы определяются на этапе Действие бинарных операций можно записать как JIT-компиляции. Поэтому, например, одну и ту же инструкцию add можно result := value1 op value2, использовать для сложения как двух целых чисел, так и двух чисел с плава-
Страницы
- « первая
- ‹ предыдущая
- …
- 51
- 52
- 53
- 54
- 55
- …
- следующая ›
- последняя »