11. Переменные языка MCL Все переменные должны быть обязательно описаны перед ссылкой на них (неявное определение переменных не поддерживается). Максимальное число переменных, которые могут использоваться в программе одновременно составляет 100. Использование большего числа переменных приведет к ошибке. Как уже было отмечено выше, максимальная разрядность регистра или структуры - 32 разряда, а максимальное число ячеек памяти 1024.
12. Операторы языка MCL Оператор - формат:
один оператор может занимать одну или более строк. Два или большее количество операторов могут находится на одной строке. Каждый оператор должен завершаться точкой с запятой.
Оператор - метка:
метка может стоять перед любым оператором, чтобы на этот оператор можно было перейти с помощью оператора GOTO или GOSUB. Метка состоит из идентификатора за которым стоит двоеточие. Один оператор может иметь несколько меток.
Оператор - присваивание: :=
оператор присваивания имеет следующий формат: <переменная> := <выражение>; Значение выражения вычисляется и присваивается переменной. В качестве переменной может использоваться любая допустимая ссылка на переменную. Например: ra:=15+rb/2; ml[1,2..4]:=0b111; mb[3]:=0;
rk.r1:=(ra[0..3]+rb[0..3]) ROL 2; Оператор - безусловный переход: GOТО
оператор безусловного перехода имеет формат: GOTO <идентификатор> ; Управление безусловно передается на оператор перед которым
стоит метка <идентификатор>. Оператор - вызов подпрограммы: GOSUB
оператор вызова подпрограммы имеет формат: GOSUB <идентификатор> ; Управление передается на оператор перед которым стоит метка <идентификатор>. Когда будет выполнен оператор RETURN, управление будет возвращено оператору следующему за GOSUB. Например:
GOSUB SUBR;──────────────────┐ -Вызов ПП
WRITELN "MAIN PROG";<────────┼─┐ -Возврат из ПП
... │ │
... │ │
SUBR:<───────────────────────┘ │
WRITELN "SUBROUTIN"; │
RETURN;────────────────────────┘
Допускается вложение вызовов подпрограмм. Максимальный уровень вложенности - 16.
Оператор - возврат из подпрограммы: RETURN
оператор возврата из подпрограммы имеет формат: RETURN; Управление передается на оператор следующий за оператором GOSUB (см. пример выше). Оператор - условный оператор: IF THEN
условный оператор имеет формат: IF <выражение> THEN <оператор> ; Сначала вычисляется значение <выражения> и, если оно не равно 0, то выполняется оператор следующий за THEN. В противном случае выполняется следующий оператор. В качестве <выражения> можно использовать любое (не обязательно логическое) выражение. Например: I:=1;
IF I THEN WRITELN "i<>0";
J:=0; IF I PRINT "I>J";
LBL2:
END;
Результатом выполнения этой программы будет:
I<>0 I>J
Оператор - оператор цикла: FOR TO NEXT
оператор цикла имеет формат: FOR <идентификатор>:=<выражение1>TO<выражение2>; { <оператор> } NEXT; Переменной с именем <идентификатор> присваивается значение <выражения1>, после чего выполняются все операторы до оператора NEXT. После этого к переменной <идентификатор> прибавляется 1 и ее значение сравнивается с значением выражения <выражение2>. Если значение переменной больше значения выражения, то выполнение цикла прекращается и управление передается следующему за NEXT оператору, в противном случае опять выполняются все операторы до оператора NEXT и т.д. Допускается использование вложенных циклов. Максимальный уровень вложенности не должен превышать 16. Замечание:
после выхода из цикла управляющая переменная имеет значение выражение2>+1 Цикл всегда выполняется хотя бы один раз (даже если <выражение1> больше <выражения2>) Не рекомендуется для выхода из цикла использовать оператор GOTO, безусловный переход из тела цикла возможен только на конец программы. Например: FOR I:=0 TO 1023; ML[I]:=0; NEXT;
Оператор - пауза: PAUSE
оператор пауза имеет следующий формат: PAUSE; Этот оператор приостанавливает выполнение программы и выводит на терминал сообщение: "Приостановлено. Нажмите клавишу ENTER..." После нажатия клавиши ENTER выполнение программы возобновляется с оператора, следующего за оператором PAUSE. Оператор - вывод: WRITE WRITELN
формат операторов вывода определяется следующими правилами:
оператор предназначен для вывода информации на терминал, выводимую информацию можно разделить на две части: пояснительный текст (строки в кавычках) и значения выражений.
Допускается три формата вывода значения выражений:
- двоичный (спецификатор формата $B),
- десятичный (спецификатор формата $D),
- шестнадцатеричный (спецификатор формата $H).
Указание спецификатора формата и длины поля вывода обязательно!
Следующая за спецификатором формата константа определяет размер поля вывода для значения выражения. При выводе значений в двоичной и шестнадцатеричной СС если размер поля больше, чем размер реально выводимого числа, то число дополняется слева нолями. При выводе значений в десятичной СС число дополняется слева пробелами. Если выводимое число больше по размеру, чем выделенное поле, то оно усекается слева. Например: I:=0HFFFF; {I:=65535}
WRITE $B32 I {На выходе> 00000000000000001111111111111111}
WRITE $B16 I {На выходе> 1111111111111111}
WRITE $B8 I {На выходу> 11111111}
WRITE $D7 I {На выходе> 65535}
WRITE $D5 I {На выходе> 65535}
WRITE $D1 I {На выходе> 5}
WRITE $H6 I {На выходе> 00FFFF}
WRITE $H4 I {На выходе> FFFF}
WRITE $H2 I {На выходе> FF} Оператор WRITELN отличается от оператора WRITE тем, что он добавляет к выводимой информации символ перевода на новую строку. Оператор – ввод: READ
оператор предназначен для ввода значений любых переменных с терминала. Значения могут вводится в виде констант в любой СС. Вводимые значения автоматически преобразуются к требуемому размеру.
Например: READ "A=",A; READ "RK.KOP=",RK.KOP,"RA.LSB=",RA[0..7];
READ "M[I]=",M[I]; Замечание:
при вводе числа в десятичной СС допускается указание знака числа. После ввода, число будет автоматически преобразовано в дополнительный код. Оператор - конец программы: END
Оператор служит для завершения выполнения программы. Имеет следующий формат: END; В общем случае этот оператор не обязателен (выполнение программы автоматически завершится после выполнения последнего оператора в тексте), но, тем не менее, желательно в любом случае использовать оператор END.
|