Машинные команды
Машинные команды здесь недействительны, потому что нет общих регистров с номерами 21 и 22. Ошибка возникла из-за неправильного определения операндов макрокоманды. Следовательно, в макроопределении нужно всегда проверять, правильно ли записаны операнды макрокоманды. Если операнды ошибочные, то необходимо сразу же прекратить обработку макроопределения, т. е. выполнить генераторный переход на оператор MEND. Проверить операнды макрокоманды и сделать переход на оператор MEND позволяют специальные операторы.
В логическом выражении оператора 3 проверяется, является ли операнд, соответствующий параметру &Р1, самоопределенным термом. Если операнд — самоопределенный терм, то характеристикой типа параметра ЖР1 будет буква N. Следовательно, значение логического выражения оператора 3 равно 0. В этом случае следующим обрабатывается оператор 4. Если же параметру &Р1 не соответствует самоопределенный терм, то значением выражения будет 1 и по оператору 3 произойдет переход на оператор, содержащий в поле названия имя перехода. М. Им будет оператор MEND, который указывает, что обработку макроопределения следует прекратить.
Однако в данном макроопределении нельзя объединять логические выражения операторов 3 и 5, т. е. нельзя записать выражение. Такое выражение невозможно использовать потому, что для некоторых значений параметров, заданных в макрокомандах, оно будет недействительным. Первое отношение этого выражения символьное, а два других — арифметические. Постоянный параметр в арифметических выражениях можно использовать только в том случае, если его значением является самоопределенный терм. Следовательно, если в макрокоманде в качестве значения &Р1 или &Р2 будет записан не самоопределенный терм, то такое выражение окажется неправильным и транслятор сообщит об этой ошибке. В подобных случаях нужно записывать два оператора AIF: первый из них проверяет, можно ли использовать параметры в арифметических выражениях, и, если результат проверки положительный, второй оператор AIF с помощью арифметических отношений проверяет арифметические значения параметров.