Материал: Основы программирования микроконтроллеров на языке step 7. Слепокуров Ю.С

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Двойное целое в вещественное: 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

= 22

= 0.25

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1. f

 

= 2eñì åù

 

=1.25*2130127

=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

Смотрите также:

12
1673
271
2863
2994
3788
3857
54
5719
605