Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Языки пр в Concept.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.87 Mб
Скачать

Описание модификаторов

Модификатор

Возможные типы данных

Описание

N

BOOL, BYTE, WORD, DWORD

Используется для поразрядного инвертирования операнда

С

BOOL

Используется для выполнения связанной инструкции, когда значение в аккумуляторе = 1

CN

BOOL

Используется для выполнения связанной инструкции, когда значение в аккумуляторе = 0

(

Все

Используется для откладывания вычисления операнда до появления закрывающей скобки.

6.2. Примеры выполнения инструкций

Модификатор N

Используется для побитного инвертирования значение операнда. Может применяться только к операндам типа данных ANY_BIT.

Пример:

LD A (*загрузка в аккумулятор значения А*)

ANDN B (*в аккумуляторе *)

ST C (*сохранение значения аккумулятора в С*)

В примере C =1 (TRUE), если А=1(TRUE) и B=0 (FALSE).

Модификатор C

Используется, чтобы выполнить соответствующую команду, если содержимое аккумулятора «1» (TRUE). Модификатор может применяться только к операндам типа данных BOOL.

Пример:

LD A

AND B

JMPC START

В примере выполняется переход к метке START, только если A =1 (TRUE) и B=1 (TRUE).

Если модификатор C объединен с модификатором N, соответствующая команда выполняется, только если значение аккумулятора булев ”0” (FALSE).

Пример:

LD A

AND B

JMPCN START

В примере прыжок к метке START выполняется, только если A=0 (FALSE) и/или B=0 (FALSE).

Модификатор левая круглая скобка ”(”

Используется, чтобы задержать оценку операнда до появления оператора правая круглая скобка ”)”. Круглые скобки могут быть вложены, при этом количество операций правой круглой скобки должно быть равным количеству модификаторов левой круглой скобки.

Пример:

LD A

AND B

AND( C

OR D

)

ST E

В примере E=1 если: А=1 и В=1 и (C=1 и/или D=1).

Ниже приведен вариант решения предыдущей задачи:

LD A

AND B

AND (

LD C

OR D

)

ST E

Оператор S

Оператор S (Set - установка) используется для установки операнда в «1», если значение аккумулятора равно «1».

Пример:

LD A

S OUT (* OUT=1, если А=1 *)

Обычно этот оператор используется вместе с оператором R для программной организации триггера.

Оператор R

Оператор R (Reset - сброс) используется для установки операнда в «0», если значение аккумулятора равно «1».

Пример:

LD A

R OUT (* OUT=0, если А=1 *)

Обычно оператор S используется вместе с оператором R для программной организации триггера.

Пример:

LD A (* Реализация RS-триггера *)

(* с доминирующим сбросом *)

S OUT (* OUT=1, если А=1 и С=0 *)

LD C

R OUT (*OUT=0, если С=1, а А равно 0 или 1 *)

Пример:

LD A (* Реализация RS-триггера *)

(* с доминирующей установкой *)

R OUT (* OUT=0, если А=1 *)

LD C

S OUT (* OUT=1, если С=1, а А равно 0 или 1 *)

Оператор AND

Оператор AND используется для реализации логической операции «И».

Пример:

LD A (* Реализация логической функции *)

AND B (* *)

ANDN C

ST D

Оператор OR

Оператор OR используется для реализации логической операции «ИЛИ».

Пример:

LD A (*Реализация логической функции*)

OR B (* *)

ORN C

ST D

Пример:

LD A (*Реализация логической функции*)

ANDN ( (* *)

LD B

ORN C

)

ST D

Оператор XOR

Оператор XOR используется для реализации логической операции «Исключающее ИЛИ».

Пример:

LD A

XOR B

ST C

Операторы ADD, SUB, MUL и DIV

Операторы ADD, SUB, MUL и DIV используются для выполнения арифметических операций сложения, вычитания, умножения и деления.

Пример:

LD A (* Реализация функции *)

ADD B (* G=A+B×(C-D)/(E+F) *)

MUL (

LD C

SUB D

)

DIV (

LD E

ADD F

)

ST G

Оператор GT

Оператор GT используется для выполнения операции сравнения «больше чем». Результат операции «FALSE» или «TRUE» присваивается переменной типа «BOOL».

Пример:

LD A (* C=1, если А>B *)

GT B

ST C

Оператор LT

Оператор LT используется для выполнения операции сравнения «меньше чем». Результат операции «FALSE» или «TRUE» присваивается переменной типа «BOOL».

Пример:

LD A (* C=1, если А<B *)

LT B

ST C

Оператор EQ

Оператор EQ используется для выполнения операции сравнения «равенство». Результат операции «FALSE» или «TRUE» присваивается переменной типа «BOOL».

Пример:

LD A (* C=1, если А=B *)

EQ B

ST C

Оператор GE

Оператор GE используется для выполнения операции сравнения «больше чем или равно». Результат операции «FALSE» или «TRUE» присваивается переменной типа «BOOL».

Пример:

LD A (* C=1, если А≥B *)

GE B

ST C

Оператор LE

Оператор LE используется для выполнения операции сравнения «меньше чем или равно». Результат операции «FALSE» или «TRUE» присваивается переменной типа «BOOL».

Пример:

LD A (* C=1, если А≤B *)

LE B

ST C

Оператор NE

Оператор NE используется для выполнения операции сравнения «не равно». Результат операции «FALSE» или «TRUE» присваивается переменной типа «BOOL».

Пример:

LD A (* C=1, если А≠B *)

NE B

ST C

Оператор JMP

Оператор JMP служит для выполнения операции безусловного перехода к метке. Метка используется как адрес, к которому осуществляется переход. Метка может содержать до 32 символов и может находиться только вначале инструкции, чтобы не исказить содержимое аккумулятора.

Переходы не могут быть сделаны в другие секции.

Пример:

LD A

ADD B

ST C

LD D

LT E

JMP START

START: LD F

В примере переход к метке START (к команде LD F) осуществляется независимо от результата предыдущих операций.

Оператор JMP может использоваться для реализации условного перехода с модификатором C (если содержимое аккумулятора равно лог. 1) и CN (если содержимое аккумулятора равно лог. 0). При этом операнд должен иметь тип ANY_BIT.

Пример:

LD A

ADD B

LT C

JMPС START

LD B

START: LD F

В примере переход к метке START (к команде LD F) осуществляется при условии (А+В) < C. Если это условие не выполняется, то будет выполняться команда, которая следует за JMPС START (команда LD B).

Пример:

LD A

ADD B

LT С

JMPСN START

LD B

START: LD F

В примере переход к метке START (к команде LD F) осуществляется при условии (А+В) > С. Если это условие не выполняется, то будет выполняться команда, которая следует за JMPС START (команда LD B).