AOP_Tom1 (1021736), страница 40
Текст из файла (страница 40)
с 07 !ОЕ +3 н — 1 Перейти к шагу М5, если т > Х(А). ОВ СНАНСЕИ ЕНТ2 0,3 А+1 МВ. Изменение ос ! ы А. ОО 1.0А 1,3 А + 1 т ы Х(А). !О ОЕС3 1 и М5. Уменашенне А, !1 !В ЕХ1Т !ИР ° 1 Вовврат к главной программе. 5 с) Столбец "Номер строки" является необязательным компонентом программы на языке И1ХАЬ, в этой книге он включен в примеры программ просто для облегчения ссылок на различные части црограммы. б) В столбце "Примечания' содержатся пояснения к программе и ссылки на шаги алгоритма 1 2.10М. Читателю следует сравнить этот алгоритм (с.
127) с приведенной выше программой. Обратите внимание, что при переводе алгоритма в код для М1Х допущгна некоторая "программистская вольность", например шаг М2 оказался последним При "занесении значений в регистры" (см.начало программы М) показано, какие компоненты И1Х соответствуют переменным. используемым в алгоритме. е) Столбец "Повтор" будет полезен при изучении многих программ для М1Х, которые рассматриваются в данной книге. Он представляет профиль провраммм, т. е. показывает, сколько раз команда из данной строки будет выполняться в ходе работы программы. Так, например, команда из строки Об будет выполнена и — 1 раз и г.
д На основании этой информации можно определить, сколько времени требуется на выполнение подпрограммы; оно равно (5+ 5п+ ЗА)и, где А — - величина, которая была тщательно проанализирована в разделе 1.2 10. А теперь давайте обсудим запись программы М на языке М1ХАЕ. Строка 01, Х ЕЦО 1000, говорит о том, что символ Х будет эквивалентом числа 1 000. Эффект этого действия проявляется в строке Об, в которой цифровой эквивалент команды "СМРА Х, 3" имеет вид т. е, "СМРА 1000,3". Строка 02 указывает, что следующие строки расположены, начиная с адреса 3000. Поэтому символ МАХ1МОМ, находящийся в поле МЕТКА строки 03, становится эквивалентным числу 3000, символ 1М1Т вЂ” числу 3001, символ ЕООР— числу 3003 и т.
д. В строках с 03 по 12 поля ОП содержатся символические имена команд М1Х: БТЛ, ЕМТЗ и т, д. Но символические имена ЕЦО и ОН10, которые находятся в столбце ОП строк 01 и 02. несколько отличаются от них; ЕЦО и ОК10 называются псевдооперацилми, так как они являются операторами языка М1ХА1., но не порождают машинных команд И1Х, Псевдооперации предоставляют специальную информацию о символической программе и в то же время не являются командами самой машины М1Х. Так, например, строка Х ЕЦО 1000 только сообщает некоторые сведения о программе М; это не означает, что во время выполнения программы какой-либо переменной присваивается значение 1000.
Обратите внимание, что для строк 01 и 02 машинные команды не порождаются. Строка 03 — это команда "сохранить Г', которая сохраняет содержимое регистра д в поле (О: 2) ячейки ЕХ1Т. Другими словами, она сохраняет г3 в поле адреса команды, расположенной в строке 12. Как уже упоминалось, программа М является частью большой программы. Если, например, в каком-нибудь месте этой программы встретится последовательность команд ЕМТ1 100 Ла МАХТМПМ ЗТА МАХ это приведет к вызову программы М со значением п, равным 100. В этом случае программа М найдет максимальный элемент среди Л [1],..., Л [100] и вернет управление команде "БТА МАХ", записав максимальное значение в гА, а его номер 7— в г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 0011 0257 0571 0907 1259 1613 2011 2389 2789 3217 0229 0541 0863 1223 1583 1987 2357 2741 3181 3571 Воспользуемся следующим методом.
Алгоритм Р (Печатав таблицы 500 простых чисел). Этот алгоритм (рис. 14) состоит из двух частей: при выполнении шагов Р1- Р8 готовится внутренняя таблица 500 простых чисел, а при выполнении шагов Р9 — Р11 результаты печатаются в таком виде, как показано выше. В последней части программы используются два "буфера", в которых создаются образы строк: пока печатается содержимое одного буфера, другой заполняется информацией. Р1. [Начать таблицу.] Присвоить РК1МЕ(1] с — 2, М е- 3, 3 +- 1. (В этой программе М пробегает нечетные числа в поисках кандидатов в простые числа: 3 подсчитывает, сколько простых чисел уже найдено.) Р2. [М вЂ” простое число.] Присвоить,1 е — 3+ 1, РВ1МЕ(з) е- М.
РЗ. [500 чисел найдены?] Если 3 = 500, перейти к шагу Р9. Р4. [Увеличить М.] Присвоить М < — М+ 2. Рис. 14. Алгоритм Р. Р5. [К +- 2.] Присвоить К е- 2. (РВ1МЕ[К3 пробегает возможные простые делители И.) Рб. [РВ1МЕ[К3'уИ?] Разделить И на РВ1МЕ[К3; пусть 0 — это частное от деления, а К вЂ” остаток. Если К = 0 (т. е. И не является простым), перейти к шагу Р4. РТ. [РК1МЕ[К3 велико?] Если 0 < РК1МЕ[К3, перейти к шагу Р2. (В таком случае И должно быть простым; доказательство этого факта интересное и немного необычное; см. упр.
6.) РВ. [Увеличить К.] Увеличить К на 1 и перейти к шагу Рб. Р9. [Напечатать заголовок.] Теперь мы готовы к тому, чтобы напечатать таблицу. Переведем АЦПУ на следующую странипу. Занесем в ВпгрЕВ[03 строку заголовка и напечатаем эту строку. Присвоим В +- 1, М е- 1. Р10. [Подготовить строку.) Поместить РК1МЕ[М3, РВ1МЕ[50+ М3,..., РК1МЕ[450+ М3 в ВВггЕВ [В3 в соответствующем формате. Р11. [Напечатать строку] Напечатать ВпггЕК[В3; присвоить В е- 1 — В (тем самым переключаясь на другой буфер) н увеличить М на 1. Если М < 50, вернуться к шагу Р10; в противном случае выполнение алгоритма заканчивается.
1 Программа Р (Печать таблицы 500 простых чисел). Данная программа написана несколько 'топорным" способом, и это неспроста. Причина в том, что преследовалась цель — проиллюстрировать в одной программе большинство возможностей М1ХА1. г11 в— в Л вЂ” 500; г12 = И; г13 = К: г[4 указывает на В; г15 равно М плюс число, кратное 50. 01 02 ОЯ 04 95 Об 07 ОВ 99 19 11 12 18 Ц 15 15 17 18 19 20 21 22 2Я 24 25 25 27 28 29 ЯО 81 32 38 84 85 35 87 ЯВ Я9 40 41 42 4Я 44 45 4б 47 48 49 50 ГРАММЫ ... ТАБЛИЦА ПРОСТЫХ ЧИСЕЛ МЕР ПРО ЕЦО ЕН ЕЦО 0,4[1:4) 1 50 4В 0,4[РН1ИТЕН) 24,4 2В [г15 уменьшается на 50, пока не станет неполохснтельным.) Р11.
Напечатать ст юкк Переключить буфера. Если г15 = О, то работа алгоритма заканчивается. ОЕ ТАБЛИЦ И БУФЕРОВ ОНАЧАЛЬНОЕ СОДЕРЖИМ РН1МЕ+1 2 ВПРО-5 Р1НБТ Р1ЧЕ НОНО НЕО Р В1МЕБ ВОРО+24 ВОР1+10 ВОЕ1+24 ОН1С СОИ ОН16 АЬР АЬР АЕР АЬР А1.Р ОН16 СОИ ОН16 е ПРИ 5 РН1ИТ РВ1МЕ ВОРС ВОР[ БТАНТ гн 4Н бН 2Н гн 4Н я ПЕРВ Т1ТЬЕ ЕЦО ЕЦО ЕЦП ОН16 1ОС 101 Ю2 1ИС1 БТ2 312 1ИС2 ЕИТЗ ЕМТА ЕМТХ 01Ч ЯХ2 СМРА 1МСЗ 36 ЯМР ООТ ЕИТ4 ЕИТ5 1МС5 [.ОА СНАП БТХ РЕС4 ОЕС5 35Р ОПТ 1.04 35И Н|Т 500 18 -1 2000 ВПРО+25 3000 О[РВ1ИТЕН) =1-5= =3= 1 РН1МЕ+5,1 2Р 2 2 0 0,2 РН[МЕ,З 4В РН1МЕ,З 1 бВ 28 Т1Т1.Е[РН1МТЕН ВОР1+10 -50 1.+1 РН1МЕ,5 Искомое количество простых чисел.
Номер АППУ. Память для таблицы простых чисел. Паиять для ВПРРЕЕ[0). Память для ВОРРЕЕШ, Перейти к новой странице. ~Нб М <- 3 Р2. М вЂ” и остое число. 1+-,1 + 1. РЕХМЕ[1) +- М. РВ. 590 чисел на еныу Р4. Увеличить М. Р5. К е- 2. гении.лп гАХ е- М. гА+- Ц, гХ+- Е. Перейти к Р4, если Е = О. ~РГ ге РВ. Увеличить К. Перейти к Рб, если Ц > РЕ1ИЕ[К) . В противном случае М вЂ” простое. Р9. Напечатать заголовок.
Присвоить В е — 1. Присвоить М+- О. Увеличить М Р10. По готовить ст ок Преобразовать РЕГМЕ[М] в десятичный формат. Первое простое число — 2. Символы для строки заголовка. Буфера ссылаются один на другой. СОИ ВОРС+10 ЕИР ЯТАКТ Конец программы. 1 В отношении азой программы необходимо отметить следующие интересные моменты. 1.
Строки 01, 02 и 39 начинаются со звездочки. Таким образом обозначается строка комментария, которая содержит только пояснения и не оказывает реального воздействия на транслируемую программу. 3. Символ РК1МТЕК в строках 25 и 35 используется в Г-части.
Р-часть, которая всегда заключается в круглые скобки, может состоять из чисел либо символов точно так, как другие части поля АРОКЕБЯ. В строке 31 иллюстрируется спецификация частичного поля "(1:4)", в котором используется двоеточие. 4. В И1ХАС предусмотрено несколько способов определения слов, которые не являются командами. В строке 41 псевдооперацня СОМ используется дли определения обычной константы, "2". В результате трансляции строки 41 получится слово В строке 49 присутствует немного более сложная константа, "КОР1+10", в результате трансляции которой получится слово + 2035 Константа может быть заключена между знаками равенства (см. строки 10 и 11); в этом случае она называется лисосриаом )или буквенной константой).