Программирование арифметических функций

Арифметические функции обеспечивают выполнение базовых арифметических операций с двумя числовыми значениями, одно из которых находится в аккумуляторе 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, даже когда применяется абсолютная адресация и тип входного числа не описан.