Анимация
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

П, =, $, <, ...), так как их не сможет прочитать ни одно устройство чтения перфокарт. В частности, нельзя использовать команды ENT, INC и СМР, поскольку их невозможно перфорировать на карте.

1.3.2. Язык ассемблера компьютера MIX

Символический язык компьютера MIX используется для того, чтобы облегчить чтение и написание программ, а также избавить программиста от беспокойства по поводу утомительных мелких деталей, которые часто становятся причиной дополнительных ошибок. Этот язык под названием MIXAL (MIX Assembly Language*) является расширенным вариантом системы обозначений, которая использовалась для команд в предыдущем разделе. Главной его особенностью является то, что для обозначения чисел можно использовать буквенные имена, а с помощью поля метки связывать имена с ячейками памяти.

Чтобы легче было разобраться в языке MIXAL, рассмотрим простой пример. Приведенный ниже код является частью большой программы; это подпрограмма нахождения максимума п элементов Х[1],... ,Х[п] с помощью алгоритма 1.2.ЮМ.

Программа М {Нахождение максимума). Занесение значений в регистры: гА = т, гИ = п, г12 = j, rI3 = к, X[i] = CONTENTS (X + г).

Машинный код

Номер строки

МЕТКА

АДРЕС

Повтор

Примечания

1000

DRIG

3000

3000

3009

MAXIMUM

EXIT

Связь с подпрограммой.

3001

INIT

ENT3

Ml. Шштализатя. к п.

3002

3005

CHANGE?

j<-n, т*-Х[п], к*-п-1.

3003

1000

LOOP

CMPA

n- 1

МЗ. Сравиеиие,

3004

3007

n- 1

Перейти к шагу М5, если m > Х[к].

3005

CHANGEM

ENT2

A + l

М4. Изменение т. <- к.

3006

1000

Л + 1

т <- Х[к].

3007

DEC3

М5. Уменьшение к.

3008

3003

LOOP

М2. Все проверено? Перейти к МЗ, если к>0.

3009

3009

EXIT

«

Возврат к главной программе.

Эта программа позволяет проиллюстрировать сразу несколько моментов.

a) Столбцы "МЕТКА", "ОП" и "АДРЕС" представляют особый интерес; в них содержится программа на символическом языке MIXAL, и ниже мы подробно рассмотрим эту программу.

b) В столбце "Машинный код" содержатся реальные цифровые команды машинного языка, соответствующие символическим командам языка MIXAL. MIXAL был разработан так, чтобы любую программу на этом языке можно было легко транслировать на цифровой машинный язык. Трансляция обычно выполняется другой компьютерной программой, которая называется ассемблерной программой или ассемблером. Таким образом, для программирования на машинном языке программист может использовать MIXAL, чтобы не определять эквивалентные цифровые коды команд вручную. В этой книге практически все программы для MIX написаны на языке MIXAL.

Язык ассемблера компьютера MIX. - Прим. перев.



c) Столбец "Номер строки" является необязательным компонентом программы на языке MIXAL, в этой книге он включен в примеры программ просто для облегчения ссылок на различные части !фограммы.

d) В столбце "Примечания" содержатся пояснения к программе и ссылки на шаги алгоритма 1 2.ЮМ. Читателю следует сравнить этот алгоритм (с. 127) с приведенной выше программой. Обратите внимание, что при переводе алгоритма в код для MIX допущена некоторая "программистская вольность", например шаг М2 оказался последним При "занесении значений в регистры" (см. начало программы М) показано, какие компоненты MIX соответствуют переменным, используемым в алгоритме.

e) Столбец "Повтор" будет полезен при изучении многих программ для MIX, которые рассматриваются в данной книге. Он представляет профиль программы, т. е. показывает, сколько раз команда из данной строки будет выполняться в ходе работы программы. Так, например, команда из строки 06 будет выполнена п - 1 раз и г. д На основании этой информации можно определить, сколько времени требуется на выполнение подпрограммы; оно равно {Ъ + Ъп + ЗА)и, где А - величина, которая была тщательно проанализирована в разделе 1.2 10.

А теперь давайте обсудим запись программы М на языке MIXAL. Строка 01,

X EQU 1000,

говорит о том, что символ X будет эквивалентом числа 1 ООО. Эффект этого действия проявляется в строке 06, в которой цифровой эквивалент команды "СМРА X, 3" имеет вид

1000

т. е. "СМРА 1000,3".

Строка 02 указывает, что следующие строки расположены, начиная с адреса 3000. Поэтому символ MAXIMUM, находящийся в поле МЕТКА строки 03, становится эквивалентным числу 3000, символ INIT - числу 3001, символ LOOP - числу 3003 и т. д.

В строках с 03 по 12 поля ОП содержатся символические имена команд MIX: STJ, ENT3 и т. д. Но символические имена EQU и GRIG, которые находятся в столбце ОП строк 01 и 02, несколько отличаются от них; EQU и 0RIG называются псевдооперациями, так как они являются операторами языка MIXAL, но не порождают машинных команд MIX. Псевдооперации предоставляют специальную информацию о символической программе и в то же время не являются командами самой машины MIX. Так, например, строка

X EQU 1000

только сообщает некоторые сведения о программе М; это не означает, что во время вьшо;шения программы какой-либо переменной присваивается значение 1000. Обратите внимание, что для строк 01 и 02 машинные команды не порождаются.

Строка 03 - это команда "сохранить J", которая сохраняет содержимое регистра J в поле (0:2) ячейки EXIT. Другими словами, она сохраняет rJ в поле адреса команды, расположенной в строке 12.

Как уже упоминалось, программа М является частью большой программы. Если, например, в каком-нибудь месте этой программы встретится последовательность



команд

ENTl 100 JMP MAXIMUM STA MAX

это приведет к вызову программы М со значением п, равным 100. В этом случае программа М найдет максимальный элемент среди Х[1],..., А[100] и вернет управление команде "STA МАХ", записав максимальное значение в гЛ, а его номер j - в г12 (см. упр. 3).

Строка 05 передает управление строке 08. Строки 04, 05 и 06 в дополнительных объяснениях не нуждаются. В строке 07 вводится новое обозначение: звездочка (читается "текущий"), которая указывает на начальную ячейку текущей команды; поэтому запись "*+3" ("текущий плюс три") означает "три ячейки после начала текущей команды". Поскольку в строке 07 находится команда, начинающаяся с ячейки 3004, то "*+3" означает ссылку на ячейку 3007.

Оставшаяся часть символического кода не требует каких-либо разъяснений, так как говорит сама за себя. Обратите внимание, что в строке 12 снова появляется звездочка (см. упр. 2).

В следующем примере демонстрируются другие функции языка ассемблера. Задача заключается в том, чтобы вычислить и напечатать таблицу первых 500 простых чисел, расположив их в 10 столбцах по 50 чисел. На АЦПУ эта таблица будет напечатана следующим образом.

ПЕРВЫЕ ПЯТЬСОТ ПРОСТЫХ ЧИСЕЛ

0002 0233 0547 0877 1229 1597 1993 2371 2749 3187

0003 0239 0557 0881 1231 1601 1997 2377 2753 3191 0005 0241 0563 0883 1237 1607 1999 2381 2767 3203 0007 0251 0569 0887 1249 1609 2003 2383 2777 3209 ООН 0257 0571 0907 1259 1613 2011 2389 2789 3217

0229 0541 0863 1223 1583 1987 2357 2741 3181 3571

Воспользуемся следующим методом.

Алгоритм Р {Печать таблицы 500 простых чисел). Этот алгоритм (рис. 14) состоит из двух частей: при выполнении шагов Р1-Р8 готовится внутренняя таблица 500 простых чисел, а при выполнении niaroB Р9-Р11 результаты печатаются в таком виде, как показано выше. В последней части программы используются два "буфера", в которых создаются образы строк; пока печатается содержимое одного буфера, другой заполняется информацией.

Р1. [Начать табчицу.] Присвоить PRIME[1] 2, N 3, J 1. (В этой программе N пробегает нечетные числа в поисках кандидатов в простые числа; J подсчитывает, сколько простых чисел уже найдено.)

Р2. [N -простое число.] Присвоить J •<- J -t- 1, PRIME [J] •<- N.

РЗ. [500 чисел найдены?] Если J = 500, перейти к шагу Р9.

Р4. [Увеличить N.] Присвоить N N -Ь 2.



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