Главная » Просмотр файлов » В.Н. Пильщиков - Программирование на языке ассемблера IBM PC

В.Н. Пильщиков - Программирование на языке ассемблера IBM PC (1110551), страница 9

Файл №1110551 В.Н. Пильщиков - Программирование на языке ассемблера IBM PC (В.Н. Пильщиков - Программирование на языке ассемблера IBM PC) 9 страницаВ.Н. Пильщиков - Программирование на языке ассемблера IBM PC (1110551) страница 92019-04-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 9)

е. описанными в другом модуле (в кахом именно - указывать не мадо). Олнако этого мало. Надо также в том модуле, где эти имена описаны (т. е. в М1), поыестить директиву РЮВ1ЛС, перечислив в ней эти имена: ЭВВЫС <ммх>, ..., <лмх> Эта директива ыожет указываться любое число раз и в любых местах модуля. В нашем конкретном случае в людуле М1 надо записать директиву Рввыс хюк Этой директивой мы сообшаель что имена Х и К данного ыодуля разрешено использовать в других ыодулях, что вгы экспортируем эти имена. Имена, которые описаны в модуле и которые доступны другим людулям, по отношению к этому модулю называются общими (досгупныыи всем, публичными).

Отметим, что имена, перечисленные в директиве РОВ(ДС, обязательно должны быть описаны в модуле и что в директиве их типы указывать не надо. Может возникнуть вопрос: а зачем в модуле М1 указывать, что юзеиа Х и К являются общими? Разве недостаточно директивы ЕХТ)11ч' в модуле М2? Оказывается, недостаточно. Дело здесь в следующем. Модули М1 и М2 транслируются по отдельиости и объединяются лишь после того, кж будут переведены на машинный язык. Но в машинноы варианте модуля М1 не остаиется никаких имен, поэтолгу, когда при обьединеиии модулей программы в людуле М2 надо будет замешпь имена Х и К на соответствующие адрес и число, сделать это уже не удастся - в модуле М1 нужной информапии не будет. Так вот, чтобы при транаипии модуля М1 ассемблер сохранил н)зхпую ипфорлощию об именах Х и К, мы и указываем директивой Р()В(ЛС иа особую роль этих имен. Встретив эту дирею тиву, ассемблер сохранит в объектнолг зшдуле М1 необходимую информапию об именах Х и К, которой затем, при объединении модулей, и воспользуется компоновщик.

Итж, если в каком-то модуле программы некоторое имя описано кж внешнее, то в каком-то другоы модуле это имя обязательно должно быть объявлено общим. При этом никакое иыя не должно быть обьявлено общим в нескольких модулях прогрючмы, иначе будет пуганипа.

"лизлог-миаи- 226 Программирование нв ввмнв вссвмблврв!ВЫ РС С учетом всего сказанного наши молули М1 и М2 должны иметь следующий внд: модуль и1 ЕХГЩ! Р:РЬЕ РОВХГС Х,К модуль Ы2 ехтВЕ х:ВЕРЕ,ЕзЬВЯ РВВЬХС Р Х ВВ Г Е ЕЯО 100 Р РЯОС РЬЕ ИОЧ Х,О иоч ьх,к 1) внешние имена констант ( т. е. с типоы АВЗ) не сегменгируются; 2) внешние метки и имена пропсдур ( т. е. с типом )ЧЕАК или РАК) всегда сегментируются по регистру СЗ, причем для дальних меток и процедур (РАК) всегда формируются дальние переходы, а для близких (АБАК)- близкие переходы. Например: сьгл ь; сзьь Рье Рте ь сахих и; сьхь неве Ртв и 3) для внешних имен переменных (ВУТЕ, мгОК(З, 0%Ой()) дейютвуют следующие правила: - если директива ЕХТКН с именеы размещена вне какого-либо программного сегмента, то любам команда с этим внешним именем транслируются без префикса, т.

е. считается, что это иьи должно сегментироваться по регисгру, который в данной команде подразумевается по умолчанию; - если директива ЕХТКХ с именем размещена внутри програмзгного сегмента, тогда зто внешнее шш по умолчанию сепвентируегся по тому же регистру, что и все имена из этого сегмента. 12.2З.

Сепчентирвванне внешних имен Следующая проблема, которая возникает в многоыодульных программах, - это проблема сепвентировання внешних имен. Обратите внимание, что в директиве ЕХТКН не указывается, по квхому сегментноыу регистру надо сегментировать внешнее имя. А это ва:кно знать ассемблеру, т. к. от этого зависит, как он должен транслировать команду, содержащую такое ши. Например, если имя Х надо сегментировать по репктру ЕЗ, тогда команда МОЧ Х,О должна восприниматься как МОЧ ЕЗ:Х,О, т. е. ассемблер должен добавлять префикс ЕЗь Но если нмя Х должно сепгентироваться по регистру ОЗ, тогда префикс ОЗ:, который подразумевается в команде МОЧ по умолчанию, ассеыблер не должен подставлять.

Конечно, если перед внешним именем явно указан префикс (например, МОЧ ЕЗ:Х,О), тогда проблем нет, но обычно имена указываются без префиксов, поэтому и возникает проблема с выбором по умолчанию сегментных регистров для внешник имен. В ЯА зта проблема решается слелующим образоьс Миогомолулыам программы 227 Пример: вхтви х:впав а еканхнт вхтви т:водо А июе в евамант ех',гдн х:водо аееамв ве:а,ое:в Такиы образом,место для директивы ЕХТ]]1[, вообще говоря, нельзя выбирать произвольно, от этого места зависит, кюс булуг сегментироваться перечисленные в ней внешние имена.

Что же касается директивы Р[]В[.]С, то ее можно размещать где угодно. Обычно ее указывают в самоы начале модуля - так легче увидеть, какие имена из этого модуля экспортируются, являются общими. 122.4. Доступ н внешним именам Указазь, по какому сегментному регистру какое внешнее имя сегментируется,- это только полдела. Это позволяет правильно оттранслировать команды, содержащие внешние имена, но еще не обеспечивает правильного выполнения этих команд.

Надо еще, чтобы при счете программм в сегментных репютрах находились нужные значения. Рассмотрим такой пример: аееомх ве:а Предположим, что мы находимся в модуле М1, что регистр []Б уже установлен на начало сегмента А и что иы хатим выполнить присваивание Х:мУ. Тогда, казалось бы, надо выполнить команды мзт ах,т иот х,ьх "лиаюг-миеи хис х хне х[ву1 хне т хне т[вз1 хне х хне х[ву1 ; модул» нг а ехамви* вхтви х:вове т вв о а шгпе хис ве:х хис яегх[ву] хис хе:т хис ве:т[ву] хис оя:х ; - хнс ое:х[ву] ; модуль Нх зовххс х в еваивнт хввг в хиве 226 Лрогрвммироввиив ив ввывв вссвмблврв (ЛЫ РС моч ьх,т Рван ла моч вх,вха х моч ва вх моч х,ьх РОР Вя гьхг х (сластя ла ( ь) ;ла: в гх: ьх гзоостааозвть ПВ ( Ьг Как видно, получилось громоздко и неуклюже, причем все это приходится повторять при каждом обращении к внешнему имени.

Почему так произошло". А потому, что ыы пытаемся работать с разными сегментами данных, используя толыго один сегментный регистр. Из-за этого нам приходится устанавливать эггл репктр на начало то одного сегмента, то другого, приходится то спасать этот репютр, то восстанавливать. Ясно, что мы существенно облегчим себе жизнь, если лля каждого сепвента будем использовать свой собственный регистр, например, репгстр 1)З для сегмента А и репгстр ЕЗ для сегмента В. ДаваГгге так и сделаем: установим один раз регистр ЕЗ на начало внешнего сегмента В, а затем будем использоюпь ЕЗ при каждом обращении к именам из этого сепвентгс иоч ьх,яхэ х иоч ха,ьх иоч ьх,т моч ха:х,ьх Отметим, что в этом случае уже нет необходимости специально повгещать директиву ЕХТКХ ХЛЧОКО внутрь сегмента А, никакой выгоды это нам не даст. Эту директиву можно размесппь и вне программных сегментов, например, в самом начале модуля М1, где ее проще всего заьютить.

Так сбмчно решается проблема доступа к внешним переменным. Что же касается доступа к внешним меткам или процедурам, то здесь ситуация существенно проще. Однако зго не так. Почему? Первая из этих команд проработает правилыю: имя У воспринимаспж хак сокращение адресной пары ПЗ:У, а зта пара и дает правюгьный адрес ячейки У нз сегмента А. Но вот слазующш команда будет рабоппь неправиль. но. Имя Х воспринимается как сокращение пары 0З:Х, и это правильно, но вот текущее значение репктра ПЗ не обеспечивает правивного доступа к ячейке Х нз сегмента В, ибо для праюшьного даст>па к Х репютр ПЗ должен указывать не на начало сепвента А, а на начало се(мента В. Следовательно, прежде чем выпозшпь вторую команду, в репктр ОЗ надо зваппь начало сепгента В; ПЗ:мВ.

Как зто сделать". Изи сегмента В не описано в модуле М1 и не явшется для него внешним, т. к. не уапано в дирепиве ЕХТКХ (отметнм, по имена сепвентов и не згогут быль объявлены квк внешние имена), поэтому укшывшь юш В в модуле М1 вообще нельзя. Но указывать явно это имя и не надо, если вспаьаяпь про оператор ЗЕО: ЗЕО Х - это как раз и есть начало того сепвеппь где описано имя Х, т. е. ЗЕО Х = В. Поэтому нам надо на самом деле выпозвпь присваивание ПЗ:=ЗЕО Х.

С учетоы этого и того, что, скорее всего, надо сохрзшпь текущее значение (А) регистра РЗ, пересылка Х:мУ должна реализовываться так: Многомодульные лдссмммы 222 Рассмотрим такой пример: модуль из РСВЬХС Ь с Еесиенз.' мояуль М1 ЕХШШ Ь:РАД Как уже было сказано, внешние метки всегда сепаентируются по репютру СЗ, причем если они обьявленм как дальние, то для них формируются дальние переходы. Поэтому в нашем примере команда 3МР 1. будет воспринюааться как команда )МР РАК РТй 1, ыашинный эквивалент которой выглядит таш КОП ееВГЬ)готе)Ь) По этой ыашинной команде в репютр СЗ заносится зей1Ь)=С, а в репгстр 1Р мшисывается о1з(Ь), т. е. переход в сегмент С на метку Ь произогщет правильно без каких-либо дополнительньщ мер с нашей стороны. ; всвомотательвая модула Ровь|с ест, ьовьхт в1 весиент еот ов )самвел ловца вводе в1 ЕИОВ сг яеаиеит АВВОИЕ СЯ:С1 г,овг,ьт Рдос Рьд ;щюцедура левавода больвак лвтввскак букв в мелле )ав в1годе: АЬ - лвбоя самвол )вв вакоде: АЬ - малая буква, есле АЬ - болвавя латиаская (аавче АЬ ве меаяется) 122.э.

Характеристики

Тип файла
DJVU-файл
Размер
4,55 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6451
Авторов
на СтудИзбе
305
Средний доход
с одного платного файла
Обучение Подробнее