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

Трансляция строки 51а дает слово

Использовать буквенные константы (литералы), несомненно, удобно, так как программистам не нужно изобретать для тривиальных констант символические имена, а также помнить о том, что в конце каждой программы необходимо вставлять константы. Таким образом, программист может сосредоточиться на главной задаче и не волноваться по поводу подобных деталей. (Однако нужно заметить, что примеры литералов в программе Р не слишком удачны, поскольку, заменив строки 10 и 11 более эффективными командами "ENT1 1-L" и "ENT2 3", мы несколько улучшили бы программу.)

5. Хороший язык ассемблера должен имитировать ход мыслей программиста при написании машинных программ. Одним из примеров этой философии является использование литералов, о которых только что шла речь. В качестве другого примера можно привести применение символа "*", которое обсуждалось при описании программы М. А третьим примером является идея использования локальных символов, таких как символ 2Н, который появляется в поле метки строк 12, 25 и 28.

Локальные символы - это специальные символы, которые можно переопределять столько раз, сколько нужно. Глобальный символ, например PRIME, имеет только одно значение на протяжении всей програм.мы, и если бы он появился в поле метки более чем одной строки, то ассемблер зафиксировал бы ошибку. Но локальные символы имеют различную природу; например, мы пишем 2Н ("2 here" - "2 здесь") в поле метки и 2F ("2 forward" - "2 вперед") или 2В ("2 backward" - "2 назад") в адресном поле строки MIXAL:

2В означает ближайшую предыдущую метку 2Н; 2F означает ближайшую следующую метку 2Н.

Таким образом, символ "2F" в строке 14 означает ссылку на строку 25, символ "2В" в строке 24 - ссылку назад, на строку 12, а символ "2В" в строке 37 - ссылку на строку 28. Адрес 2F или 2В никогда не относится к собственной строке. Например, три строки кода MIXAL

2Н EQU 10

2Н MOVE 2F(2B),

2Н EQU 2В-3

в сущности, эквивалентны одной строке

MOVE *-3(10).

Символы 2F и 2В никогда не следует использовать в поле метки, а символ 2Н - в поле адреса. Существует десять локальных символов, которые можно получить, заменив в этих примерах "2" любой другой цифрой от О до 9.

Идею локальных символов выдвинул М. Э. Конвей (М. Е. Conway) в 1958 году в связи с разработкой ассемблера для машины UNIVAC I. Локальные символы освобождают программиста от необходимости выбора символических имен для каждого адреса, когда нужно всего лишь сослаться на команду, находяшуюся на расстоянии нескольких строк. Соседним командам не всегда можно придумать подходящие имена, поэтому программисты склонны вводить такие лишенные содержания символы.



как XI, Х2, ХЗ и т. д., что создает потенциальную опасность их повторения. Поэтому использовать локальные символы в языке ассемблера очень полезно и совершенно естественно.

6. Адресная часть строк 30 и 38 пуста. Это означает, что в результате трансляции получится нулевой адрес. В строке 17 адресную часть тоже можно было бы оставить пустой, но без этого лишнего О программа стала бы менее наглядной.

7. В строках 43-47 используется операция ALF, которая создает пятибайтовую константу в буквенно-цифровом символьном коде MIX. Например, в результате трансляции строки 45 получится слово

т. е. "uHUND" (часть слова "пятьсот") - часть строки заголовка в выходных данных программы Р.

Все ячейки, содержимое которых не определено в программе MIXAL, обычно обнуляются (за исключением ячеек, которые используются загружающей программой; обычно это ячейки 3700-3999). Поэтому после строки 47 нет необходимости определять пробелы в других словах заголовка.

8. Вместе с операцией ORIG можно выполнять арифметические действия (см. строки 40, 42 и 48).

9. В последней строке законченной программы на языке MIXAL всегда присутствует код операции END. Адрес в этой строке указывает на ячейку, с которой начинает выполняться программа после загрузки в память.

10. И в завершение анализа программы Р следует отметить, что ее команды построены так, чтобы значения в индексных регистрах можно было сравнивать с нулем, когда это только возможно. Например, в регистре гИ сохраняется величина J-500, а не J. Особого внимания в этом смысле заслуживают строки 26-34, хотя разобраться в них, наверное, непросто.

Интересно отметить статистические характеристики, которые наблюдаются во время реальной работы программы Р. Команда деления из строки 19 была выполнена 9 538 раз, а время выполнения строк 10-24 составило 182144и.

Программы на языке MIXAL можно перфорировать на картах или набрать на терминале компьютера, как показано на рис. 15. При использовании перфокарт выбирается следующий формат.

Колонки 1-10 Поле МЕТКА

Колонки 12-15 Поле ОП

Колонки 17-80 Поле АДРЕС и необязательные примечания

Колонки 11,16 Пустые

Но если в колонке 1 содержится звездочка, то все содержимое перфокарты рассматривается как комментарий. Поле АДРЕС заканчивается первой же пустой колонкой (пробелом), следующей за колонкой 16. Справа от этой первой колонки можно



Сои збо

II I I I III II I I II I III III I I I I II 1

!!!!!!!!!!!!!""""""""""""""""""""""""""" """"""

nnliinmmlmmiimmimiiiimmmnmmniinmmmiiiimin \ч\\\х\\\х\п\и\\\\и\\и\\\\\\\\\\и\\и\\и\\х\\\и\\\\\\\хи\и\\\хххххх\гг inn i]i 111 III i i illliliilii ill 111 Kill 11 mm 111 ill II mi iiiiiiiiiim Ml I nil

44444444444444444 44 14144 (Ml 144144 44444444 M4444444444444 I44M4444444444«444 I

iiliiiiiliiijijiiiiimniliiiiijiilsiiissmiiiimiiiiiiisiiisiiiiiiisimtii • MiimimlmMmiiHiiillimiuiiiiiimiiiiiiiiiiiiiiiiiiiiiiiiiiiMiiiii

)ПП1ПП1МППМПП)ПИЩ)1МП71МПМП)ПП)ИП)717П))7)ИП)ИИ7

liMiMiiiiiiiiiiillliiiMiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiHiiiiiiiiiiiiiiiii J ! mss. """"*"*»»"»""»»««"«««««»"«»»"«"«»»"««««""""

* ПРИМЕР ПРОГРАММЫ... ТАБЛИЦА ПРОСТЫХ ЧИСЕЛ

L EQU 500 PRINTER EQU 18 PRIME EQU -1 BUFO EQU 2000 BUFl EQU BUFO+25

ORIG 3000 START IOC 0(PRINTER)

LDI =1-L=

Рис. 15. Первые строки программы Р, перфорированные на картах либо набранные на терминале.

перфорировать любые комментарии, которые не влияют на транслируемую программу. {Исключение. Если в поле ОП содержится команда ALF, то примечания всегда начинаются в колонке 22.)

Когда входные данные вводятся с терминала, используется менее ограничительный формат: поле МЕТКА заканчивается первым же пробелом, а поля ОП и АДРЕС (если они есть) начинаются непустым символом и продолжаются до следующего пробела. В то же время за особым кодом операции ALF следуют либо два пробела и пять буквенно-цифровых символов, либо один пробел и пять буквенно-цифровых символов, первый из которых не является пробелом. В оставшейся части каждой строки могут содержаться примечания.

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

Теперь вы знаете, что можно сделать с помощью языка MIXAL. В 38к.лючение этого раздела мы дадим более подробное описание правил и, в частности, обратим внимание на то, чего не разрешается делать на языке MIXAL. Фактически язык определяется сравнительно небольшим количеством правил, приведенных ниже.



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