5.2. Операторы и модификаторы Техно IL
К ним относятся:
– модификаторы Техно IL;
– операторы обмена с аккумулятором;
– логические операторы Техно IL;
– арифметические операторы Техно IL;
– операторы сравнения Техно IL;
– операторы перехода и вызова функции Техно IL.
5.3. Модификаторы Техно IL
Модификаторы Техно IL – это литеры N, C и X, которые могут быть приписаны справа к имени ряда операторов.
Модификатор N обозначает логическое отрицание операнда. Например, инструкция
AND a
интерпретируется как result = result AND a, а инструкция
ANDN a
интерпретируется как result = result AND NOT a.
Для операторов JMP, CAL и RET:
– модификатор C обозначает, что инструкция выполняется в том случае, если результат предыдущей операции сравнения истинен;
– модификатор X обозначает, что инструкция выполняется в том случае, если result = TRUE.
5.4. Операторы обмена с аккумулятором
В таблице 1 представлены операторы обмена с аккумулятором.
Таблица 1
Синтаксис
|
Допустимый модификатор
|
Действие
|
LD operand
|
N
|
result := operand
|
ST operand
|
N
|
operand := result
|
Знак ":=" в таблице 1 обозначает операцию присваивания.
В качестве операнда может использоваться численная или булева переменная. В качестве операнда оператора LD может использоваться число.
Отличное от нуля значение аккумулятора интерпретируется как TRUE, нулевое – как FALSE, поэтому значение аккумулятора может быть присвоено как численной, так и булевой переменной.
Пример
VAR VAR_000 : INT := 10; END_VAR
VAR VAR_001 : BOOL := TRUE; END_VAR
VAR VAR_002 : BOOL; END_VAR
LD 8 //result := 8
ST VAR_000 //VAR_000 := 8
ST VAR_002 //VAR_002 := TRUE
LD 0 //result := 0
ST VAR_001 //VAR_001 := FALSE
LD VAR_001 //result := FALSE
ST VAR_002 //VAR_002 := FALSE
ST VAR_000 //VAR_000 := 0
5.5. Логические операторы Техно IL
В таблице 2 представлены логические операторы.
Таблица 2
Синтаксис
|
Допустимый модификатор
|
Действие
|
S operand
|
|
operand := TRUE (см. примечание)
|
R operand
|
|
operand := FALSE (см. примечание)
|
AND operand1 operand2
|
N
|
result := operand1 := operand1 AND operand2
|
OR operand1 operand2
|
N
|
result := operand1 := operand1 OR operand2
|
XOR operand1 operand2
|
N
|
result := operand1 := operand1 XOR operand2
|
Примечание. Оператор выполняется только тогда, когда result = TRUE.
В качестве операндов могут использоваться булевы переменные. Вторым операндом может быть число (но не численная переменная), которое интерпретируется следующим образом: не равно 0 – TRUE; равно 0 – FALSE.
Выполнение операторов R и S не изменяет значения аккумулятора.
Пример
VAR VAR_001 : BOOL := TRUE; END_VAR
VAR VAR_002 : BOOL; END_VAR
VAR VAR_004 : INT := 0; END_VAR
LD 1 //result:=1
S VAR_002 //VAR_002:=TRUE
R VAR_002 //VAR_002:=FALSE
AND VAR_001 VAR_002 //result:=VAR_001:=FALSE
LD 1 //result:=1
S VAR_001 //VAR_001:=TRUE
OR VAR_002 VAR_001 //result:=VAR_002:=TRUE
XOR VAR_002 VAR_001 //result:=VAR_002:=FALSE
OR VAR_002 10 //result:=VAR_002:=TRUE
5.6. Арифметические операторы Техно IL
В таблице 3 представлены арифметические операторы.
Таблица 3
Синтаксис
|
Действие
|
ADD operand1 operand2
|
result := operand1 := operand1 + operand2
|
SUB operand1 operand2
|
result := operand1 := operand1 – operand2
|
MUL operand1 operand2
|
result := operand1 := operand1 * operand2
|
DIV operand1 operand2
|
result := operand1 := operand1 : operand2
|
В качестве операндов используются численные переменные, в качестве второго операнда может использоваться число.
Арифметические операторы не допускают использования модификаторов.
Пример
VAR VAR_000 : REAL := 20; END_VAR
VAR VAR_001 : LREAL := 30; END_VAR
ADD VAR_000 10 //result := VAR_000 := 30
MUL VAR_001 9 //result := VAR_001 := 270
SUB VAR_001 VAR_000 //result := VAR_001 := 240
DIV VAR_001 VAR_000 //result := VAR_001 := 8
5.7. Операторы сравнения Техно IL
В таблице 4 представлены операторы сравнения.
Таблица 4
Синтаксис
|
Действие
|
GT operand1 operand2
|
result := TRUE, если operand1 > operand2
|
GE operand1 operand2
|
result := TRUE, если operand1 >= operand2
|
EQ operand1 operand2
|
result := TRUE, если operand1 == operand2
|
NE operand1 operand2
|
result := TRUE, если operand1 <> operand2
|
LE operand1 operand2
|
result := TRUE, если operand1 <= operand2
|
LT operand1 operand2
|
result := TRUE, если operand1 < operand2
|
В качестве операндов используются численные переменные, в качестве второго операнда может использоваться число.
Операторы сравнения не допускают использования модификаторов.
Операторы сравнения, как правило, предшествуют операторам JMPC, CALC и RETC. Если результат сравнения ложен, инструкции сравнения не изменяют значения аккумулятора, а последующий оператор JMPC, CALC или RETC игнорируется (даже если result = TRUE).
Пример
VAR VAR_000 : INT := 20; END_VAR
VAR VAR_001 : INT := 30; END_VAR
VAR VAR_002 : BOOL; END_VAR
LD 1 //result := TRUE
GT VAR_000 VAR_001 //результат сравнения ложен,
//т.к. (20<30), аккумулятор сохраняет свое
//значение (TRUE)
RETC //RETC игнорируется
LD VAR_002 //result := FALSE
LT VAR_000 VAR_001 //результат сравнения истинен
//result := TRUE
CALC fff(VAR_000) //вызов функции произойдет
5.8. Операторы перехода и вызова функции Техно IL
В таблице 5 представлены операторы перехода и вызова функции.
Таблица 5
Синтаксис
|
Допустимый модификатор
|
Действие
|
JMP имя_метки
|
C, X
|
переход к строке с указанной меткой
|
CAL имя_функции(val1, ... valN)
|
C, X
|
вызов функции или функции-блока
|
RET
|
C, X
|
выход из программы, функции или функции-блока
|
Операторы перехода выполняются, если строка с указанной меткой находится в том же программном компоненте.
Do'stlaringiz bilan baham: |