Common Intermediate Language и системное программирование в Microsoft.Net. Макаров А.В - 57 стр.

UptoLike

инструкции условного перехода;
инструкция множественного выбора 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