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

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

аккумуляторов 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

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

12
1673
271
2863
2994
3788
3857
54
5719
605