Бройдо В.Л. Вычислительные системы, сети и телекоммуникации (2002) (1186248), страница 73
Текст из файла (страница 73)
Программное управление — основа автоматизации точ |п1 точ п|оч |п! са11 точ точ |п! точ точ !п1 сав пюч точ пюч абб п|оч точ точ точ !п! гзв гпоч то| б|ч з!о О,АХ АХ,| Ь!п2з1г АН,9; вывод года ОХ,оттзе! зг 21Н пюч точ сав пюч точ |п1 АН,9; вывод пробела ОХ,О!1зе! згЬ 2!Н АХ,О; вывод прибыли Ь!п2з1| АН,9 ОХ,ойзе1 зг 21Н точ точ 1п1 точ са11 пюч точ |п1 АН,9; перевод строки ОХ,о|тзе1згн 21Н п|оч точ |п| ОХ,от!зетуу0 гтн АН,ОАН; ввод 0 ОХ,оттзе1оот 21Н з1г2Ь!и 0,01 АН,9; запрос на ввод й ОХ,оттзе! УЧИ 21Н АН,ОАН; ввод й ОХ,опзе1 Ьс1 2!Н з1|2Ь!и й, О1 АХ,О 0!,АХ 01,100; расчет 01=(1|0/100)*109 АХ, ОО| присвоение О=Об О, АХ ан,9 бх, о!таз! ч|ч1 21Н АХ, О, расчет 0=0*01 О1 Элементы программирования на языке ассемблер З1Э 1; 1=Н! !пс АХ,|;сравнение!с и АХ, 1ч' гв1; условный переход по !К=и пюч сп|р !|е гег Ь|п2з1г рюс гпоч рг2: зцЬ гпоч бес сгпр !а |поч в,оязе1 зг+5 бх,бх пточ рг1: хог сач сх ОЬЗОП [з|],б! 3| ах,О рг1 ог гпоч бес сгпр ]пе ге1 епбр ргос Ь!п2з1г ь|г2Ь!и пеаг; процедура перевода АЯСП [110,! ! -кодов в двоичный код 01,0! сх,10 з[,ьо1+1 ЬП,ЬЬ Ьь[ьц[+!] а1,[з!+Ьх] ах,О!П П10 01,ах АХ,я!О геп 01О,АХ Ьх ргз го оч хог пюч !еа хог гпоч ргз: гпоч апб пюч п|о! пюч бвс ]пх гег з1г2Ь|п лга!и собезо епбр епбр епбз епб гпа!и пеаг з[,о[!ее! зг+5 процедура перевода двоичного бх,бх;кода в код АЗСИ с предварительным [з!],б! !Ьбнулением поля зг В з[,о[[за! зг рг2 сх,10 314 Глава8.
П ог аммное л авление — основа автоматизации В качестве иллюстративного примера для сравнения сложности программ на языке ассемблера с программами на языке высокого уровня ниже приводится без пояснений программа решения этой задачи на языке Ваз(с 10 рюпс "Расчет споыных прооентов" 20 тпрыт "8ведите О. О. й". О. О.
И 30 01-1+ОПОО 40 1-1 50 О 0*01 50 р С 1, О 70 1-1+! 80 тт !а-В слеп 50 90 епв Основные сведения о листинге и его структуре Лислтинг (распечатка) программы на ассемблере используется как при создании ассемблерных программ, так и в качестве источника информации для квалифицированных программистов при отладке и оптимизации программ, написанных на языках высокого уровня. Ни один другой компилятор и его листинг не дает программисту такого количества полезной технической информации, как ассемблер. Ведь одна из основных целей использования языков высокого уровня — как раз желание избежать не очень сушественных технических подробностей.
Но если программист хочет разобраться с подробностями созданной программы, то большинство отладчиков могут распечатать эквивалент созданной объектной программы на языке ассемблера. Эти распечатки позволяют программисту оценить качество программы и являются весьма полезными при ее оптимизации. Листинг состоит из двух частеи: из листинга программы и сводной информации о сегментах и идентификаторах программы. Листинг программы имеет три столбца, в которых содержит команды исходной ассемблерной программы и соответствуюшие им объектные коды: а левый столбец содержит шестнадцатеричное значение смешения адреса команды (счетчик команд — 1Р) от начала сегмента; сз правый столбец содержит операторы и псевдооператоры ассемблера (команды и директивы программы); !О в средней части размешены коды: для сегмента стека и сегмента данных — числа, запоминаемые в соответствуюШих ячейках памяти; для сегмента команд это коды машинных команд МП, соответствуюших операторам ассемблера.
Сводная информация о сегментах и идентификаторах дает подробную их характеристику. В конце листинга приводятся сообшения об ошибках в программе. При ассемблировании и редактировании связей могут быть получены етце два листинга с дополнительной ннформациеи: сй листинг перекрестных ссылок указывает номер строки программы, в которой опрелелен каждый идентификатор, и номер тех строк, в которых имеются на него ссылки (этот листинг можно получить, если на запрос ассемблера о Сговв 315 Элементы программирования на языке ассемблер ге(егепсе ввести имя файла ргод (а не Нц1.Скг — по умолчанию), при атом в основном листинге программы добавится столбец с номерами строк); с! листинг распределения памяти содержит подробные сведения о сегментах всех блоков программы, объединяемых загрузчиком 1 1ЫК (листинг содержится в файле ргод.!пар). Особенности структуры машинных команд Объектные коды, приведенные в среднем столбце листинга, — это, по сушеству, машинная исполняемая (.ЕХЕ или .СОМ) программа, записанная в шестнадцатеричных кодах.
Структура команды в исполняемой программе может существенно отличаться от породившей ее команды ассемблера. Например, стандартная двухадресная команда типа пюч, або, 1пЬ, апс и т. д. с адресацией типа !в, г или г, а в исполняемой программе может занимать 4 байт. КОП С и глоб гер г/ш С1зр С Шар Н Первый байт (байт кода операции) содержит код операции (КОП) и два однобитных поля: 0 (направление) и н (слово).
Поле С определяет направление передачи данных (записи результата) внутри команды. Если гН1, то передача в гед, если омО, то передача из гед. Поле и определяет формат данных: слово (и-1) или байт (н-0). Второй байт команды (байт способа адресации) имеет три поля: гед (гщрес регистра, где находи~ся один из операндов), !поо (режим адресации) и г/т (регистр/память). Если хюсы11, то второй из операндов находится тоже в регистре и поле г/пт— адрес етого регистра.
Если иод><11, то второй из операндов находится в памяти, причем при рос=00: 01зр=0 — смешение отсутствует (нет полей сц зрЬ и о1зрН), при асс=01: О! зр-о! зрЬ вЂ” старший байт смешения отсутствует, при пой=10: 01 Зр=01зрН. О1 зрЬ (есть оба байта смешения). Поля асс><11 и г/!в (гед) определяют способ формирования исполнительного адреса (А„,„), как показано в табл. 9.1. Таблица 9.1. Способы формирования исполнительного адреса г/гп или гер гпон=оо гппе 01 гпоц=10 гппгГ 11 ча=о пг=! ВХ+8! ВХ+О1 ВР+8! А1.
С1. СХ 001 010 ох ВР+О1 81 011 100 81. ВХ АН СН 8Р Ю! 110 01 ВР 81 С1зр* ВХ ОН вн Если пю0=00 и г/!1=110, то А„„, - ЙзрН, !)!зрим — исполнительный адрес находится в команде (прямая адресация). ВХ+8!+С!зр ВХ+О1+Шар ВР+внавр ВР+ОНС1зр 8НС!ар О!+фар ВР+азр ВХ+С!зр ВХ+8НС1зр ВХ+ОНС1зр ВР+8НС!зр ВР+О1+Шар 81+отар ОНО!ар ВРгг!1зр ОХ+шар З1Б Глава 9. Программное управление — основа автоматизации Третий и четвертый байты команды рассматриваемой структуры содержат 16-битовыйй код смещения поля памяти второго операнда (г11эрН вЂ” старший байт, йзр(.— младший байт). Более подробно с объектными кодами команд ассемблера можно познакомиться в работах[10,35). Последовательность работы ПК при выполнении программы Программа решения задачи состоит из последовательности команд, которые выполняются друг за другом.
Исключения составляют команды передачи управления, изменяющие естественный ход выполнения программы путем передачи управления по имеющемуся в них явному или неявному адресу. Каждая команда программы начинает исполняться сразу, как только ее адрес (смещение) поступит в регистр микропроцессора 1пзггцсгог Ро1пгег (!Р). Для выполнения любой, лаже самой короткой команды в МП типа С15С требуется несколько тактов. 1. Первый такт у всех команд одинаковый — по адресу, поступившему в 1Р, выполняется считывание кода команды и передача этого кода в блок регистра команд (БРК) микропроцессора. Более подробно последовательность работы машины в этом такте можно описать следующим образом (здесь и далее указываются только основные управляющие сигналы); Сз в регистр ! Р поступает сигнал считывания информации, и считанный код адреса смещения команды (А,„„„) поступит на вход узла формирования адреса в УУ; на второй вход этого устройства из МПП поступит считанный из регистра сегмента кода (СБ) начальный адрес кодового сегмента; сз в УгйЛ эти коды сложатся и сформируется абсолютный адрес команды по формуле: А.в =А,',„„, 16+А,„,,„,; гз абсолютный адрес по кодовым шинам адреса(КШЛ) поступите регистр адреса оперативного запоминающего устройства (ОЗУ), и будет подготовлена соответствующая атому адресу ячейка памяти для считывания информации; 0 в ОЗУ поступит управляющий импульс считывания, и код команлы из ячеек памяти будет перелан на кодовые шины данных (КШД).
Количество сч итанпых ячеек зависит от длины кода считываемой команды; по КШД код команды пройдет на регистр данных ОЗУ и будет записан обратно в ячейки памяти, из которых он считывался (будет регенерирован); гз одновременно по тем же КШД код команды пройдет в УУ и будет записан в БРК. Последовательность работы ПК при выполнении программы З17 2. 3. Второй и последующие такты команды зависят от кода этой команды и в первую очередь от кода операции (КОП). Рассмотрим дальнейшую работу ПК применительно к выполнению ассемблерной команды Я00 ЯМ, Ро1е.
В соответствии с данной командой во втором такте должен быть расшифрован код операции команды для определения набора управляющих сигналов, необходимых для выполнения команды, из регистра АХ считано первое число, участвующее в операции, и это число помещено в регистр Рег1 АЛУ. Для этого: П в начале второго такта выполнения команды код операции, соответствуюгций ассемблерному обозначению Я00, поступит из БРК на вход дешифратора операций (ДШО) устройства управления, в котором по данному коду будет выбрана одна из шин; гз эта шина является адресной шиной ПЗУ микропрограмм, инициирующей группу ячеек памяти, содержащих сигналы, необходимые для управления выполнением операции сложения. Под действием этих управляющих сигналов в этом же втором такте из БРК будет считан адрес первого числа— АХ, код которого пройдет транзитом через УФА и по КША поступит в МПП; а в МПП будет подготовлен для работы регистр АХ, и из этого регистра будет считано первое число, которое по КШД пройдет в Рег1 АЛУ.
В третьем такте выполнения команды Я00 ЯХ, Ро) е из инициированных ячеек ПЗУ микропрограмм будут считаны сигналы, которые выполнят следующие действия: 0 считают второй адрес из команды, находящейся в БРК. Ассемблерное имя этого адреса Ро)е, но в коде машинной команды будет находиться уже двоичный код адреса А,,„, взятый из таблицы адресов именованных полей памяти (эту таблицу можно видеть в конце листинга программы); 01 передадут этот адрес на вход УФА.
На второй вход УФА поступит начальный адрес сегмента данных А„из регистра ОБ. В У ФА будет сформирован абсолютный адрес второго числа: А =А' „16+А, (составляющие А6' и Амь в команде не использованы); гз адрес А„м по КША пройдет в ОЗУ, где по этому адресу будет считано второе число; гз по КШД считанное число поступит в Рег2 АЛУ и обратно в ОЗУ для регенерации. В четвертом такте все управляющие сигналы поступят в АЛУ, где: 12 число из Рег1 будет передано на один вход сумматора; гз число из Рег2 будет передано на второй вход сумматора; а в сумматоре числа сложатся и сумма поступит в Рег1 АЛУ.
В пятом, последнем такте выполнения команды Я00 ЯМ, Ро1е сумма чисел из АЛ У должна быть передана и записана в регистр АХ МПП, а в регистре 1Р— сформирован адрес смешения следующей команды программы. Для этого: З1В Глава 9. Прог аммное и авление — основа автоматизации а из кода команды в БРК будет считан первый адрес — АХ, который транзитом через УФА пройдет по КША в МПП, где инициирует для приема информации регистр АХ; й из Рег1 АДУ будет считана сумма чисел, которая по КШД пройдет на вход МПП и будет записана в регистр АХ; а в регистр 1Р будет добавлено число 6, равное длине выполненной команды (команда Я00 АХ, Ро1 е имеет длину 6 байт); Поскольку в регистре 1Р сменился код адреса смешения, ПК приступит к выполнению следуюшей команды программы.