|
Ранее рассмотренные примеры показывают, что вероятность встретить в настраиваемом модуле команду с нулевой адресной частью довольно высока. Поэтому желательно начать выполнение этого цикла с проверки, не равна ли нулю адресная часть кода команды, помещенной в ячейку г. Для этого во внешнем цикле следует перед командами р± -ь р3 поставить команды Операции ЛЯ и ПБ не меняют значения со, поэтому значение со, выработанное командой р0, будет использовано командой р3. Для завершения внешнего цикла и всей подпрограммы вслед за командой р3 следует поместить команды Ячейка возврата Осталось составить формирующую часть этой подпрограммы. Предположим, что при обращении к подпрограмме в ячейки а1у а2У blt с1у с2 были засланы коды Формирующая часть должна сформировать команду р5, заготовки sx, s2, d + 1 d+.З и заслать в индекс-регистр начальное значение i, равное Сн. Небольшое осложнение возникает при формировании константы d + 3 при Ъп < ан, т. е. при б 0. Было бы ошибкой попытаться получить ее из константы d + 2, сдвигая адресную часть на 12 разрядов вправо. Адресные части этих констант изображаются в дополнительном коде, так что, например, при ан = Сдвигая вправо константу d + 2, мы получили бы неверный код ~ ~ 0000 7777 6531 Но при любом знаке разности Ьн — ап константы d + 2 и d + 1 можно получить, сдвигая адресную часть константы d + З влево. Поэтому начинать следует с формирования константы.d + 3. Формирующая часть может быть такой: с константами гг о 0 10 0 z2 1 Я< Л 0 р 1 „ Упражнение 1. Предполагая, что ячейки ах, а2, b±, clt с2 расположены в памяти подряд (но в произвольном порядке), составить формирующую часть так, чтобы можно было совместить ячейки slf s2, d + 1 -f- d + 3 с этими ячейками. Число команд формирующей части не должно возрасти.
|