Составители:
Рубрика:
числа с плавающей запятой могут дополнительно принимать значения
+inf (положительная бесконечность), -inf (отрицательная бесконечность)
и NaN (Not a Number – не число). Поэтому описание каждой инструкции
содержит две части: для целых чисел и для чисел с плавающей запятой.
При этом в описании используются следующие обозначения:
• I и J – целые числа со знаком, причем I < J;
• K и L – целые числа без знака, причем K < L;
• A и B – конечные числа с плавающей запятой (то есть они не рав-
ны NaN, +inf и -inf), причем A < B;
• C – любое число с плавающей запятой (может принимать значе-
ния NaN, +inf и -inf).
Common Intermediate Language
95
ющей запятой. При этом применение бинарной операции не допускается,
если тип одного ее операнда – целый, а другого – с плавающей запятой.
Тип результата бинарной операции зависит от типов операндов. Если
операнды целые, то и результат будет целый. Если операнды представля-
ют собой числа с плавающей запятой, то результатом будет являться чис-
ло с плавающей запятой.
В таблице 3.9 представлены базовые инструкции, выполняющие би-
нарные операции.
Таблица 3.9. Базовые бинарные арифметические операции
Инструкции, представленные в таблице 3.10, используются только
для целочисленных операндов. Они отличаются от базовых бинарных опе-
раций тем, что осуществляют контроль переполнения (при переполнении
генерируется исключение OverflowException).
Операции сдвига (см. таблицу 3.11) выполняют сдвиг значения пер-
вого операнда (value1) в нужную сторону на количество бит, указанное во
втором операнде (value2).
Операции, приведенные в таблице 3.12, выполняют сравнение значе-
ний своих операндов. Результатом сравнения являются числа 0 или 1 (ти-
па int32). Число 0 обозначает ложь, а число 1 – истину.
Семантика операций сравнения для чисел с плавающей запятой су-
щественно отличается от их семантики для целых чисел. Дело в том, что
94
CIL и системное программирование в Microsoft .NET
Код Инструкция Встроенный Описание
операнд
0x58 add – Сложение
0x59 sub – Вычитание
0x5A mul –Умножение
0x5B div –Деление
0x5C div.un – Деление беззнаковых целых чи-
сел
0x5D rem – Остаток от деления
0x5E rem.un – Остаток от деления беззнаковых
целых чисел
0x5F and –Побитовое И
0x60 or – Побитовое ИЛИ
0x61 xor – Побитовое ИСКЛЮЧАЮЩЕЕ
ИЛИ
Код Инструкция Встроенный Описание
операнд
0xD6 add.ovf – Сложение целых чисел со зна-
ком с контролем переполнения
0xD7 add.ovf.un – Сложение целых чисел без знака
с контролем переполнения
0xD8 mul.ovf –Умножение целых чисел со зна-
ком с контролем переполнения
0xD9 mul.ovf.un –Умножение целых чисел без зна-
ка с контролем переполнения
0xDA sub.ovf – Вычитание целых чисел со зна-
ком с контролем переполнения
0xDB sub.ovf.un – Вычитание целых чисел без зна-
ка с контролем переполнения
Код Инструкция Встроенный Описание
операнд
0x62 shl – Сдвиг целых чисел влево
0x63 shr –Сдвиг целых чисел со знаком
вправо
0x64 shr.un – Сдвиг целых чисел без знака
вправо
Таблица 3.10. Бинарные арифметические операции с контролем
переполнения
Таблица 3.11. Операции сдвига
94 CIL и системное программирование в Microsoft .NET Common Intermediate Language 95 ющей запятой. При этом применение бинарной операции не допускается, Таблица 3.10. Бинарные арифметические операции с контролем если тип одного ее операнда – целый, а другого – с плавающей запятой. переполнения Тип результата бинарной операции зависит от типов операндов. Если Код Инструкция Встроенный Описание операнды целые, то и результат будет целый. Если операнды представля- ют собой числа с плавающей запятой, то результатом будет являться чис- операнд ло с плавающей запятой. 0xD6 add.ovf – Сложение целых чисел со зна- В таблице 3.9 представлены базовые инструкции, выполняющие би- ком с контролем переполнения нарные операции. 0xD7 add.ovf.un – Сложение целых чисел без знака с контролем переполнения Таблица 3.9. Базовые бинарные арифметические операции 0xD8 mul.ovf – Умножение целых чисел со зна- Код Инструкция Встроенный Описание ком с контролем переполнения операнд 0xD9 mul.ovf.un – Умножение целых чисел без зна- 0x58 add – Сложение ка с контролем переполнения 0x59 sub – Вычитание 0xDA sub.ovf – Вычитание целых чисел со зна- 0x5A mul – Умножение ком с контролем переполнения 0x5B div – Деление 0xDB sub.ovf.un – Вычитание целых чисел без зна- 0x5C div.un – Деление беззнаковых целых чи- ка с контролем переполнения сел 0x5D rem – Остаток от деления Таблица 3.11. Операции сдвига 0x5E rem.un – Остаток от деления беззнаковых Код Инструкция Встроенный Описание целых чисел операнд 0x5F and – Побитовое И 0x62 shl – Сдвиг целых чисел влево 0x60 or – Побитовое ИЛИ 0x63 shr – Сдвиг целых чисел со знаком 0x61 xor – Побитовое ИСКЛЮЧАЮЩЕЕ вправо ИЛИ 0x64 shr.un – Сдвиг целых чисел без знака вправо Инструкции, представленные в таблице 3.10, используются только для целочисленных операндов. Они отличаются от базовых бинарных опе- числа с плавающей запятой могут дополнительно принимать значения раций тем, что осуществляют контроль переполнения (при переполнении +inf (положительная бесконечность), -inf (отрицательная бесконечность) генерируется исключение OverflowException). и NaN (Not a Number – не число). Поэтому описание каждой инструкции Операции сдвига (см. таблицу 3.11) выполняют сдвиг значения пер- содержит две части: для целых чисел и для чисел с плавающей запятой. вого операнда (value1) в нужную сторону на количество бит, указанное во При этом в описании используются следующие обозначения: втором операнде (value2). • I и J – целые числа со знаком, причем I < J; Операции, приведенные в таблице 3.12, выполняют сравнение значе- • K и L – целые числа без знака, причем K < L; ний своих операндов. Результатом сравнения являются числа 0 или 1 (ти- • A и B – конечные числа с плавающей запятой (то есть они не рав- па int32). Число 0 обозначает ложь, а число 1 – истину. ны NaN, +inf и -inf), причем A < B; Семантика операций сравнения для чисел с плавающей запятой су- • C – любое число с плавающей запятой (может принимать значе- щественно отличается от их семантики для целых чисел. Дело в том, что ния NaN, +inf и -inf).
Страницы
- « первая
- ‹ предыдущая
- …
- 52
- 53
- 54
- 55
- 56
- …
- следующая ›
- последняя »