аккумуляторов 1 и 2 как целых чисел (+I) указывает CPU, что нужно сложить содержимое младшего слова аккумулятора 1 и младшего слова аккумулятора 2
исохранить результат в младшем слове аккумулятора 1. Эта операция заменяет старое содержимое младшего слова аккумулятора 1. Старое содержимое аккумулятора 2 и старшего слова аккумулятора 1 не меняются.
В контроллере с четырьмя аккумуляторами команда сложения аккумуляторов 1
и2 как целых чисел (+I) указывает CPU, что нужно сложить содержимое младшего слова аккумулятора 1 и младшего слова аккумулятора 2 и сохранить результат в младшем слове аккумулятора 1. Эта операция заменяет старое содержимое младшего слова аккумулятора 1. Затем она копирует содержимое аккумулятора 3 в аккумулятор 2, а содержимое аккумулятора 4 в аккумулятор 3. Аккумулятор 4 и старшее слово аккумулятора 1 не меняются
Анализ битов в слове состояния Арифметические операции влияют на следующие биты слова состояния:
• CC 1 и CC 0; |
|
|
|
|
|
• |
OV; |
|
|
|
|
• |
OS. |
|
|
|
|
Допустимый диапазон значений результата |
СС1 |
СС0 |
OV |
OS |
|
для целых (16 битов) и двойных целых (32 |
|
|
|
|
|
|
бита) чисел |
|
|
|
|
0 (ноль) |
|
0 |
0 |
0 |
− |
I: –32 768 ≤ результат < 0 (отрицательное число) |
0 |
1 |
0 |
− |
|
D: –2 147 483 648 ≤ результат < 0 (отрицательное |
|
|
|
|
|
число) |
|
|
|
|
|
I: 32 767 ≥ результат >0 (положительное число) |
1 |
0 |
0 |
− |
|
D: 2 147 483 647 ≥ результат >0 (положительное |
|
|
|
|
|
число) |
|
|
|
|
|
Диапазон недопустимых значений |
СС1 |
СС0 |
OV |
OS |
|
результата для целых (16 битов) и двойных |
|
|
|
|
|
|
целых (32 бита) чисел |
|
|
|
|
I: результат > 32 767 (положительное число) |
1 |
0 |
1 |
1 |
|
D: результат > 2 147 483 647 (положительное число) |
|
|
|
|
|
I: результат < -32 768 (отрицательное число) |
0 |
1 |
1 |
1 |
|
D: результат < –2 147 483 648 (отрицательное |
|
|
|
|
|
число) |
|
|
|
|
|
*D: результат = –4 294 967 296 |
0 |
0 |
1 |
1 |
|
/D или MOD: произошло деление на 0. |
1 |
1 |
1 |
1 |
|
20.ОПЕРАЦИИ НАД ЧИСЛАМИ С ПЛАВАЮЩЕЙ ТОЧКОЙ
10.1.ОСНОВНЫЕ АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ
Втаблице 10.1 перечислены команды AWL, которые вы можете использовать
100
для сложения, вычитания умножения и деления 32–битовых чисел с плавающей точкой в формате IEEE. Так как эти числа относятся к типу данных REAL (вещественные), то в качестве мнемонического сокращения для этих команд используется R.
|
Табл. 10.1 |
Команда |
Функция |
+R |
Складывает числа с плавающей точкой (32 бита, IEEE) в |
|
аккумуляторах 1 и 2 и сохраняет 32-битовый результат в |
|
аккумуляторе 1. |
-R |
Вычитает число с плавающей точкой (32 бита, IEEE) в |
|
аккумуляторе 1 из числа с плавающей точкой (32 бита, IEEE) в |
|
аккумуляторе 2 и сохраняет 32-битовый результат в аккумуляторе |
|
1. |
*R |
Умножает число с плавающей точкой (32 бита, IEEE) в |
|
аккумуляторе 1 на число с плавающей точкой (32 бита, IEEE) в |
|
аккумуляторе 2 и сохраняет 32-битовый результат аккумуляторе 1. |
/R |
Делит число с плавающей точкой (32 бита, IEEE) в аккумуляторе 2 |
|
на число с плавающей точкой (32 бита, IEEE) в аккумуляторе 1. 32- |
|
битовый результат сохраняется в аккумуляторе 1. |
Связь операций с аккумуляторами такая же, как у операций с целыми числами. Арифметические операции комбинируют содержимое аккумуляторов 1 и 2. Результат сохраняется в аккумуляторе 1. Старое содержимое аккумулятора 1 сдвигается в аккумулятор 2. Содержимое аккумулятора 2 не меняется. В CPU с четырьмя аккумуляторами содержимое аккумулятора 3 копируется в аккумулятор 2, а содержимое аккумулятора 4 в аккумулятор 3. Старое содержимое аккумулятора 4 не меняется.
Допустимый диапазон результата для чисел |
СС1 |
СС0 |
OV |
OS |
с плавающей точкой (32 бита) |
|
|
|
|
+0, –0 (ноль) |
0 |
0 |
0 |
− |
–3.402823E+38 < результат< –1.175494E-38 |
0 |
1 |
0 |
− |
(отрицательное число) |
|
|
|
|
+1.175494E-38 < результат< 3.402823E+38 |
1 |
0 |
0 |
− |
(положительное число) |
|
|
|
|
|
|
|
|
|
Недопустимый диапазон результата для |
СС1 |
СС0 |
OV |
OS |
чисел с плавающей точкой (32 бита) |
|
|
|
|
–1.175494E-38 < результат< –1.401298E-45 |
0 |
0 |
1 |
1 |
(отрицательное число) потеря значимости |
|
|
|
|
+1.401298E-45 < результат< +1.175494E-38 |
0 |
0 |
1 |
1 |
(положительное число) потеря значимости |
|
|
|
|
101
результат < –3.402823E+38 |
0 |
1 |
1 |
1 |
(отрицательное число) переполнение |
|
|
|
|
результат > –3.402823E+38 |
1 |
0 |
1 |
1 |
(положительное число) переполнение |
|
|
|
|
10.2. ОБРАЗОВАНИЕ АБСОЛЮТНОЙ ВЕЛИЧИНЫ ЧИСЛА С ПЛАВАЮЩЕЙ ТОЧКОЙ
Существует команда Абсолютное значение вещественного числа (ABS) для образования абсолютного значения числа с плавающей точкой (32 бита, IEEE) в аккумуляторе 1. Абсолютная величина – это неотрицательное число, числовое значение которого равно данному числу с плавающей точкой. Для абсолютной величины знак числа (+ или -) не имеет значения, так, например, 5 – это абсолютная величина +5 и –5.
10.3. РАСШИРЕННЫЕ АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ
Табл. 10.2. перечисляет команды AWL, которые могут быть использованы для выполнения расширенного набора арифметических операций над числами с плавающей точкой.
|
Табл. 10.2 |
Команда |
Функция |
SQRT |
Вычисляет квадратный корень числа с плавающей точкой (32 бита, |
|
IEEE) в аккумуляторе 1 и сохраняет 32-битовый результат в |
|
аккумуляторе 1. |
SQR |
Вычисляет квадрат числа с плавающей точкой (32 бита, IEEE) в |
|
аккумуляторе 1 и сохраняет 32-битовый результат в аккумуляторе 1. |
LN |
Вычисляет натуральный логарифм числа с плавающей точкой (32 |
|
бита, IEEE) в аккумуляторе 1 и сохраняет 32-битовый результат в |
|
аккумуляторе 1. |
EXP |
Вычисляет экспоненциальное значение числа с плавающей точкой |
|
(32 бита, IEEE) по основанию Е и сохраняет 32-битовый результат в |
|
аккумуляторе 1. |
SIN |
Вычисляет синус числа с плавающей точкой (32 бита, IEEE) в |
|
аккумуляторе 1 и сохраняет 32-битовый результат в аккумуляторе 1. |
COS |
Вычисляет косинус числа с плавающей точкой (32 бита, IEEE) в |
|
аккумуляторе 1 и сохраняет 32-битовый результат в аккумуляторе 1. |
TAN |
Вычисляет тангенс числа с плавающей точкой (32 бита, IEEE) в |
|
аккумуляторе 1 и сохраняет 32-битовый результат в аккумуляторе 1. |
102
ASIN Вычисляет арксинус числа с плавающей точкой (32 бита, IEEE) в аккумуляторе 1 и сохраняет 32-битовый результат в аккумуляторе 1.
ACOS Вычисляет арккосинус числа с плавающей точкой (32 бита, IEEE) в аккумуляторе 1 и сохраняет 32-битовый результат в аккумуляторе 1.
ATAN Вычисляет арктангенс числа с плавающей точкой (32 бита, IEEE) в аккумуляторе 1 и сохраняет 32-битовый результат в аккумуляторе 1.
Команда SQR (квадрат) вычисляет квадрат числа с плавающей точкой (32 бита, IEEE) в аккумуляторе 1 и сохраняет 32-битовый результат в аккумуляторе 1. Команда SQR заменяет старое содержимое аккумулятора 1; содержимое аккумулятора 2, аккумулятора 3 и аккумулятора 4 не меняется.
Команда SQR следующим образом влияет на биты слова состояния:
Результат в аккумуляторе 1 |
СС1 |
СС0 |
OV |
OS |
+ qNaN |
1 |
1 |
1 |
1 |
+ бесконечность (переполнение) |
1 |
0 |
1 |
1 |
+ нормализован |
1 |
0 |
0 |
− |
+ не нормализован (потеря значимости) |
0 |
0 |
1 |
1 |
+ нуль |
0 |
0 |
0 |
− |
– qNaN |
1 |
1 |
1 |
1 |
Команда SQRT (квадратный корень) вычисляет квадратный корень числа с плавающей точкой (32 бита, IEEE) в аккумуляторе 1 и сохраняет 32-битовый результат в аккумуляторе 1. Входное значение должно быть больше или равно нулю. Команда SQRT заменяет старое содержимое аккумулятора 1; содержимое аккумулятора 2, аккумулятора 3 и аккумулятора 4 не меняется. Эта команда дает положительный результат, когда все операнды больше нуля («0»). Единственное исключение: квадратный корень из -0 равен -0.
Команда SQRT следующим образом влияет на биты слова состояния:
Результат в аккумуляторе 1 |
СС1 |
СС0 |
OV |
OS |
+ qNaN |
1 |
1 |
1 |
1 |
+ бесконечность (переполнение) |
1 |
0 |
1 |
1 |
+ нормализован |
1 |
0 |
0 |
− |
+ не нормализован (потеря значимости) |
0 |
0 |
1 |
1 |
+ нуль |
0 |
0 |
0 |
− |
− нуль |
0 |
0 |
0 |
− |
– qNaN |
1 |
1 |
1 |
1 |
Команда LN (натуральный логарифм) вычисляет натуральный логарифм числа с плавающей точкой (32 бита, IEEE) в аккумуляторе 1 и сохраняет 32битовый результат в аккумуляторе 1. Входное значение должно быть больше нуля. Команда LN заменяет старое содержимое аккумулятора 1; содержимое аккумулятора 2, аккумулятора 3 и аккумулятора 4 не меняется.
103
Команда LN следующим образом влияет на биты слова состояния:
Результат в аккумуляторе 1 |
СС1 |
СС0 |
OV |
OS |
+ qNaN |
1 |
1 |
1 |
1 |
+ бесконечность (переполнение) |
1 |
0 |
1 |
1 |
+ нормализован |
1 |
0 |
0 |
− |
+ не нормализован (потеря значимости) |
0 |
0 |
1 |
1 |
+ нуль |
0 |
0 |
0 |
− |
− нуль |
0 |
0 |
0 |
− |
− не нормализован (потеря значимости) |
0 |
0 |
1 |
1 |
− нормализован |
0 |
1 |
0 |
− |
− бесконечность (переполнение) |
0 |
1 |
1 |
1 |
– qNaN |
1 |
1 |
1 |
1 |
Команда EXP (экспоненциальное значение по основанию Е) вычисляет экспоненциальное значение числа с плавающей точкой (32 бита, IEEE) в аккумуляторе 1 по основанию Е (= 2,71828...) и сохраняет 32-битовый результат в аккумуляторе 1. Команда EXP заменяет старое содержимое аккумулятора 1; содержимое аккумулятора 2, аккумулятора 3 и аккумулятора 4 не меняется.
Команда EXP следующим образом влияет на биты слова состояния:
Результат в аккумуляторе 1 |
СС1 |
СС0 |
OV |
OS |
+ qNaN |
1 |
1 |
1 |
1 |
+ бесконечность (переполнение) |
1 |
0 |
1 |
1 |
+ нормализован |
1 |
0 |
0 |
− |
+ не нормализован (потеря значимости) |
0 |
0 |
1 |
1 |
+ нуль |
0 |
0 |
0 |
− |
– qNaN |
1 |
1 |
1 |
1 |
Тригонометрические функции углов, представленных в виде чисел с плавающей точкой (32 бита, IEEE). 32-битовый результат сохраняется в аккумуляторе 1, содержимое аккумулятора 2, аккумулятора 3 и аккумулятора 4 не меняется.
Команда |
Функция |
SIN |
Образовать синус числа с плавающей точкой, представляющего |
|
угол, выраженный в радианах. Сохранить угол в виде числа с |
|
плавающей точкой в аккумуляторе 1. |
COS |
Образовать косинус числа с плавающей точкой, представляющего |
|
104 |