Составители:
Рубрика:
• инструкции условного перехода;
• инструкция множественного выбора switch;
• инструкция вызова метода call;
• инструкция возврата из метода ret.
3.2.3.1. Безусловный переход
Существуют две инструкции безусловного перехода (см. таблицу
3.18), которые различаются только разрядностью встроенного операнда
(int8 и int32). При этом встроенный операнд этих инструкций обознача-
ет относительное смещение цели перехода.
Таблица 3.18. Инструкции безусловного перехода
3.2.3.2. Условный переход
Базовые инструкции условного перехода, приведенные в таблице
3.19, потребляют со стека вычислений один операнд и, в зависимости от
его значения, осуществляют или не осуществляют переход по указанному
во встроенном операнде относительному адресу. Диаграмма стека для этих
инструкций выглядит следующим образом:
... , value -> ...
Как и в случае инструкций безусловного перехода, существуют ко-
роткий и длинный варианты инструкций условного перехода, которые от-
личаются только разрядностью встроенного операнда (int8 и int32).
Таблица 3.19. Базовые инструкции условного перехода
Common Intermediate Language
101
3.2.3. Инструкции для организации передачи управления
Инструкции для организации передачи управления можно разделить
на пять категорий:
• инструкции безусловного перехода;
100
CIL и системное программирование в Microsoft .NET
Код Инструкция Встроенный Описание
операнд
0xB3 conv.ovf.i1 – Преобразование к int8
0xB4 conv.ovf.u1 – Преобразование к unsigned int8
0xB5 conv.ovf.i2 – Преобразование к int16
0xB6 conv.ovf.u2 – Преобразование к unsigned int16
0xB7 conv.ovf.i4 – Преобразование к int32
0xB8 conv.ovf.u4 – Преобразование к unsigned int32
0xB9 conv.ovf.i8 – Преобразование к int64
0xBA conv.ovf.u8 – Преобразование к unsigned int64
0xD4 conv.ovf.i – Преобразование к native int
0xD5 conv.ovf.u – Преобразование к unsigned
native int
Таблица 3.16. Преобразование значений со знаком с контролем
переполнения
Код Инструкция Встроенный Описание
операнд
0x82 conv.ovf.i1.un – Преобразование к int8
0x83 conv.ovf.i2.un – Преобразование к int16
0x84 conv.ovf.i4.un – Преобразование к int32
0x85 conv.ovf.i8.un – Преобразование к int64
0x86 conv.ovf.u1.un – Преобразование к unsigned int8
0x87 conv.ovf.u2.un – Преобразование к unsigned int16
0x88 conv.ovf.u4.un – Преобразование к unsigned int32
0x89 conv.ovf.u8.un – Преобразование к unsigned int64
0x8A conv.ovf.i.un – Преобразование к native int
0x8B conv.ovf.u.un – Преобразование к unsigned
native int
Таблица 3.17. Преобразование беззнаковых значений с контролем пе-
реполнения
Код Инструкция Встроенный Описание
операнд
0x2B br.s int8 Короткий безусловный переход
0x38 br int32 Длинный безусловный переход
Код Инструкция Встроенный Описание
операнд
0x2C brfalse.s int8 Короткий условный переход, ес-
ли значение равно 0 или null
0x2D brtrue.s int8 Короткий условный переход, ес-
ли значение не равно 0 или null
0x39 brfalse int32 Длинный условный переход, ес-
ли значение равно 0 или null
0x3A brtrue int32 Длинный условный переход, ес-
ли значение не равно 0 или null
100 CIL и системное программирование в Microsoft .NET Common Intermediate Language 101 Таблица 3.16. Преобразование значений со знаком с контролем • инструкции условного перехода; переполнения • инструкция множественного выбора switch; • инструкция вызова метода call; Код Инструкция Встроенный Описание • инструкция возврата из метода ret. операнд 0xB3 conv.ovf.i1 – Преобразование к int8 3.2.3.1. Безусловный переход 0xB4 conv.ovf.u1 – Преобразование к unsigned int8 Существуют две инструкции безусловного перехода (см. таблицу 3.18), которые различаются только разрядностью встроенного операнда 0xB5 conv.ovf.i2 – Преобразование к int16 (int8 и int32). При этом встроенный операнд этих инструкций обознача- 0xB6 conv.ovf.u2 – Преобразование к unsigned int16 ет относительное смещение цели перехода. 0xB7 conv.ovf.i4 – Преобразование к int32 0xB8 conv.ovf.u4 – Преобразование к unsigned int32 Таблица 3.18. Инструкции безусловного перехода 0xB9 conv.ovf.i8 – Преобразование к int64 Код Инструкция Встроенный Описание 0xBA conv.ovf.u8 – Преобразование к unsigned int64 операнд 0xD4 conv.ovf.i – Преобразование к native int 0x2B br.s int8 Короткий безусловный переход 0xD5 conv.ovf.u – Преобразование к unsigned 0x38 br int32 Длинный безусловный переход native int 3.2.3.2. Условный переход Таблица 3.17. Преобразование беззнаковых значений с контролем пе- Базовые инструкции условного перехода, приведенные в таблице реполнения 3.19, потребляют со стека вычислений один операнд и, в зависимости от его значения, осуществляют или не осуществляют переход по указанному Код Инструкция Встроенный Описание во встроенном операнде относительному адресу. Диаграмма стека для этих операнд инструкций выглядит следующим образом: 0x82 conv.ovf.i1.un – Преобразование к int8 ... , value -> ... 0x83 conv.ovf.i2.un – Преобразование к int16 Как и в случае инструкций безусловного перехода, существуют ко- 0x84 conv.ovf.i4.un – Преобразование к int32 роткий и длинный варианты инструкций условного перехода, которые от- личаются только разрядностью встроенного операнда (int8 и int32). 0x85 conv.ovf.i8.un – Преобразование к int64 0x86 conv.ovf.u1.un – Преобразование к unsigned int8 Таблица 3.19. Базовые инструкции условного перехода 0x87 conv.ovf.u2.un – Преобразование к unsigned int16 Код Инструкция Встроенный Описание 0x88 conv.ovf.u4.un – Преобразование к unsigned int32 операнд 0x89 conv.ovf.u8.un – Преобразование к unsigned int64 0x2C brfalse.s int8 Короткий условный переход, ес- 0x8A conv.ovf.i.un – Преобразование к native int ли значение равно 0 или null 0x8B conv.ovf.u.un – Преобразование к unsigned 0x2D brtrue.s int8 Короткий условный переход, ес- native int ли значение не равно 0 или null 0x39 brfalse int32 Длинный условный переход, ес- 3.2.3. Инструкции для организации передачи управления ли значение равно 0 или null Инструкции для организации передачи управления можно разделить на пять категорий: 0x3A brtrue int32 Длинный условный переход, ес- • инструкции безусловного перехода; ли значение не равно 0 или null
Страницы
- « первая
- ‹ предыдущая
- …
- 55
- 56
- 57
- 58
- 59
- …
- следующая ›
- последняя »