Бройдо В.Л. Вычислительные системы, сети и телекоммуникации (2002) (1186248), страница 72
Текст из файла (страница 72)
При использовании транслятора МАЯМ вводится ИА5И с:ргсд.ма или просто ИА5И Появится запрос 5цгсе (11епаае ( лма] Следует указать путь к файлу и имя исходного файла, если оно не было указано ранее. В ответ наОЬ]ес( 1т1епаае [ргод,оЬ]] ввести имя объектнойпрограммы (объектного модуля), если оно отличается от исходного файла (иначе, нажать клавишу 1птег). Если нужен листинг программы в машинных кодах, в ответ на 5оцгсе 1тзСтпд [пц).155] ввести имя дисковода, где его формировать, иначе, Исходная программа, составленная на языке ассемблера, использующего мнемонические сокращения английских слов и введенная в машину с использованием любого текстового редактора (хогг(, ХС, Вг(е1, (.ех(соп и т.
д.), оформляется в виде файла с расширением .азтп; после обработки исходной программы программой-ассемблером (АЯМ, МАЯМ или ТАЯМ) формируется программа в машинных кодах — объектная программа с расширением .оЬ]] уже понятная микропроцессору (АЯМ выдает только коды ошибок, обнаруженных при трансляции, а МАЯМ дает более развернутую информацию об этих ошибках; МАЯМ в отличие от АЯМ позволяет использовать в программах команды, ориентированные на использование современных микропроцессоров и сопроцессоров; возможности у ТАЯМ еще несколько шире, чем у МАЯМ).
Но объектная программа еще не является законченной и исполняемой микропроцессором: в ней окончательно оформлены еще не все адреса (программа не является <перемещасмойэ) и не объединены части (блоки) программы, оттранслированные отдельно друг от друга (например, с целью более простой их отладки). Преобразование объектной программы в исполняемую (компоновка объектной программы) выполняется загрузчиком — редактором связей 11ХК (либо Т(.1ХК). Исполняемая программа после загрузки имеет расширение .ехе. Отладку исполняемой программы (.ехе) удобно выполнять с использованием отладчика ОЕВ[)О.
зов Глава 9. П ог аммное п веление — основа автоматизации нажать клавишу ЕпЬег. Для получения листинга перекрестных ссылок программы в ответ на Сгозз-ге[егепсе [по1 . сг г) ввести имя дисковода, иначе, нажать клавишу ЕпЬег. Альтернативный вариант вызова ассемблера: НА5И [с.1ргад, с.. с:. с Листинг — распечатка, файл для распечатки; листинг программы содержит программу исходную и в машинных кодах, а также обнаруженные при трансляции ошибки в программе. Листинг перекрестных ссылок показывает имена переменных и номера строк программы, где эти переменные используются. 3. Компоновка объектного модуля (загрузка и редактирование связей).
Вводится Г1ЯК с;ргод ЬЬ1 или просто с!нх Появится запрос: ОЬ1ест еосо1еь ( ЬЬ11 гз Следует указать имя файла.оЬ), если оно не было указано ранее. С1 ррп [11е [ргод.ехе), если имя исполняемой программы другое, то следует его ввести, иначе — ЕпЬег. гз Ешь [11е [пр1.нар), следует ввести сдн1 п1ар-файл содержит таблицу имен и размер сегментов, а также ошибки, обнаруженные при загрузке; ввод;СОИ означает требование вывода их на экран дисплея. а 11Ьгаг[ез[.!1Ь);обычноЕпЬег(еслиприредактированиидополнительныхбиблиотек связей не требуется). Альтернативный вариант вызова загрузчика: ОНК [с:]ргод.ооз. с:, соо 4.
Отладка программы (если есть необходимость). Можно использовать отладчик РЕВ[)О. Вызов отладчика: ОЕВОСО ОЕВОО с:ргод.ехе. 5. Выполнение программы. При наличии приглашения к работе МВ-РОЯ ввести имя программы; с: ргод[. ехе). Структура исходной программы на языке ассемблера для получения исполняемой программы .ехе Операционная система М5-РОЯ предъявляет некоторые обязательные требования к структуре.АЯМ-программы, предназначенной для последующего создания .ЕХЕ-программьк 1д программа может использовать четыре сегмента памяти, начальные адреса которых должны быть загружены в регистры микропроцессора СБ, 55, РЯ и ЕЯ, а сами сегменты в явном виде определены в программе в виде операторных ско- Элементы программирования на языке ассемблер З09 бок; иия сетиента деднепт ...
имя сегиента епсв (версии МЯ-РОЯ 4.0 и выше допускают более простое указание сегментов в программе: имя сегмента. ); сь в программе должно быть указание, какие сегментные регистры закрепляются за используемыми сегментами памяти; при исполнении программы сегментные регистры С5, 53, Е5 в соответствии с этими указаниями загружаются автоматически; Сз сегмент данных Р5 в . ЕХЕ-программе не может быть загружен автоматически, поскольку он используется программой-загрузчиком (ь1пк) для формирования начального адреса служебной области памяти — префикса программного сегмента (РЕР), непосредственно предшествующего любой исполняемой программе.
Регистр сегмента данных Р5 должен быть инициирован принудительно— для этого следует в самом начале исполняемой . ЕХЕ-программы записать в стек вектор-адрес возврата к служебной области РЕР: содержимое регистра РЯ и нулевое смещение, а затем в регистр Р5 загрузить адрес сегмента данных исполняемой программы. РЕР— это группа служебных слов в оперативной памяти, формируемая для каждой загружаемой программы пользователя и занимающая обычно 256 байт (100 Н байт).
При загрузке программы пользователя в ОЗУ автоматически формируется РЕР, и ее начальный адрес записывается в регистр Р5; С1 обеспечение после завершения выполнения программы возврата к префиксу программного сегмента; проще всего зто можно сделать, оформив обращение к исполняемой программе в виде обращения к процедуре (главной процедуре, обязательно с атрибутом Еаг) и поместив в конце программы команду возврата ге? (выход из програлтмы можно выполнить также, используя прерывание 20Н РОЯ или функцию 4С прерывания 21Н РОЯ, но управление при этом передается не в РЕР, а непосредственно в резидентную часть программы СОММАХР.СОМ). Типовая структура.АБМ-ттрограммьт включает в себя: 1. Имя программы: ТПЕЕ ргод.
Я5м', может присутствовать комментарий назначения программы. 2. Инициализацию стоковой памяти в сегменте стека: 5ТДСКЕЕО зедюепг Зтасд ОМ М Мор~?? ; иеньие Ме32 снов в стеке обично ; задавать не спедует 5ТАСК5ЕО епдз 3. Инициализацию всех переменных в сегменте данных: ОА?Я5ЕО зедюепт ;задаются ииена всех констант и переменных, их .начальные значения и резервируется паиять под них ОДТД5ЕО епез 4. Назначение сегментных регистров в сегменте кодов: СООЕ5ЕО зедяепт Аззоюе С5:содезед, О5.4атазед, 55:згасдзед 5. Организацию главной программной процедуры Еаг: МД!М ргос Таг З1О Глава 9.
Прог аммное уп авленнв — основа автоматизации 6. Запись адреса префикса программного сегмента (РЗР) в стек: рывп 05 выЬ АХ. АХ рыпь АХ 7. Инициализацию содержимого регистра сегмента данных: воч АХ. Оатавед воч 05. АХ ;при указании в команде в качестве операнда симвопического ,ииени сегмента (Оагавед) происходит пересылка начального адреса етого сегмента— неверно указывать ЬГГвес Оасавед 8. Текст программы пользователя в сегменте кодов: основной текст програины 9.
Восстаноттление адреса РВР в ьхБ: гес 10. Тексты используемых процедур; если имеются процедуры пеаг, используемые в данной программе (например, процедуры всг201 и или ьтп25сг), то записываются тексты этих процедур. 11. Закрытие главной процедуры вази, сегмента кодов и конец программы: НЯ1М епбр СООЕ5ЕО епев епе ИА1И Итак, обобщенная структура программы: Ст11е ргод.авв псасхзед ведвепт ;задание паля паняти дпя стека вьасквед епбв Оасавед ведвепд :задание полей паняти дпя данных и определение всех констант и переиенных оасавед епов собевед ведвепс аяыпе С5:соеезед, 05пдасавед, 55;всасхвед ватп ргос таг ропп ОХ зоь АХ, АХ рывь ЯХ пач АХ. Оаьавед вач 05.
АХ ;основной текст програнкы гес ;тексты бпииних процедур ватп епбр соеевед епбз епе ватп Рассмотрим и ро грамм у расчета сложных процентов. Капитал (2 вкладывается в некоторое мероприятие, обеспечивающее ежегодный прирост капитала 1) Ж.
Задача: определить текущую величину капитала в течение первых )ч1 лет. Приведем АБМ-програемму для создания исполняемой .ЕХЕ-программы. Элементы программирования на языке ассемблер З11 Ьее йазспе(,азот ;расчет сложных процентов маси 'з!асК 64 бор(?) з(аскзц зецгпеп1 бчг епбз з!асхзц ба!взц ЧЧ0 зецп!еп! бЬ бЬ бЬ 00 0 01 й ! 0 Ьс! бы 1 ? 6,0,0,0,0,0,0,0 ' год капитал' 10,13,'$' 14 бир(0),'$' 6 бор[0), $ 10,13,'$' 1 1 100 ич! згЬ зг бЬ згк П1 О 1вп з10 ба!азц собвзц л!а(п епбз 'со бе' (аг 08:собезц, 08:ба1азц, 88:з!асхзц 0Х АХ,АХ АХ АХ,ба!азц 08,АХ АН,9; запрос на ввод 0 0Х,Ь((зе! ЧЧО 21Н АН,ОАН;ввод0 0Х,Ь((зе! Ьц( 21Н з1г2Ь|п 00,0! АН,В; запрос на ввод 0 зецгпеп! ргос аззогпе ризи зсЬ ризп гпоч гпоч п!оч п!оч !и! гпоч (п! са!! гпоч гооч 'ба1а';задание переменных 'Введите величину начального капитала (до 64000)' 10,13,'$' 10,13,'Введите процент годового прироста' 10,13,'$' 10,13,'Введите количество расчетных лет' 10,13,'$' о з~г Глава 9.