Составители:
Рубрика:
3.2.3.3. Инструкция switch
Инструкция множественного выбора switch представлена в таблице
3.22. Встроенный операнд этой инструкции имеет сложный формат: пер-
вое 32-разрядное слово содержит размер N таблицы переходов, после чего
следует N 32-рязрядных относительных смещений целей перехода.
Инструкция switch берет со стека вычислений один операнд. Обо-
значим этот операнд через I. Значение I интерпретируется как целое чис-
ло без знака и сравнивается с N. Если I < N, то управление передается на
I-тую цель в таблице переходов (нумерация целей осуществляется с 0). Ес-
Common Intermediate Language
103
Инструкции brfalse присвоены два псевдонима: brnull и brzero,
имеющих одинаковый с ней код. Аналогично, brfalse.s имеет псевдони-
мы brnull.s и brzero.s.
Кроме базовых, существуют дополнительные инструкции условного
перехода, потребляющие сразу два операнда. Каждая из дополнительных
инструкций условного перехода является сокращенной записью последова-
тельности из двух инструкций, первая из которых является бинарной опе-
рацией сравнения, а вторая – базовой инструкцией условного перехода.
Таким образом, дополнительные инструкции условного перехода
имеют следующую диаграмму стека:
... , value1 , value2 -> ...
Длинные варианты дополнительных инструкций условного перехода
перечислены в таблице 3.20, а короткие – в таблице 3.21. В описании ка-
ждой инструкции приводится эквивалентная ей комбинация бинарной
операции сравнения и базовой инструкции условного перехода. В связи с
тем, что семантика операций сравнения для целых чисел существенно от-
личается от их семантики для чисел с плавающей запятой (см. пункт
3.2.2.1), для инструкций bge, ble, bge.un и ble.un (и для коротких вариан-
тов этих инструкций) приводится по две эквивалентные им комбинации.
Комбинация, помеченная меткой (int), используется в случае целых опе-
рандов, а комбинация, помеченная меткой (F), используется в том случае,
если операнды представляют собой числа с плавающей запятой.
Таблица 3.20. Дополнительные длинные инструкции условного перехода
102
CIL и системное программирование в Microsoft .NET
Код Инструкция Встроенный Описание
операнд
0x3B beq int32 ceq; brtrue
0x3C bge int32 (int): clt; brfalse
(F) : clt.un; brfalse
0x3D bgt int32 cgt; brtrue
0x3E ble int32 (int): cgt; brfalse
(F): cgt.un; brfalse
0x3F blt int32 clt; brtrue
0x40 bne.un int32 ceq; brfalse
0x41 bge.un int32 (int): clt.un; brfalse
(F): clt; brfalse
0x42 bgt.un int32 cgt.un; brtrue
0x43 ble.un int32 (int): cgt.un; brfalse
(F): cgt; brfalse
0x44 blt.un int32 clt.un; brtrue
Код Инструкция Встроенный Описание
операнд
0x2E beq.s int8 ceq; brtrue.s
0x2F bge.s int8 (int): clt; brfalse.s
(F): clt.un; brfalse.s
0x30 bgt.s int8 cgt; brtrue.s
0x31 ble.s int8 (int): cgt; brfalse.s
(F): cgt.un; brfalse.s
0x32 blt.s int8 clt; brtrue.s
0x33 bne.un.s int8 ceq; brfalse.s
0x34 bge.un.s int8 (int): clt.un; brfalse.s
(F): clt; brfalse.s
0x35 bgt.un.s int8 cgt.un; brtrue.s
0x36 ble.un.s int8 (int): cgt.un; brfalse.s
(F): cgt; brfalse.s
0x37 blt.un.s int8 clt.un; brtrue.s
Таблица 3.21. Дополнительные короткие инструкции безусловного
перехода
Таблица 3.22. Инструкция switch
Код Инструкция Встроенный Описание
операнд
0x42 switch unsigned Осуществляет переход по
int32, таблице переходов
int32 ... в соответствии со значением
int32 на вершине стека
102 CIL и системное программирование в Microsoft .NET Common Intermediate Language 103 Инструкции brfalse присвоены два псевдонима: brnull и brzero, Таблица 3.21. Дополнительные короткие инструкции безусловного имеющих одинаковый с ней код. Аналогично, brfalse.s имеет псевдони- перехода мы brnull.s и brzero.s. Кроме базовых, существуют дополнительные инструкции условного Код Инструкция Встроенный Описание перехода, потребляющие сразу два операнда. Каждая из дополнительных операнд инструкций условного перехода является сокращенной записью последова- 0x2E beq.s int8 ceq; brtrue.s тельности из двух инструкций, первая из которых является бинарной опе- 0x2F bge.s int8 (int): clt; brfalse.s рацией сравнения, а вторая – базовой инструкцией условного перехода. (F): clt.un; brfalse.s Таким образом, дополнительные инструкции условного перехода имеют следующую диаграмму стека: 0x30 bgt.s int8 cgt; brtrue.s ... , value1 , value2 -> ... 0x31 ble.s int8 (int): cgt; brfalse.s Длинные варианты дополнительных инструкций условного перехода (F): cgt.un; brfalse.s перечислены в таблице 3.20, а короткие – в таблице 3.21. В описании ка- 0x32 blt.s int8 clt; brtrue.s ждой инструкции приводится эквивалентная ей комбинация бинарной 0x33 bne.un.s int8 ceq; brfalse.s операции сравнения и базовой инструкции условного перехода. В связи с 0x34 bge.un.s int8 (int): clt.un; brfalse.s тем, что семантика операций сравнения для целых чисел существенно от- личается от их семантики для чисел с плавающей запятой (см. пункт (F): clt; brfalse.s 3.2.2.1), для инструкций bge, ble, bge.un и ble.un (и для коротких вариан- 0x35 bgt.un.s int8 cgt.un; brtrue.s тов этих инструкций) приводится по две эквивалентные им комбинации. 0x36 ble.un.s int8 (int): cgt.un; brfalse.s Комбинация, помеченная меткой (int), используется в случае целых опе- (F): cgt; brfalse.s рандов, а комбинация, помеченная меткой (F), используется в том случае, 0x37 blt.un.s int8 clt.un; brtrue.s если операнды представляют собой числа с плавающей запятой. Таблица 3.20. Дополнительные длинные инструкции условного перехода 3.2.3.3. Инструкция switch Инструкция множественного выбора switch представлена в таблице Код Инструкция Встроенный Описание 3.22. Встроенный операнд этой инструкции имеет сложный формат: пер- операнд вое 32-разрядное слово содержит размер N таблицы переходов, после чего 0x3B beq int32 ceq; brtrue следует N 32-рязрядных относительных смещений целей перехода. 0x3C bge int32 (int): clt; brfalse Инструкция switch берет со стека вычислений один операнд. Обо- (F) : clt.un; brfalse значим этот операнд через I. Значение I интерпретируется как целое чис- 0x3D bgt int32 cgt; brtrue ло без знака и сравнивается с N. Если I < N, то управление передается на 0x3E ble int32 (int): cgt; brfalse I-тую цель в таблице переходов (нумерация целей осуществляется с 0). Ес- (F): cgt.un; brfalse Таблица 3.22. Инструкция switch 0x3F blt int32 clt; brtrue 0x40 bne.un int32 ceq; brfalse Код Инструкция Встроенный Описание 0x41 bge.un int32 (int): clt.un; brfalse операнд (F): clt; brfalse 0x42 bgt.un int32 cgt.un; brtrue 0x42 switch unsigned Осуществляет переход по 0x43 ble.un int32 (int): cgt.un; brfalse int32, таблице переходов (F): cgt; brfalse int32 ... в соответствии со значением 0x44 blt.un int32 clt.un; brtrue int32 на вершине стека
Страницы
- « первая
- ‹ предыдущая
- …
- 56
- 57
- 58
- 59
- 60
- …
- следующая ›
- последняя »