Анимация
JavaScript
|
Главная Библионтека
В приведенном выше коде используется одно хитрое правило, сформулированное в разделе 1.3.1: команда "ENTA -О" загружает минус нуль в регистр А, так же как команда "ENTA -5,1", когда в индексном регистре 1 содержится значение --5. В общем случае, если М равно нулю, команда ENTA загружает знак этой команды, а ENNA загружает противоположный знак. Когда автор писал первый черновик раздела 1.3.1, он не придал особого значения определению этого условия. Такие вопросы обычно возникают только при написании компьютерной программы, в которой используются данные правила. Несмотря на свои размеры, приведенная выше программа является неполной в нескольких отношениях. a) Она не распознает оцераций с плавающей точкой. b) Программирование кодов операций 5-7 оставлено для упражнения. c) Программирование операторов ввода-вывода оставлено для упражнения. d) Не предусмотрены средства загрузки имитируемых программ (см. упр. 4). e) Не включены программы INDEXERROR, ADDRERROR, OPERROR, MEMERROR, FERROR, SIZEERROR. Они предназначены для обработки ошибок, обнаруженных в имитируемой программе. f) Не предусмотрены средства диагностики. (Хороший имитатор должен, например, быть способным распечатать содержимое регистров во время выполнения программы.) УПРАЖНЕНИЯ 1. [Ц] Изучите все варианты применения подпрограммы FCHECK в программе-имитаторе. Можете ли вы предложить более удачный способ организации программы? (См. шаг 3 в конце раздела 1.4.1.) 2. [20] Напишите программу SHIFT, которой не хватает в программе, приведенной в тексте (код операции 6). 3. [22] Напишите программу MOVE, которой не хватает в программе, приведенной в тексте (код операции 7). 4. [14] Измените программу в тексте раздела, чтобы она начиналась так, как будто была нажата "кнопка GQ" машины MIX (см. упр. 1.3.1-26). ► 5. [24] Определите, сколько времени потребуется для имитирования операторов LDA и ENTA по сравнению с реальным временем, которое MIX затратит на их непосредственное выполнение. 6. [28] Напишите программы для операторов ввода-вьшода JBUS, ЮС, IN, OUT и JRED, которых не хватает в программе, приведенной в тексте раздела, разрешив использовать только устройства 16 и 18. Предполагается, что операции "читать перфокарту" и "перейти к новой странице" занимают Т = lOOOOu, в то время как операция "печатать строку" занимает Т = 7500и. [Замечание. Опыт показывает, что команду JBUS следует имитировать, рассматривая "JBUS *" как частный случай; иначе имитатор, похоже, остановится!] ► 7. [32] Модифицируйте решение предыдущего упражнения таким образом, чтобы выполнение кдманды IN или OUT не приводило к немедленной передаче входных-выходных данных. Такая передача должна происходить только после того, как пройдет примерно половина времени, которое необходимо для имитируемых устройств. (Это позволит избежать распространенной студенческой ошибки, когда команды IN и OUT используются неправильно.) 8. [20] Истинно или ложно следующее утверждение: "Каждый раз при выполнении строки 010 программы-имитатора выполняется неравенство О < г16 < BEGIN"? *1.4.3.2. Программы трассировки. Когда машина имитируется на самой себе (как в предыдущем разделе MIX имитировался на MIX), получается частный случай имитатора, который назьшается программой трассировки или слежения. Подобные программы иногда используются при отладке, так как позволяют распечатать пошаговый отчет о поведении имитируемой программы. в предыдущем разделе программа была написана так, как будто MIX имитировался на другом компьютере. Для программ трассировки используется совершенно другой подход; обычно ui позволяем, чтобы регистры представляли сами себя, а операторы выполняли сами себя, т. е. позволяем машине самой выполнять большинство команд. Основное исключение представляет команда перехода или условного перехода, которую нельзя выполнять, не модифицируя, так как программа трассировки должна сохранять общий контроль. Каждой машине присущи уникальные, свойственные только ей особенности, и это значительно усложняет трассировку. Для машины MIX самая трудная и интересная проблема связана с регистром J. Приведенная ниже программа трассировки запускается, когда главная программа переходит к ячейке ENTER. При этом в регистре J содержится адрес, с которого трассировка должна начаться, а в регистре X - адрес, где она должна закончить-
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 [ 78 ] 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 |