AOP_Tom1 (1021736), страница 59
Текст из файла (страница 59)
е. позволяем машине самой выполнять большинство команд. Основное исключение представляет команда перехода или условного перехода, которую нельзя выполнять, не модифицируя, так как программа трассировки должна сохранять общий контроль. Каждой машине присущи уникальные, свойственные только ей особенности, и это значительно усложняет трассировку. Для машины И1Х самая трудная и интересная проблема связана с регистром 1. Приведенная ниже программа трассировки запускается, когда главная программа переходит к ячейке ЕИТЕК. При этом в регистре 5 содержится адрес, с которого трассировка должна начатьсл, а в регистре Х вЂ” адрес, где она должна закончитьсл.
Это интересная программа, заслуживающая внимательного изучения. 01 в ТИАС 09 ЕИТЕК 09 04 05 00 07 СТСЕЕ Об ТЕБТ 09 10 РВА 11 19 19 14 15 1б 17 1В 19 90 91 ОВЕС 98 99 94 2Н 95 95 97 1Н 98 99 ЗН 90 91 2Н 98 99 94 1ИБТ 55 95 1ИСР Е ВО ЯТХ ЯТХ БТА ЯТ5 ЕРА ЯТА РЕСА 5АЕ ЕРА ЯТА ЯВА ЯТА 1.РА РЕСА 5АИИ 1ИСА 3АИЕ ЕРА БТА ЕИТА БТА 5ИР РЕСА 5АИЕ ЛИР РЕСА 5АР ЕРА БТА ЕРА РТ1ИЕ ТЕНТ(0:2) ЕЕАУЕХ(0:2) АКЕС 5ВЕ6 ЗКЕС(0:2) РВНС(0:2) ЕЕАУЕ 1ИЯТ 2 1МЯТ1(0:3) 1ИЯТ(8'.Ь) 38 1Р 6 2Р 1ИЯТ(0:4) в+2(0;4) 1ИСР 2 2Р ЗР 9 2Р 8Р(0:3) 1ИБТ(0:3) АВЕС ИОР ЯТА АКЕС 1.РА РВЕС(0:2) Установить адрес выхода, Сохранить содержимое гА. Сохранить содержимое гЛ. Взять начальный адрес двя трассировки.
Сохранить адрес следующей команды. Это адрес выхода? Взять следующую команду, Скопировать ее. Сохранить этот адрес и индексы. Взять код операции, С. С > 38 (1ВЕР)? С ~ 32 (ЯТЛ)? Заменить ЗТ1 на ЗТА. гА е- имитируемое содержимое г). С ~ 34 (1808)? Тест для команд перехода.
С > 47 (111.)? Мы обнаружили команду перехода; изменить ее адрес на У90ИР". Восстановить регистр А. Во всех регистрах, кроме ),теперь правильные значения по отношению к внешней программе. Команда выполняется. Снова сохранить регистр А. Перейти к следующей команде, 1МСА 1 ЛМР С?СЕЯ ЛБЛ ЛБМР ЬРА БВ(4:Б) БРВ 1МБТ(4:Б) ЛАЯ ~+4 1.РА РНЕС(0:2) 1МСА 1 БТА ЛНЕС(0:2) ЕМТА в ЛМР СУСЕКЕ ЬРА АНЕС ЛМР СОМ 0 57 58 30 БН 40 Л)МР 41 42 45 44 45 45 1НБТ1 47 45 ЬЕАУЕ 40 ЬЕАУЕХ 50 АН.ЕС Константа для строк 29 и 40. Встретился переход.
Это была ЛБЛ? Если иет, обновите имитируемый регистр Л. Перейти к адресу перехода. Восстановить регистр А. Остановить трассировку. Содержимое имитируемого гА. УПРАЖНЕНИЯ 1. [28] Модифицируйте программу трассировки так, чтобы при выходе она восстанавливала регистр Л. (Можете предполагать, что содержимое регистра Л ненулевое.) По поводу программ трассировки в целом и этой в частности нужно отметить следующее.
1) Здесь представлена только самая интересная часть программы трассировки — часть, которая является управляющей во время выполнения другой программы. Чтобы трассировка принесла пользу, необходима также программа записи содержимого регистров, но мы ее не включили. Такая программа, хотя и безусловно важная, отвлекает внимание от более тонких моментов программы трассировки. Поэтому модификации, которые в этой связи необходимо ввести в программу, оставлены для упражнения [см.
упр. 2). 2) Занимаемое пространство обычно имеет большее значение, чем время выполнения, т. е. программа должна быть настолько короткой, насколько это возможно. Тогда программа трассировки сможет "сосуществовать" даже с очень большими программами. А время выполнения все равно расходуется на вывод данных. 3) Мы позаботились о том, чтобы избежать изменения содержимого большинства регистров. Фактически программа использует только регистр А машины М1Х. Программа трассировки не оказывает влияния ни на флаг сравнения, ни на флаг переполнения.
[Чем меньше регистров используется, тем меньшее их число нужно восстанавливать.) 4) Когда происходит переход к ячейке Л)МР, необязательно выполнять команду "БТА АНЕС", так как содержимое гА не изменилось. 5) После выхода из программы трассировки регистр Л не восстанавливается. В упр. 1 показано, как исправить эту ситуацию. 6) На трассируемую программу налагеюгся только три ограничения.
а) Она не должна сохранять что-либо в ячейках, используемых программой трассировки. Ь) Она не должна использовать выходное устройство, на которое выводится информация о трассировке [например, команда ЛВРБ дала бы неправильное указание). с) Во время трассировки она будет работать медленнее. 2. [26[ Модифицируйте приведенную в тексте программу трассировки таким образом, чтобы перед выполнением каждого шага она записывала на магнитную ленту (устройство О) следующую информацию. Слово 1, поле (О; 2): адрес ячейки. Слово 1, поле (4:5): регистр 3 (перед выполнением). Слово 1, поле (3:3) 2, если результат сравнения — больше, 1 — если равно, 0 — если меньше; плюс 8, если перед выполнением нет переполнения.
Слово 2: команда. Слово 3: регистр А (перед выполнением). Слова 4-9: регистры П-10 (перед выполнением). Слово 10: регистр Х (перед выполнением). Слова 11-100 каждого блока ленты размером 100 слов должны содержать еще девять групп по 10 слов, записанных в том же формате. 3.
[10[ В предыдущем упражнении программа трассировки записывает свои выходные данные на магнитную ленту Объясните, почему зто лучше, чем непосредственно распечатать результаты. 4. [28] Что произойдет, если программа трассировки будет трассировать саму себя? Если более конкретно, то выясните, как будет работать программа трассировки, если две команды — ЕЕТХ ЬЕА7ЕХ и ЛИР о+1 — поместить непосредственно перед ЕЕТЕЕ б. [28] Рассмотрим задачу, аналогичную предыдущей.
Пусть две копии программы трассировки помещены в различных местах памяти и настроены так, чтобы трассировать одна другую. Что произойдет? 6. [40[ Напишите программу трассировки, способную трассировать себя в смысле упр 4: она должна в замедленном режиме распечатывать собственные шаги, а ша программа будет трассировать саму себя в еще более замедленном режиме, и так до бесконечности, пока будет хватать памяти. Т.
[25[ Подумайте, как написать эффективную программу глрассироаки переходоа, которая выдает намного меньше выходных данных, чем обычная программа трассировки. Вместо того чтобы отображать содержимое регистров, программа трассировки переходов просто записывает происходящие переходы Она выдает последовательность пар (хм у~), (хг,уг), .... Это означает, что программа перешла из ячейки х~ в ум затем (после выполнения команд из ячеек ум у~ + 1, ..., хг) — из ячейки хг в уг и т. д.
[На основании этой информации следующая программа может восстановить ход выполнения программы и установить, как часто выполнялась каждая команда.) 1.4.4. Ввод и вывод Вероятно, самое очевидное, чем один компьютер отличается от другого,— это устройства ввода-вывода, а также компьютерные команды, управляющие этими периферийными устройствами. В рамках одной книги невозможно обсудить все проблемы и методы, связанные с данной областью, поэтому мы ограничимся изучением наиболее типичных методов ввода-вывода, применимых для большинства компьютеров. Операторы ввода-вывода машины М1Х представляют собой нечто среднее между самыми разнообразными средствами, имеющимися в реальных компьютерах.. Чтобы вы могли представить себе операции ввода-вывода на конкретном примере, давайте в этом разделе обсудим проблемы оптимального выполнения операций ввода-вывода в машине М1Х.
И снова я прошу читателя снисходительно отнестись к тому, что здесь рассма- Ф трнвается алахроллчявя малтла МХХ с ее перфокартами и т. п. Хотя этн устаревшле устройства сегодня полностью вышли пз употребления, анл ло-прежнему могут дать несколько важных уроков. Но, конечно, когда для этой цели будет лслальзоваться компьютер ММХХ, ол преподаст нам лх еще лучше. Многие пользователи компьютеров полагают, что ввод и вывод на самом деле не являются частью процесса "настоящего" программирования. Считается, что ввод и вывод — это нудные задачи, которые приходится выполнять только для того, чтобы ввести информацию в компьютер и вывести из него полученные результаты.