Двойное целое в вещественное: DTR
Команда Двойное целое в вещественное (DTR) преобразует 32–битовое целое число, находящееся в аккумуляторе 1 в 32–битовое число с плавающей точкой в формате IEEE (вещественное число). Если необходимо, команда округляет результат. Результат преобразования сохраняется в аккумуляторе 1.
22.2. ПРЕОБРАЗОВАНИЕ ЧИСЕЛ С ПЛАВАЮЩЕЙ ТОЧКОЙ (32 БИТА) В ЦЕЛЫЕ ЧИСЛА (32 БИТА)
Следующие команды можно использовать для преобразования 32–битового числа с плавающей точкой в формате IEEE, находящегося в аккумуляторе 1, в 32–битовое целое (двойное целое) число. Отдельные команды отличаются друг от друга методом округления.
Мнемоника |
Команда |
|
Функция |
|
RND |
Округление |
|
Эта команда округляет преобразуемое число |
|
|
|
|
|
до ближайшего целого числа. Если дробная |
|
|
|
|
часть преобразуемого числа находится точно |
|
|
|
|
между четным и нечетным результатом, |
|
|
|
|
команда выбирает четный результат. |
RND+ |
Округление |
до |
Эта команда округляет преобразуемое число |
|
|
ближайшего |
|
до наименьшего целого числа, большего или |
|
|
большего |
|
|
равного преобразуемому числу с плавающей |
|
двойного |
целого |
точкой. |
|
|
числа |
|
|
|
− |
Округление |
до |
Эта команда округляет преобразуемое число |
|
RND |
ближайшего |
|
до наибольшего целого числа, меньшего или |
|
|
|
|||
|
меньшего |
|
|
равного преобразуемому числу с плавающей |
|
двойного |
целого |
точкой. |
|
|
числа |
|
|
|
TRUNC |
Округление |
|
Эта команда преобразует целочисленную |
|
|
отбрасыванием |
|
составляющую числа с плавающей точкой. |
|
Результат преобразования сохраняется в аккумуляторе 1. Если преобразуется число, не являющееся числом с плавающей точкой, или число с плавающей точкой, которое не может быть преобразовано в целое число (32 бита), то преобразование не выполняется и появляется указание о переполнении.
Пример.
L MD10 Загрузить значение числа с плавающей точкой (32 бита, IEEE) из двойного слова памяти MD10 в аккумулятор 1.
110
RND Преобразовать число с плавающей точкой (32 бита) в целое число (32 бита), округлить до ближайшего целого числа и сохранить результат в аккумуляторе 1.
T MD20 Передать результат в двойное слово памяти MD20.
MD 10 |
3 |
3 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
|
|
|
|
|
|
|
|
|
|
|
1 |
0 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
||
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
||
|
|||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MD 20 |
3 |
3 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
|
|
|
|
|
|
|
|
|
|
|
1 |
0 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
||
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
||
|
Рис. 12.2. Использование команды RND для преобразования положительного числа с плавающей точкой (32 бита, IEEE) в 32–битовое целое число
В этом примере, в аккумулятор было загружено число +100,5 из двойного слова памяти меркеров MD10, и, после преобразования, целое число 100 передано по адресу MD20. В случае преобразования отрицательного числа (например - 100,5), результат преобразования будет равен -100, и содержимое памяти показано на рис 12.3.
MD 10 |
3 |
3 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
|
|
|
|
|
|
|
|
|
|
|
1 |
0 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
||
1 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
||
|
|||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MD 20 |
3 |
3 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
|
|
|
|
|
|
|
|
|
|
|
1 |
0 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
||
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
||
|
Рис. 12.3. Использование команды RND для преобразования отрицательного числа с плавающей точкой (32 бита, IEEE) в 32–битовое целое число
Следует особенно сказать о формате числа с плавающей точкой.
Бит 31 − бит знака мантиссы (значение 1 соответствует отрицательному знаку). Биты 23 ÷ 30 − порядок мантиссы.
Биты 0 ÷ 22 − собственно мантисса.
Рассмотрим представление числа 10,0 в памяти контроллера (рис. 12.4)
111
Десятичное значение − 10,0
Шестнадцатерич |
|
|
|
|
4 |
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
0 |
|
|
|
|
|
|
0 |
|
|
|
0 |
|
|
|
|
0 |
|
|||||||||||||||
ное значение |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Биты |
|
|
|
3 |
|
3 |
|
|
2 |
|
2 |
|
2 |
|
2 |
|
|
2 |
|
|
2 |
|
2 |
|
2 |
|
|
2 |
|
|
2 |
|
1 |
|
1 |
|
|
1 |
|
1 |
|
1 |
|
1 |
|
|
1 |
|
1 |
|
1 |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||||
|
|
|
1 |
|
0 |
|
|
9 |
|
8 |
|
7 |
|
6 |
|
|
5 |
|
|
4 |
|
3 |
|
2 |
|
|
1 |
|
|
0 |
|
9 |
|
8 |
|
|
7 |
|
6 |
|
5 |
|
4 |
|
|
3 |
|
2 |
|
1 |
|
0 |
|
9 |
8 |
7 |
6 |
|
5 |
4 |
|
3 |
2 |
|
1 |
0 |
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
0 |
|
1 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
1 |
|
0 |
|
0 |
|
1 |
|
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
Порядок: e (8 бит) |
|
|
|
|
|
|
|
|
|
|
Мантисса (дробная часть): f |
(23 бита) |
|||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Знак мантиссы: s (1 бит) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||
|
e = 27 +21 =130 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
f |
= 2−2 |
= 0.25 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||
|
1. f |
|
= 2e−ñì åù |
|
=1.25*2130−127 |
=1.25*23 =10.0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||
Рис. 12.4. Представление числа с плавающей точкой в памяти контроллера |
|
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Знак может принимать значения "0" (положительное число) и "1" (отрицательное число). Экспонента сохраняется как константа, увеличенная на 1 (смещена на +127), так что она имеет диапазон значений от 0 до 255. Мантисса представляет собой дробную часть. Целая часть мантиссы (integer component) не хранится, так как она или всегда равна 1 (в случае нормированных чисел с плавающей запятой), или всегда равна 0 (в случае ненормированных чисел с плавающей запятой).
Команда Округлить до ближайшего большего двойного целого числа (RND+)
преобразует число с плавающей точкой (32 бита, IEEE) в аккумуляторе 1 в 32– битовое целое (двойное целое) число, и с теми же значениями даст, соответственно, результаты +101 и -100.
Команда Округлить до ближайшего меньшего двойного целого числа (RND–) − +100 и -101.
Команда Округлить отбрасыванием (TRUNC) − +100 и -100.
22.3.ИЗМЕНЕНИЕ ПОСЛЕДОВАТЕЛЬНОСТИ БАЙТОВ
ВАККУМУЛЯТОРЕ 1
Следующие команды служат для изменения порядка следования байтов в младшем слове аккумулятора 1 или во всем аккумуляторе:
•Изменить последовательность байтов в аккумуляторе 1, 16 битов
(CAW);
•Изменить последовательность байтов в аккумуляторе 1, 32 бита (CAD).
112
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
|
CAW
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
Рис. 12.5. Использование операции CAW
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
|
CAW
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
Рис. 12.6. Использование операции CAD
22.4. ОБРАЗОВАНИЕ ДОПОЛНЕНИЙ И ИЗМЕНЕНИЕ ЗНАКА ЧИСЕЛ С ПЛАВАЮЩЕЙ ТОЧКОЙ
При образовании дополнения целого числа до единицы в аккумуляторе обращаются отдельные биты, т.е. нули заменяются единицами, а единицы нулями.
При образовании дополнения целого числа до двух в аккумуляторе также обращаются отдельные биты, т.е. нули заменяются единицами, а единицы нулями. Затем к содержимому аккумулятора прибавляется +1. Образование дополнения до двух целого числа соответствует умножению числа на -1. Изменение знака числа с плавающей точкой обращает знаковый бит.
Имеются следующие команды для образования дополнения целого числа или изменения знака числа с плавающей точкой:
Мнемон |
Команда |
|
Функция |
|
|
|
ика |
|
|
|
|
|
|
INVI |
Дополнение |
Эта команда образует дополнение до единицы |
||||
|
целого числа до |
16–битового |
числа |
в |
младшем |
слове |
113
Мнемон |
|
Команда |
|
|
|
|
|
|
|
Функция |
|
|
|
|
|
|
|||||||
ика |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
единицы |
|
|
|
|
аккумулятора 1. Результат сохраняется в |
||||||||||||||||
|
|
|
|
|
|
|
младшем слове аккумулятора 1 (см. рис. 12.7. |
|
|||||||||||||||
INVD |
|
Дополнение |
|
Эта команда образует дополнение до единицы |
|||||||||||||||||||
|
|
двойного |
целого |
|
32–битового числа в аккумуляторе 1. Результат |
||||||||||||||||||
|
|
числа до единицы |
|
сохраняется в аккумуляторе 1. |
|
|
|
|
|
|
|||||||||||||
NEGI |
|
Дополнение |
|
Эта команда образует дополнение до двух 16– |
|||||||||||||||||||
|
|
целого числа до |
|
битового числа в младшем слове аккумулятора 1, |
|||||||||||||||||||
|
|
двух |
|
|
|
|
т.е. она умножает его на –1. Результат |
||||||||||||||||
|
|
|
|
|
|
|
сохраняется в младшем слове аккумулятора 1 (см. |
||||||||||||||||
|
|
|
|
|
|
|
рис. 12.8). В слове состояния NEGI устанавливает |
||||||||||||||||
|
|
|
|
|
|
|
биты CC 1, CC 0, OV и OS. |
|
|
|
|
|
|
|
|
||||||||
NEGD |
|
Дополнение |
|
Эта команда образует дополнение до двух 32– |
|||||||||||||||||||
|
|
двойного |
целого |
|
битового числа в аккумуляторе 1, т.е. она |
||||||||||||||||||
|
|
числа до двух |
|
умножает его на –1. Результат сохраняется в |
|||||||||||||||||||
|
|
|
|
|
|
|
аккумуляторе 1. В слове состояния NEGD |
||||||||||||||||
|
|
|
|
|
|
|
устанавливает биты CC 1, CC 0, OV и OS. |
|
|
||||||||||||||
NEGR |
|
Изменение |
знака |
|
Эта команда изменяет знаковый бит числа с |
||||||||||||||||||
|
|
числа |
|
с |
|
плавающей точкой (32 бита, IEEE) в |
|||||||||||||||||
|
|
плавающей |
|
|
|
|
аккумуляторе 1 (см. рис. 12.9). |
|
|
|
|
|
|
||||||||||
|
|
точкой |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Исходное значение |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
0 |
|
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
|
0 |
|
1 |
1 |
1 |
0 |
0 |
0 |
|||||
INVI |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Результат |
|
|
1 |
|
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
|
1 |
|
0 |
0 |
0 |
1 |
1 |
1 |
||
Рис. 12.7. Образование дополнения до единицы 16–битового целого числа
Исходное: 23 864 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
NEGI |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Результат: -23 864 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
Рис. 12.8. Образование дополнения до двух 16–битового целого числа
114