Анимация
JavaScript
|
Главная Библионтека ± Pl. Начать таблицу Р2. N-простое число Да/--ч Нет/---N <-Р7. PRIME [КЗ велико? J<- Р6. PRIME [К] \N? J Нет/ Грз. 500 чисел найдены? Р4. Увеличить N Р9. Напечатать заголовок Р10. Подготовить строку Р5. К-(-2
Р11. Напечатать строку Готово Рис. 14. Алгоритм Р. Р5. [К 4- 2.] Присвоить К 2. (PRIME [К] пробегает возможные простые делители N.) Р6. [PRIME [К] \N?] Разделить N на PRIME [К]; пусть Q -это частное от деления, а R - остаток. Если R = О (т. е. N не является простым), перейти к шагу Р4. Р7. [PRIME [К] велико?] Если Q < PRIME [К], перейти к шагу Р2. (В таком случае N должно быть простым; доказательство этого факта интересное и немного необычное; см. упр. 6.) Р8. [Увеличить К.] Увеличить К на 1 и перейти к шагу Р6. Р9. [Напечатать заголовок.] Теперь мы готовы к тому, чтобы напечатать таблицу. Переведем АЦПУ на следующую страницу. Занесем в BUFFER [0] строку заголовка и напечатаем эту строку. Присвоим В 1, М 1. Р10. [Подготовить строку.] Поместить PRIME[М], PRIMEC50 -Ь М], ..., PRIME[450 + М] в BUFFER [В] в соответствующем формате. Р11. [Напечатать строку.] Напечатать BUFFER [В]; присвоить В 1 - В (тем самым переключаясь на другой буфер) и увеличить М на 1. Если М < 50, вернуться к шагу Р10; в противном случае выполнение алгоритма заканчивается. Программа Р {Печать таблицы 500 простых чисел). Данная программа написана несколько "топорным" способом, и это неспроста. Причина в том, что преследовалась цель - проиллюстрировать в одной программе большинство возможностей MIXAL. rll = J - 500; rI2 = N; rl3 = K; rI4 указывает на В; rl5 равно М плюс число, кратное 50. 01 * ПРИМЕР ПРОГРАММЫ ТАБЛИЦА ПРОСТЫХ ЧИСЕЛ
51 CON BUFO+10 52 END START Конец программы. В отношении этой программы необходимо отметить следующие интересные моменты. 1. Строки 01, 02 и 39 начинаются со звездочки. Таким образом обозначается строка комментария, которая содержит только пояснения и не оказывает реального воздействия на транслируемую программу. 2. Как и в программе М, псевдооперация EQU из строки 03 определяет эквивалент символа. В данном случае эквивалентом L назйачено число 500. (В строках 10-24 этой программы L представляет количество простых чисел, которые нужно найти.) Обратите внимание, что в строке 05 символу PRIME присваивается отрицательный эквивалент; вообще говоря, эквивалентом символа может быть любое число, состоящее из пяти байтов и знака. В строке 07 эквивалент BUF1 вычисляется по формуле BUF0+25, что в результате дает 2025. В MIXAL арифметические операции над числами можно выполнять в ограниченном объеме. Еще один пример арифметической операции появляется в строке 13, в которой ассемблер вычисляет значение PRIME+L (в данном случае это 499). 3. Символ PRINTER в строках 25 и 35 используется в F-части. F-часть, которая всегда заключается в круглые скобки, может состоять из чисел либо символов точно так, как другие части поля ADDRESS. В строке 31 иллюстрируется спецификация частичного поля "(1:4)", в котором используется двоеточие. 4. В MIXAL предзсмотррно несколько способов определения слов, которые не являются командами. В строке 41 псевдооперация CON используется для определения обычной константы, "2". В результате трансляции строки 41 получится слово В строке 49 присутствует немного более сложная константа, "BUF1+10", в результате трансляции которой получится слово 2035 Константа может быть заключена между знаками равенства (см. строки 10 и И); в этом случае она называется литералом (или буквенной константой). Ассемблер автоматически создает для буквенных констант внутренние имена и вставляет строки "CON". Например, в результате трансляции строк 10 и 11 программы Р получится 10 LD1 conl 11 LD2 соп2 а в конце программы, между строками 51 и 52, в результате трансляции будут вставлены строки 51а conl CON 1-L 51b соп2 CON 3 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 |