Анимация
JavaScript


Главная  Библионтека 

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

в результате будет создан новый внутренний символ и сразу перед строкой END будет вставлена строка CON, определяющая этот символ (см. примечание 4 после программы Р).

13. Каждому символу соответствует одно и только одно значение. Это число, занимающее полное слово MIX, обычно определяется символом из поля МЕТКА в соответствии с правилом 10 или 11, (Ь). Если этого символа не было в по.ле МЕТКА, то перед строкой END вставляется новая строка, у которой ОП = "CON", АДРЕС = "О" и в поле LOC которой содержится имя символа.

Замечание. Самым важным следствием из приведенных выше правил является ограничение на ссылки вперед. Для этого нельзя использовать символ, который еще не был определен в поле LOC одной из предыдущих строк; его можно применять только в качестве А-части команды. В частности, этот символ нельзя использовать (а) в связи с арифметическими операциями или (Ь) в поле АДРЕС операций EQU, ORIG и CON. Например, операции

LDA 2F+1

CON 3F

недопустимы. Это ограничение было наложено для того, чтобы обеспечить более эффективную трансляцию программ. Кроме того, опыт, полученный в процессе написания данной серии книг, показал, что это очень мягкое ограничение, которое редко имеет сколько-нибудь существенное значение.

На самом деле у MIX есть два символических языка программирования низкого уровня: MIXAL*, машинно-ориентированный язык, предназначенный для облегчения трансляции за один проход с помощью очень простого ассемблера, и PL/MIX, который более адекватно отражает информационные и управляющие структуры и выглядит, как поле примечаний программ на языке MIXAL. PL/MIX будет описан в главе 10.

УПРАЖНЕНИЯ (часть 1)

1. [00] в тексте раздела отмечалось, что запись "X EQU 1000" не генерирует машинной команды, которая присваивает значение переменной. Предположим, вы пишете программу для MIX, в которой хотите присвоить значение, равное 1 ООО, некоторой ячейке памяти (с символическим именем X). Как это сделать на языке MIXAL?

► 2, [10] Строка 12 программы М выглядит так: "JMP *", где * - метка этой же строки. Почему программа не зацикливается, вновь и вновь повторяя эту команду?

► 3. [23] Каким будет результат выполнения следующей программы, если она используется вместе с программой М?

START IN Х+1(0)

JBUS *(0)

ENT1 100 1Н JMP MAXIMUM

LDX Х,1

* Автор был крайне удивлен, когда в 1971 году узнеш о том, что MIXAL - это еще и название югославского стирального порошка для автоматических стиральных машин.



STA X.l STX X,2 DECl 1 JIP IB OUT X+l(l) HLT

END START I

► 4. [25] Выполните трансляцию программы P вручную. (Это займет не так много времени, как вы думаете.) Какие числа будут фактически содержаться в оперативной памяти в соответствии с этой символической программой?

5. [11] Почему в программе Р не нужна команда JBUS для определения времени готовности АЦПУ?

6. [НМ20] (а) Покажите, что если п не является простым числом, то п имеет делитель d, такой, что 1 < d < v"- (b) Учитывая этот факт, докажите, что проверка на шаге Р7 алгоритма Р показывает, что N - простое число.

7. [10] (а) Что означает "4В" в строке 34 программы Р? (Ь) Каким будет эффект (если он вообш;е будет), если метку строки 15 заменить меткой "2Н", а адрес строки 20 - адресом "2В"?

8. [24] Что делает следующая программа? (Не запускайте ее на компьютере, найдите ответ "вручную"!)

♦ ЗАГАДОЧНАЯ ПРОГРАММА

ORIG

♦+3000

ENT1

ENT2

ENT3

BUF, 2

INC2

DEC3

BUF.2

INC2

INCl

CMPl

=75=

ENN2

2400

BUF+2400,2(18)

INC2

♦ -2

AAAAA

IB 1

УПРАЖНЕНИЯ (часть 2)

Эти упражнения представляют собой небольшие задачи по программированию, иллюстрирующие типичные примеры применения компьютеров и охватывающие широкий диапазон различных методов. Читателю настоятельно рекомендуется решить хотя бы несколько из этих задач, чтобы получить некоторый опыт использования MIX, а также



достаточно полное представление об основах искусства программирования. Если хотите, можете проработать эти упражнения одновременно с чтением оставшейся части главы 1. Ниже перечислены используемые в задачах методы программирования.

Использование таблиц-переключателей для многовариантных решений: упр. 9, 13 и 23. Использование индексных регистров и двумерных массивов: упр. 10, 21 и 23. Распаковка символов; упр. 13 и 23.

Целочисленная и десятичная арифметика и масштабирование: упр. 14, 16 и 18.

Использование подпрограмм: упр. 14 и 20.

Буферизация ввода: упр. 13.

Буферизация вывода; упр. 21 и 23.

Обработка списков: упр. 22.

Управление в реальном времени: упр. 20.

Графическое отображение: упр. 23.

Каждый раз, когда в упражнении из этой книги говорится "напишите программу для MIX" или "напишите подпрограмму для MIX", следует написать только символический код на языке MIXAL для решения требуемой задачи. Этот код будет представлять собой не законченную программу, а только фрагмент полной (гипотетической) программы. В фрагменте кода не нужно выполнять ввод или вывод данных, если они должны быть взяты из внешних источников. Необходимо использовать только следующие поля строк программы на языке MIXAL; МЕТКА, ОП и АДРЕС, а также снабдить их соответствующими комментариями. Числовое представление транслированных машинных команд, номера строк и колонки с итоговым количеством выполнений различных команд (см. программу М) указывать не нужно, за исключением случаев, когда это оговаривается особо. Строка END тоже не нужна.

С другой стороны, если в упражнении говорится "напишите полную программу для MIX", значит, нужно написать выполняемую программу на языке MIXAL, которая, в частности, должна включать финальную строку END. Ассемблеры и имитаторы MIX, на которых можно протестировать полные программы, широко распространены, поэтому проблем возникнуть не должно.

9. [25] В ячейке INST содержится слово MIX, которое предположительно является командой MIX. Напишите программу для MIX, в которой совершается переход к ячейке GOOD, если это слово имеет допустимое С-поле, допустимое ±АА-поле, допустимое 1-поле и допустимое F-поле в соответствии с табл. 1.3.1-1. В противном случае в программе должен быть выполнен переход к ячейке BAD. Помните, что допустимость F-поля зависит от С-поля например, если С = 7 (MOVE), то допустимо любое F-поле, но если С = 8 (LDA), то F-поле должно иметь вид 8L + R, где О < L < R < 5. ±.\А-поле считается допустимым, за исключением случая, когда С определяет команду, запрашивающую адрес памяти, I = О и ±АА не является допустимым адресом памяти.

Замечание. Неопытные программисты склонны решать подобную задачу, программируя длинные серии тестов С-поля, такие как "LDA С; JAZ IF. DECA 5: JAN 2F; JAZ 3F; DECA 2; JAN 4F; ...". Этот подход никуда не годится! Лучший способ выбрать олин из многих вариантов - подготовить вспомогательную таблицу, содержащую информацию, в которой сосредоточена необходимая логическая схема. Если бы эта таблица содержала, например, 64 элемента, мы бы написали "LD1 С; LD1 TABLE,1.JMP 0,1" н в результате очень быстро перешли бы к нужной программе. В подобной таблице .можно хранить и другую полезную информацию. Табличный подход к решению данной задачи лишь ненамного увеличивает длину программы (из-за включения таблицы), но зато существенно повышает скорость ее выполнения и делает более универсальной.



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