AOP_Tom1 (1021736), страница 148
Текст из файла (страница 148)
ЬОА 0,2(0:3) гА г- "А.1". БТА в+2(0:3) Восстановить г12, так как в 1 может быть 2 гА е- индексированный адрес. Увеличивать г12, пока значение в нем не станет равным нулю 102 БР(0:2) ЕМТА ь 102 ЗР(0:2) 102М 0,2(4:4) г12 е- -Р. )22 1Р ВЕСА 0,2 БТА 2Р10:2) ОЕС1 0,2 гП < — гП + Р. БТ1 6Р(0:2) 2Н ЕОА ь,2 6Н БТА ь,2 1МС2 1 32М 2В 1Н 10А 4Р Восстановить гА и г12, БН ЕМТ2 * ЗН ЗМР Выход к команде МОР. 4Н СОМ 0 Б 7.
(1) Операционная система распределяет высокоскоростную память (кзш-память) более эффективно, если программные блоки предназначены только дли чтения. (2) Аппаратная кэш-память команды будет более быстрой и менее дорогой в случае, если команды не смогут измениться. (3) Рассмотрим (2), только с "каналом" вместо "кэш-памяти". Если команда модифицируется после входа в канал, то канал нужно очистить; схема проверки этого условия очень сложна, а ее использование отнимет много времени. (4) Самомодифи- цирующийся код может использоваться только одним процессом за один раз. (5) Самомоди- фицирующийся код может повредить программу отглеживания переходов (упр. 1.4.3.2-7), которая является важным инструментом диагностики, выполняющим "профилирование" (т.
е. определяющим, .сколько раз выполняется каждая команда). РАЗДЕЛ 1.4.2 1. Если одна сопрограмма вызывает другую только один раз, то это всего лишь подпрограмма. Поэтому нужен такой пример, в котором каждая сопрограмма вызывает другую по меньшей мере в двух различных местах. Но даже в таком случае иногда можно установить что-то наподобие переключателя или воспользоваться каким-либо свойством данных, чтобы, входя в фиксированную точку внутри одной сопрограммы, можно было направлиться к одному из двух нужных мест.
И для этого опять-таки достаточно подпрограммы. А польза от применения сопрограмм становится все более очевидной по мере роста числа их обращений друг к другу. 2. Первый символ, найденный 1М, будет потерян. )Сопрограмма ООТ запускается первой, потому что в строках 58 и 59 выполняется необходимая инициализация 1М. Чтобы первой запустить ХМ, нужно инициализировать ООТ с помощью команды "ЕМТ4 -16" и очистить буфер вывода, если неизвестно, пуст ли он. Затем можно из строки 62 перейти сначала в строку 39.) 3. Утверждение почгпи истинно, так как команда "СИРА 10 " внутри 1М будет тогда единственным оператором сравнения в программе, а кодом "." является 40. (!) Но если бы перед завершающей точкой стояло число повторений, то тест прошел бы, как по маслу.
~Замечание. Если задаться целью создать эффективную программу и подойти к этому с максимальной педантичностью, то, вероятно, нужно будет удалить строки 40, 44 и 48 и вставить команду "СИРА РЕН100" между строками 26 и 27. Но если в сопрограммах используется флаг сравнения, то его необходимо занести в список характеристик сопрограммы в документации к программе.] 4. Приведем примеры трех различных компьютеров, имеющих историческое значение. (() На машине 1ВМ 650 на языке ассемблера БОАР мы написали бы последовательности вызова "Ь00 А" и "ЬОО В", а связь между сопрограммами выглядела бы так: "А БТО ВХ АХ" и "В БТО АХ ВХ" (предпочтительнее, чтобы две эти команды связи находились в оперативной памяти).
(Н) На машине 1ВМ 709, воспользовавшись обычными языками ассемблера, мы записали бы последовательность вызова в виде "ТБХ А,4" и "ТБХ В.4"; связь между сопрограммами выглядела бы так. В ЯКА АХ,4 ВХ АКТ 1-В1,4 ТВА 1,4 А БХА ВХ,4 АХ АКТ 1-А1,4 ТВА 1,4 (цй) На машине СПС 1604 последовательности вызова были бы "обратными переходами" (БЬЗ 4) к А или В, а команды связи между сопрограммами, например А: БЬЗ 61; АЬЗ О В: БЬЗ А1; ЯЬЗ А ' были бы занесены в два последовательных 48-битовых слова, 5. "БТА НОЬОАТИ; ЬОА НОЬОАООТа между ООТ и ООТХ и "ЗТА НОЬОАООТ; ЬОА НОЬОАХИ" между ТИ и ТНХ. 6.
Внутри сопрограммы А напишите команду аЗИР АВ", чтобы активизировать В, и команду «ЗИР АС" — чтобы активизировать С. Адреса ВА, ВС, СА, СВ будут аналогичным образом использоваться и внутри В и С. Связь между сопрограммами будет иметь такой вид. АВ ЯТЗ АХ ВС ЯТЗ ВХ СА ЯТЗ СХ ВХ ЗИР В1 СХ ЛИР С1 АХ ЗИР А1 СВ ЗТЗ СХ АС ЯТЗ АХ ВА ЯТЗ ВХ Л(Р ВХ ЗИР СХ ЗИР АХ (Замечаиое. Если имеется н сопрограмм, то для осуществления связи подобного типа понадобится 2(п — 1)н ячеек. Если и достаточно велико, то, конечно, можно использовать "централизованную" программу связи. Нетрудно придумать также метод, для которого нужно Зп + 2 ячеек.
Но на практике для приведенного выше более быстрого метода требуется только 2ш ячеек, где т — количество пар ((,1), таких, для которых сопрограмма 1 вызывает сопрограмму у. Когда существует много сопрограмм, каждая из которых независимо вызывает другие, то обычно используется внешняя последовательность операторов управления (более подробно этот вопрос обсуждается в разделе 2.2.5).) РАЗДЕЛ 1.4.3.1 1. РСНЕСК используется только дважды, и оба раза сразу после нее вызывается подпрограмма ИЕИОЕТ.
Поэтому целесообразнее было бы создать для РСНЕСК специальный вход в подпрограмму ИЕИОВУ и сделать так, чтобы она помещала -)( в г12. 2. БНТРТ ЗБИ ОЕСЗ ЗЗР ЬОА ЬОХ 001 ЯТ1 152 2Н БЬА АООВЕЕВОВ 5 РЕВНОВ АВЕО ХВЕО 1Р,З(4:5) 2Р(4:5) СТСЬЕ 1 ОЕСБ 15Р ЗИР БЬА БВА БЬАТ ЯНАХ ЯЬС 1Н БЕС 1 2В БТОВЕАХ 1 1 1 1 1 1 1 5. Маче азг счсье )мр Неману БНАХ 5 001 1(НЕС ЬОА 51СМ1 )АР ~+3 )1МХ МЕМЕННОН БТХ 51СМ1(а:О) СМР1 ВЕСТМ ЗСЕ МЕМЕННОН Бтх 0.1 ЬОА СЬОСК ТМСА г БТА СЬОСК ХМС1 1 Бт( тхнес 1МС5 1 ОЕСЗ 1 )мр маче Б 4. Просто вставьте "ХМ О (16)" и ") ВОБ ь (16)" между строками 003 и 004.
(Разумеется, на другом компьютере все было бы совсем по-другому, поскольку нужно было бы выполнять преобразование в символьный код машины МХХ.) 5. Общее время выполнения центральной управляющей программы составляет 34о плюс 15и на индексирование, есля оно необходимо. Подпрограмма СЕТЧ работает 52и плюс 5и, если Ь ф 0; дополнительное время, необходимое для загрузки, равно 11я для ЬОА или Ьах, 13и — для ЬОЬ 21и — для ЕМТА или ЕМТХ, 23и — для ЕМТ1 (добавьте 2и к последним двум значениям времени, если М = 0).
Просуммировав, получим общее время 97и лля ЬОА и 55и для ЕМТА плюс 15о на индексирование и плюс 5и нли 2и при некоторых других условиях. Может показаться, что имитирование в данном случае дает для затраченного времени соотношение приблизительно 50:1. (В результате тестового прогона на 178и имитированного времени пришлось 8422и реального времени, т.
е. получилось соотношение 47:1.) 7. При выполнении команд ТМ и СОТ переменной, связанной с соответствующим устройством ввода-вывода, присваивается время, когда желательно выполнить передачу информации. Управляющая программа "СТСЬЕ" опрашивает эти переменные в каждом цикле, чтобы узнать, не превысило ли значение СЬОСК одну из них (или обе). Если превысило, то осуществляется передача информации и соответствующей переменной присваивается значение со. (Когда подобным образом нужно использовать более двух устройств ввода- вывода, переменных может оказаться так много, что лучше хранить их в рассортированном списке с помощью методов связи с памятью; см, раздел 2,2.5.) При имитации команды Н1.Т необходимо очень осторожно завершать операции ввода-вывода, 8.
Ложно. В г16 может содержаться адрес ячейки ВЕСХМ, если мы "попадем" в нее из ячейки ВЕС1М вЂ” 1. Но тогда произойдет МЕМЕВНОН и будет предпринята попытка внести комацлу БТХ в ячейку ТТМЕ! С другой стороны, всегда выполняется неравенство О < г(б < ВЕС1М (зто следует из строки 254).
РАЗДЕЛ 1.4.3.2 1. Замените строки 48 и 49 такой последовательностью команд. Особое значение здесь имеет, конечно, оператор ")БР'. ХНЕС ОНТС ЬЕАЧЕ БТХ БТ1 001 ЬОА ЬОХ 5ТХ ь+2 ХНЕС ХНЕС+1 )нес(а:2) -1,1 1Р -1,1 ЗМР 1Н )МР БТА Ь01 1.0Х ЬОА ЬЕАЧЕХ )5) -1,1 а+1 -1,1 ХНЕС+1 ХНЕС АНЕС 2. л ОРОГРАМИА ТРАССИРОВКИ 5ТА ВОР+1,1(4:5) 081С э+99 ЕМТА 8 ВОР СОМ 0 5МОЧ 1Р ..............строки 02-04 АРО В1С БТ1 11ВЕС 1Н )ь 1Р ..............строки 05-07 1МСА 1 РТВ ЕМТ1 -100 15 1Р )ВОБ л(0) 1МСА 1 БТА ВОР+1,1(0:2) 1Н БТА ВОР+1,1(3:3) ..............строки 08-11 1ИС1 10 БТА ВОР+2,1 )1И 1Р ..............строки 12-13 ООТ ВОР"99(0) ЬОА АНЕС ЕИТ1 "100 БТА ВОР+3,1 1Н БТ1 РТВ(0:2) 10А 11ВЕС ..............строки 14-31 ЯТА ВОР+4,1 501 11ВЕС БТ2 ВОР+5,1 ..............строки 32-35 БТЗ ВОР+6,1 БТ1 11ВЕС БТ4 ВОР+7,1 ..............строки 36-48 БТЯ ВОР+8,1 501 11ВЕС БТЯ ВОР+9,1 ..............строки 49-50 БТХ ВОР+10,1 84 ЕОО 1(1:1) ООА )ВЕС(0:2) ВХС СОИ 84-8.В4-1(1:1) ! После выполнения трассировки необходимо вызвать дополнительную программу, котш ран выводит на ленту содержимое последнего буфера и перематывает в начало устройство 0 (накопитель на магнитной ленте).