|
Операция восстановления преобразует переменную команду от вида (2) к виду (1) или от вида (4) к виду (3). Поэтому, если по ходу основной программы первым выполняется цикл, а потом следует восстановление переменной команды, исходное значение последней нужно взять соответственно в виде (1) или (3). Если же восстановление предшествует первому выполнению цикла, то за исходное значение переменной команды нужно принять значение (2) или (4). Поясним сказанное на простом примере. Как видно, при программировании простых циклов прием восстановления никакого выигрыша не дает, а переменную команду мы должны записывать в менее наглядном виде. Поэтому в программах простых циклов лучше пользоваться формированием, а не восстановлением команд. Посмотрим, что происходит при программировании кратных циклов. Оба варианта равноправны. Если числа, стоящие во всех трех адресах константы, имеют одинаковые знаки, лучше выбрать тот вариант, в котором эти числа положительны, так как такие константы записываются проще. Таким образом, мы видим, что использование восстановления при программировании сложных циклов может сократить число команд и заготовок в программе. Вернемся к примеру 1 и попробуем для внутреннего цикла воспользоваться восстановлением вместо формирования, Все команды цикла по / сохраняют свой вид: Значения констант г2 и г3 те же, что в программе 1: г2 0 0 1 1 0 г а 0 х а + in х + п г В ячейке р перед началом внутреннего цикла должна находиться команда р 0 х a+(i— 1) п х г В программе 1 эта команда каждый раз формировалась в результате засылки в ячейку р заготовки zv Но то же самое можно осуществить, выполняя после выхода из цикла восстановление ячейки р с помощью операции При этом мы вернемся от значения / = м значению / = 0, не изменив значения L Во внешнем цикле, как и в программе 1, нужно менять коды, зависящие от ir т. е. команды /7, р + 1, заготовку z3 и команду засылки 0 в ус Переадресацию выполняют следующие команды: Мы видим, что во внешнем цикле команду р меняют две команды — одна (восстановление по /) уменьшает первый и второй адрес на п единиц, вторая (переадресация по i) увеличивает первый адрес на те же п единиц. Это равносильно уменьшению второго адреса на п единиц, что можно осуществить операцией
|