Дж.Хиллбурн, П.Джулич Микро-ЭВМ и микропроцессоры (1979) (1092080), страница 22
Текст из файла (страница 22)
Каждый из них предназначен для описания определенного класса задач, а наиболее известными являются ФОРТРАН, АЛГОЛ, КОБОЛ, АР1., Р1/1. В программе, составленной на языке высокого уровня, одному оператору может соответствовать целая последовательность 140 Глава 5 Оалаженнае ерееремма Рис. 5.1.
Этапы разработки программы дли микро-ЭВМ. ,машинных команд, а трансляция такой программы на машинный язык производится при помощи особой программы, называемой компилятором. В процессе разработки программы часто возникает необходимость вносить в нее какие-то изменения, например исправить обозначение, вставить одну нли несколько команд. Эти задачи можно выполнить, используя специальную программу — редактор, которяя позволяет выбирать из ОЗУ одну за другой команды исходной программы с целью их коррекции. Для облегчения идентификации и коррекции команды нумеруются, и редактор автоматически изменяет нумерацию при добавлении или изымании отдель- Программное обеспечение 14 | ных команд. И наконец, скорректированная программа может быть распечатана и/или выведена на бумажную ленту для последующего ввода в ЭВМ.
Программа в процессе выполнения может находиться в постоянном либо в оперативном ЗУ. Если программа находится в ПЗУ, она постоянно хранится в ЭВМ н может быть реализована путем передачи управления по адресу первой команды. Для этого следует выполнить команду ЛИР при помощи переключателя, расположенного на пульте оператора, или кнопки КЕЗТАКТ, реализующей те же функции. Такова обычная процедура действий в специализированных микро-ЭВМ. Если же программа во время выполнения должна находиться в ОЗУ, то перед выполнением она вводится туда с клавишного пульта или устройства считывания бумажной ленты. Для ввода используется специальная программа, называемая загрузчиком.
Эта программа часто является резидентной и хранится в ПЗУ. В функцию программы-загрузчика зачастую входят операции ЧТЕНИЕ либо ЗАПИСЬ по заданному адресу памяти, а также выполнение работы по отладке и обслуживанию программы. В этом случае ее называют монитором. Выполнение программы, загруженной в память, начинается при передаче управления по первому адресу программы. Поскольку в основном микропроцессоры используются в специализированных системах, программа обычно хранится в ПЗУ.
Однако использование ОЗУ в процессе разработки программы имеет ряд преимуществ. Этапы разработки программ для микро-ЭВМ схематически показаны на рис. 5.1. 5.2. СОСТАВЛЕНИЕ АЛГОРИТМА ПРОГРАММЪ| Первым этапом разработки программы является составление общей схемы решения задачи в виде пошаговой процедуры, которая называется алгоритмом,11]1. Алгоритм напоминает рецепт из поваренной книги, однако отдельные шаги определены здесь более строго. Алгоритму присущи следующие свойства: 1, Конечность, Задача должна быть решена за конечное число шагов.
2. Определенность. Действия на каждом шаге алгоритма должны быть строго определенными и однозначными. 3. Вход. В алгоритме может быть определена некоторая информация, вводимая извне. 4. Выход. После выполнения алгоритма определяются значения некоторых величин. Эти значения зависят от входной информации и характеристик алгоритма. 5. Эффективность. Результат выполнения алгоритма предсказуем и имеет практическое значение. ) 42 Глава Ю ПРИМЕР зп Предположим, мы хотим сложить два 16-значных десятичных числа ФА и А!В, выраженных в двоично-десятичном коде, а результат записать по адресу ФА.
Простейший алгоритм подобной процедуры выглядит следующим образом: 1. Определяем адреса чисел й1А и ЖВ в памяти. 2. Загружаем й!А в аккумулятор. 3. Складываем содержимое аккумулятора и й(В как десятичные числа. 4. Записываем результат по адресу !тА, определенному на ша'-ге 1. Однако даже такие простые операции не могут быть непосредственно выполнены микропроцессором, поскольку для этого необходимо, чтобы аккумулятор оперировал всеми разрядами 16-значных двоично-десятичных чисел одновременно. Другимисловами, для этой цели требуется вычислительная машина с длиной слова 64 разряда.
Если же используется 8-разрядный микропроцессор (что соответствует двум двоично-десятичным числам), то для сложения 16-значных десятичных чисел процедуру сложения необходимо повторить восемь раз — по одному разу на каждые два десятичных знака. Такое сложение удобнее всего выполнить при помощи операции цикла, что иллюстрируется приведенным ниже примером, где наименование в круглых скобках, например (ЗУМВ), используется для обозначения содержимого символического адреса ВтМВ.
Алгоритм сложения двух 16-значных чисел. 1. Определяем адреса двух наименьших значащих цифр чисел УА и А!В: (АДРЕСА) =ФА! и (АДРЕСВ) =А!В!. Остальные цифры каждого числа хранятся в последовательных ячейках памяти. 2. Настраиваем счетчик индикации этапов процедуры (например, устанавливаем СЧ=8).
3. Записываем содержимое АДРЕСА в аккумулятор: А (АДРЕСА) . 4. Складываем содержимое АДРЕСВ с содержимым аккумулятора как десятичные числа: Ал — А+ (АДРЕСВ). 5. Запоминаем содержимое аккумулятора по адресу АДРЕСА: (АДРЕСА) — А. 6. Увеличиваем на единицу АДРЕСА и АДРЕСВ: АДРЕСА АДРЕСА+ 1; АДРЕС В вЂ” АДРЕСВ + 1. 7.
Уменьшаем на единицу содержимое счетчика: ОЧ~-СЧ вЂ” 1. 8. Если содержимое счетчика равно нулю, значит сложение 16-значных чисел выполнено; в противном случае необходимо возвратиться к шагу 3 и, начиная с него, повторить выполнение алгоритма. На первом шаге оператор (АДРЕСА) =)УА1 определяет, что содержимое памяти по символическому адресу АДРЕСА есть МАь Таким образом, две наименьшие значащие цифры чисел А!А и Л'В хранятся соответственно по адресам АДРЕСА и АДРЕСВ. На Ирогралмное обеслечение 143 шагебзначения АДРЕСА и АДРЕСВ измеияютсятаким образом, что при следующем проходе цикла АДРЕСА и АДРЕСВ будут адресами третьей и четвертой цифр УА и ФВ соответственно. После завершения алгоритма результат будет записан в память на место, занимаемое вначале числом УА, которое, естественно, 'будет стерто. Следующий этап — запись рассмотренного алгоритма с использованием набора команд выбранного микропроцессора.
Вопрос о выборе микропроцессора достаточно сложен, так как возможности разных микропроцессоров по выполнению конкретной программы значительно отличаются. Необходимые сведения о некоторых существующих микропроцессорах приведены в гл. 7. 5.3. БЛОК-СХЕМЫ Блок-схема — это схематическое представление процесса прохождения информации через компоненты обрабатывающей системы '12]. На некотором этапе разработки программы желательно составить ее блок-схему. Однако вопрос о том, на каком этапе это наиболее целесообразно сделать, является спорным.
Было бы вполне логично составлять блок-схему до начала написания программы. Однако на практике этот принцип часто игнорируется изза сложности получения хорошей блок-схемы априори. Тем не менее не вызывает сомнения тот факт, что блок-схема является важным средством документирования рабочей программы. Поэтому мы поясним понятие блок-схем программ, дальнейшее изучение которых можно продолжить, воспользовавшись литературными источниками [2 — 4]. На рис.
5.2 представлены общепринятые обозначения различных операций. Применение этих обозначений для построения блок-схемы программы примера 5.1 показано иа рис. 5.3. Отметим, что один блок схемы не обязательно строго соответствует одному шагу алгоритма. Предполагается, что размещение в памяти чисел, над которыми производится сложение, известно до входа в программу в соединителе 1. При достижении же соединителя 2 сумма УА и УВ занимает в памяти место, первоначально отведенное УА. 5.4. МАШИННЫЙ ЯЗЪ|К Поскольку каждый микропроцессор имеет свой машинный язык, нам для рассмотрения примера необходимо воспользоваться каким-то одним из них. Предположим, что мы хотим написать программу, блок-схема которой изображена на рис. 5.3, для микропроцессора 1п1е1 8080.
Прежде всего необходимо определить адреса переменных, используемых в вычислениях. В микропроцессоре 8080 принята 16-разрядная адресация памяти, что позволяет адресовать непосредственно 65 К байт памяти. Пусть в нашем примере используются адреса памяти 100 — 10Ры. Тогда можно распределить память следующим образом: Юрадотла Принятие решения Ручная операцоя //омьгетпарий Пяончание Соединитель деланое определенный пооцеге !например, подпроерамма 1 Гоединитель О Енешнао — — Стреляи перегори Рис. 5.2. Обозначения операций; используемме при составлении блок-схем ал.
горитмов. Рис. 5.3. Блок-схема программм сложения двух 16-зиачных чисел в 8-разрядном процессоре. программное обеспечение 145 Память 100 107!в ЖА 108 — 10 Рте ]ЧВ 8-разрядные [) и Е АДРЕСЛ регистры Н и 5 АДРЕСВ микропроцессора С СЧ Теперь, когда имеется распределение памяти, можно цриступить к написанию программы. В приложении Д приводится олный набор команд для микропроцессора 8080, а в табл. 5.1 помещены команды, необходимые для нашего примера. В различных микро-ЭВМ, построенных на базе одного микропроцессора (в нашем случае зто микропроцессор 8080), при одинаковом наборе машинных команд может быть разной мнемоника их обозначения.
Мы будем ориентироваться на мнемонику, микро-ЭВМ МС8-80 15]. Таблиян б.! Некоторые команды микропроцсссора 8086 (для макро«ЭВМ МСЗ-80 фирмы 1п<е!) Мнемоника Ком ыша Машинный код 1.Х! 0 ЬХ! Н МЧ! С ХВА А ЬРАХ 0 АРС М РАА 0001 0001 0010 0001 0000 1110 !010 11!! 0001 10!О 1000 !!!О 0010 011! Е « — <Вз)) Р «(Ва> Ь « — <Ва>; Н « — <Вв> с — <в > А « — А<Т)А Л « — [(Р) (Е)] А « — — А+ [(Н) (Ь)] +Перенос Произвести десятичнун) коррекюпо ак- кумулятора'> [(Р) (ЕЦ « — Л Н, Ь г — Н, Ь -); 1 Р,Е е — Р,Е+1 С е — С вЂ” ! Если (НУЛЬ), СК « — < Вв > < Ва > $ТАХ 0 1><Х Н 1)т)Х 0 РСй С ЛЧ3 0001 0010 0010 00!! 0001 0011 0000 !10! !100 0010 Предположим, требуется сложить числа Л)А=0001003890010173 )ЧВ=0000953210340002 1Π— 719 ') Сложение аььполняется в двоичной оистеме. Перенос производится из третьего <ЬЗВ+ +3) и седьмого <М3В) разрядов, которые используются для проверки и корректиРовки Ре.
аультата в двоично-десятичном коде при выполнении команды ОАА <равд. З.б). Примечание. ( Вз) и ( Ва ) относятся к байтам 2 и 3 для команд длиной в несколько байтов. ПО) <ен обозначает содержимое ячейки памяти, адрес ктпорой содержится в Регистрах О н Е. 146 Глава а При передаче управления программе в ОЗУ будут находиться следующие данные: Адрес Содержимое (в десятичной системе) (т. е. 0111 001Ц 100 73 101 01 102 01 103 90 104 38 105 00 106 01 107 ОО 108 02 109 00 1ОА 34 1ОВ 10 1ОС 32 10Р 96 10Е 00 10Р 00 Программа сложения чисел может быть написана в виде команд машины 8080 по следующей схеме: 1. В регистры Р и Е записываем 100м — адрес УАь 2.
В регистры Н н Е записываем 108гв — адрес МВь 3. В регистр С записываем число 8. 4. Очищаем флажок переноса при помощи операции ИСКЛЮЧАЮЩЕЕ ИЛИ содержимого аккумулятора с самим собой. 5. Записываем в аккумулятор число, которое находится по ад. ресу, хранимому в регистрах Р и Е. 6. Складываем содержимое аккумулятора и разряда переноса с содержимым адреса, находящегося в регистрах Н и Е. 7. Производим десятичную коррекцию содержимого аккумуля. тора. 8.
Запоминаем содержимое аккумулятора по адресу, хранимому в регистрах Р н Е. 9. Увеличиваем на единицу содержимое регистров Н и Е. 10. Увеличиваем на единицу содержимое регистров Р и Е. 11. Уменьшаем на единицу содержимое регистра С. 12. Переходим к п. 5, если на шаге 11 флаг нуля не установлен. Предположим, что программа хранится в ПЗУ, начиная с адреса 500на Двоичное содержание ПЗУ для этого случая показано в табл. 5.2.