Программирование арифметических функций
Арифметические функции обеспечивают выполнение базовых арифметических операций с двумя числовыми значениями, одно из которых находится в аккумуляторе 1, а второе – в аккумуляторе 2. Результат арифметической операции записывается в аккумулятор 1. Биты состояния CC0, CC1, OV и OS обеспечивают информацию, которая касается выполнения вычислений и результата.
Обзор доступных пользователю арифметических функций приведен в таблице 2.5.
Таблица 2.5 - Арифметические функции
Название функции | Тип данных | ||
INT | DINT | REAL | |
Добавление (Addition) | +I | +D | +R |
Вычитание (Substraction) | -I | -D | -R |
Умножение (Multiplication) | *I | *D | *R |
Деление (Division with quotient as result) | /I | /D | /R |
Остаток от деления (Division with remainder as result) | - | MOD | - |
Арифметические функции программируются по схеме:
1) загрузка первого числа;
2) загрузка второго числа;
3) выполнение арифметической функции;
4) запись результата.
При выполнении первой операции число записывается в аккумулятор 1. При загрузке второго числа сначала содержимое аккумулятора 1 перемещается в аккумулятор 2, а потом второе число загружается в аккумулятор 1. После этого выполняется арифметическая операция, в которой принимают участие два аккумулятора. Результат операции хранится в аккумуляторе 1.
Арифметические функции выполняются вне всякой связи с какими-нибудь условиями.
Пример программирования арифметической операции:
L MW12; //Загрузка первого числа
L 250; // Загрузка второго числа
/I; //Деление второго числа на первое (целое число)
T MW120; //Запись результата
Инструкция деления /I интерпретирует содержимое младших слов аккумуляторов 1 и 2 как числа целого типа (INT). Инструкция выполняет деление числа, которое находится в аккумуляторе 2 (делимое), на число, которое находится в аккумуляторе 1 (делитель), и сохраняет два результата деления – частицу (младшее слово) и остаток (старшее слово). Оба значения имеют тип INT.
Частица представляет собой целый результат операции деления. Она равняется нулю в двух случаях:
1) делимое равняется нулю;
2) делимое меньше чем делитель.
Частица от деления отрицательна, если делитель меньше нуля.
После выполнения инструкции биты состояния CC0 и CC1 показывают, какова частица от деления – отрицательна, равна нулю или положительна. Биты состояния OV и OS указывают на нарушение разрешенного диапазона.
В случае деления на нуль частица от деления и остаток возвращаются с нулевыми значениями, а биты состояния CC0, CC1, OV и OS устанавливаются в "1".
Если нужно выполнить несколько арифметических операций, то их можно запрограммировать последовательно. В этом случае результат выполнения первой операции используется для обработки в следующей операции. Временное хранение данных обеспечивается аккумуляторами.
Пример:
Result1:= Value1+Value 2-value3
L Var1;
L Var2;
+I; //Var1 + Var2 = сумма
L Var3;
-I; // Сумма – Var3
T Result1;
При выполнении арифметической операции в CPU с двумя аккумуляторами первое загруженное число находится в аккумуляторе 2 и может быть использовано без повторной загрузки.
Пример:
Result2: = Var4 * (Var5)2
L Var5;
L Var4;
*D; //Var4 * Var5
*D; //Var4 * Var5 * Var5
T Result2;
Операции декремента и инкремента
Синтаксис инструкций:
DEC n //Декремент
INC n //Инкремент
Эти операции следует программировать по следующей схеме:
1) Загрузка адреса;
2) Указание операции (декремент или инкремент) и шага;
3) Передача результата Result;
Операции декремента и инкремента выполняются независимо от значения RLO.
Примеры операций:
L Incvar;
INC 5;
T Incres;
В примере значения переменной Incvar увеличивается на 5 и результат передается в переменную Incres.
L Decvalue;
DEC 7;
T Decres;
В примере значения переменной Decvalue уменьшается на 7 и результат сохраняется в переменной Decres.
Программирование математических функций
К математическим функциям принадлежат следующие функции:
• синус (SIN), косинус (COS), тангенс (TAN);
• арксинус (ASIN), арккосинус (ACOS), арктангенс (ATAN);
• возведение в квадрат (SQR), извлечение квадратного корня (SQRT);
• экспонента (EXP), логарифм (LN).
Все математические функции обрабатывают числа в формате REAL. В зависимости от результата эти функции устанавливают биты состояния CC0, CC1, OV и OS.
Как входное значение математические функции используют число, которое находится в аккумуляторе 1. Это число обрабатывается согласно инструкции функции и снова хранится в аккумуляторе 1.
Математические функции меняют только содержимое аккумулятора 1, содержимое всех других аккумуляторов остается неизменным. Математические функции всегда выполняются вне всякой связи с какими-нибудь условиями.
Примеры математических функций:
L MD 10; //Значение угла в двойном слове
SIN;
T MD 14; //Запись синуса угла в двойном слове
… …
L #exponent;
EXP;
T #result;
Математические функции выполняются согласно правилам обработки чисел типа REAL, даже когда применяется абсолютная адресация и тип входного числа не описан.
Дата добавления: 2016-12-09; просмотров: 2897;