Общие сведения о языке IL ========================= .. contents:: Содержание **IL (Instruction List)** представляет собой текстовый язык программирования низкого уровня, который очень похож на Assembler, но к конкретной архитектуре процессора не привязан. Он позволяет описывать функции, функциональные блоки и программы, а также шаги и переходы в языке SFC. Одним из ключевых преимуществ IL является его простота и возможность добиться оптимизированного кода для реализации критических секторов программ. Особенности IL делают его неудобным для описания сложных алгоритмов с большим количеством разветвлений. Операторы языка --------------- Основа языка программирования IL, как и в случае Assembler, это переходы по меткам и аккумулятор. В аккумулятор загружается значения переменной, а дальнейшее выполнение алгоритма представляет собой извлечение значения из аккумулятора и совершение над ним операций. Далее в таблице 4.1 приведены операторы языка IL. Таблица 1 – Операторы языка IL +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | Оператор | Описание | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | LD | Загрузить значение операнда в аккумулятор | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | LDN | Загрузить обратное значение операнда в аккумулятор | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | ST | Присвоить значение аккумулятора операнду | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | STN | Присвоить обратное значение аккумулятора операнду | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | S | Если значение аккумулятора TRUE, установить логический операнд | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | R | Если значение аккумулятора FALSE, сбросить логический операнд | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | AND | Поразрядное И аккумулятора и операнда | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | ANDN | Поразрядное И аккумулятора и обратного операнда | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | OR | Поразрядное ИЛИ аккумулятора и операнда | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | ORN | Поразрядное ИЛИ аккумулятора и обратного операнда | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | XOR | Поразрядное разделительное ИЛИ аккумулятора и операнда | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | XORN | Поразрядное разделительное ИЛИ аккумулятора и обратного операнда | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | NOT | Поразрядная инверсия аккумулятора | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | ADD | Сложение аккумулятора и операнда, результат записывается в аккумулятор | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | SUB | Вычитание операнда из аккумулятора, результат записывается в аккумулятор | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | MUL | Умножение аккумулятора на операнд, результат записывается в аккумулятор | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | DIV | Деление аккумулятора на операнд, результат записывается в аккумулятор | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | GT | Значение аккумулятора сравнивается со значением операнда(>(greater than)). Значение (TRUE или FALSE) записывается в аккумулятор | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | GE | Значение аккумулятора сравнивается со значением операнда(>=greater than or equal)). Значение (TRUE или FALSE) записывается в аккумулятор | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | EQ | Значение аккумулятора сравнивается со значением операнда (=(equal)). Значение (TRUE или FALSE) записывается в аккумулятор | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | NE | Значение аккумулятора сравнивается со значением операнда (<>(not equal). Значение (TRUE или FALSE) записывается в аккумулятор | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | LE | Значение аккумулятора сравнивается со значением операнда (<=(less than or equal to)). Значение (TRUE или FALSE) записывается в аккумулятор | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | LT | Значение аккумулятора сравнивается со значением операнда (<(less than)). Значение (TRUE или FALSE) записывается в аккумулятор | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | JMP | Переход к метке | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | JMPC | Переход к метке при условии, что значение аккумулятора TRUE | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | JMPCN | Переход к метке при условии, что значение аккумулятора FALSE | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | CAL | Вызов программного или функционального блока | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | CALC | Вызов программного или функционального блока при условии, что значение аккумулятора TRUE | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | CALCN | Вызов программного или функционального блока при условии, что значение аккумулятора FALSE | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | RET | Выход из POU и возврат в вызывающую программу | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | RETC | Выход из POU и возврат в вызывающую программу при условии, что значение аккумулятора TRUE | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ | RETCN | Выход из POU и возврат в вызывающую программу при условии, что значение аккумулятора FALSE | +------------+----------------------------------------------------------------------------------------------------------------------------------------------+ Пример программы на языке IL ---------------------------- На рис. 1 приведён пример программы на языке IL, которая эквивалентна следующему логическому выражению C = A AND NOT B: |image1| Рис. 1 – Пример программы на языке IL Первый оператор примера LD помещает значение переменной A в аккумулятор, способный хранить значения любого типа. Второй оператор ANDN выполняет «побитовое И» аккумулятора и обратного значения операнда, результат всегда помещается в аккумулятор. Последний оператор примера ST присваивает переменной C значение аккумулятора. .. |image1| image:: ./media/il/image1.png :width: 3.07986in :height: 1.76250in