Главная » Просмотр файлов » assembler. Учебник для вузов_Юров В.И_2003 -637с

assembler. Учебник для вузов_Юров В.И_2003 -637с (862834), страница 23

Файл №862834 assembler. Учебник для вузов_Юров В.И_2003 -637с (Юров В.И - Assembler. Учебник для вузов. 2003) 23 страницаassembler. Учебник для вузов_Юров В.И_2003 -637с (862834) страница 232021-12-22СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

главу 2). В контексте нашего рассмотрения интерес представляют регистры SP и ВР. Если процессор видит в качестве операнда(или его части, если операнд — выражение) один из этих регистров, то по умолчанию он формирует физический адрес операнда, используя содержимое регистраSS как сегментную составляющую этого адреса. Что подразумевает термин «поумолчанию»? Вспомним (см. главу 1) набор микропрограмм в блоке микропрограммного управления, каждая из которых выполняет одну из команд в системемашинных команд процессора. Каждая микропрограмма работает по своему алгоритму. Изменить его, конечно же, нельзя, но можно чуть-чуть подкорректировать.Делается это с помощью необязательного поля префикса машинной команды (см.раздел «Формат машинных команд IA-32» в главе 3).

Если программист согласенс тем, как работает команда, то это поле отсутствует. Если же есть необходимостьвнести поправку (если, конечно, она допустима для конкретной команды) в алго-102Глава 5. Синтаксис ассемблераритм работы команды, то необходимо сформировать соответствующий префикс.Префикс представляет собой однобайтовую величину, численное значение которой определяет ее назначение. Процессор распознает по указанному значению, чтоэтот байт является префиксом, и дальнейшая работа микропрограммы выполняется с учетом поступившего указания на корректировку ее работы. В главе 3 мыперечислили все возможные префиксы машинных команд. В контексте нашегообсуждения интерес представляет один из них — префикс замены сегмента. Егоназначение состоит в том, чтобы указать процессору (а по сути, микропрограмме)на то, что мы не хотим использовать сегмент по умолчанию. Возможности для подобного переопределения, конечно, ограничены.

Сегмент команд переопределитьнельзя, адрес очередной исполняемой команды однозначно определяется паройCS:IP. А вот сегменты стека и данных — можно. Для этого и предназначен операторпереопределения сегмента (:). Транслятор ассемблера, обрабатывая этот оператор,формирует соответствующий однобайтовый префикс замены сегмента и ставит егоперед машинным представлением соответствующей команды ассемблера. Например,.codejmp metl5; обход обязателен, иначе поле ind; будет трактоваться как очередная команда; описание поля данных в сегменте команд,indmetl:dbmoval,cs:ind; переопределение сегмента позволяет работать с данными,; определенными внутри сегмента кодаПродолжим перечисление операторов.II Оператор именования типа структуры также заставляет транслятор производить определенные вычисления, если он встречается в выражении.

Подробноэтот оператор (.) описывается в главе 13 при обсуждении сложных типов данных.II Оператор получения сегментной составляющей адреса выражения возвращаетфизический адрес сегмента для выражения, в качестве которого могут выступать метка, переменная, имя сегмента, имя группы или некоторое символическое имя (рис. 5.12).Рис.

5.12. Синтаксис оператора получения сегментной составляющейОператор получения смещения выражения позволяет получить значение смещения выражения в байтах относительно начала того сегмента, в котором выражение определено (рис. 5.13).Рис. 5.13. Синтаксис оператора получения смещенияНапример,.datapoledwДирективы сегментации103.codemov ax.seg polemov es.axmov dx,offset poleтеперь в паре es:dx полный адрес poleДирективы сегментацииВ ходе предыдущего обсуждения были приведены основные правила записи команд и операндов в программе на ассемблере. Открытым остался вопрос о том, какправильно оформить последовательность команд, чтобы транслятор мог их обработать, а процессор — выполнить. В главах 2 и 3 мы уже касались понятия сегмента.

При рассмотрении архитектуры процессора мы узнали, что он имеет шесть сегментных регистров, посредством которых может одновременно работать:is с одним сегментом кода;т с одним сегментом стека;и с одним сегментом данных;Ш с тремя дополнительными сегментами данных.Еще раз вспомним, что физически сегмент представляет собой область памяти,занятую командами и/или данными, адреса которых вычисляются относительнозначения в соответствующем сегментном регистре.Синтаксическое описание сегмента на ассемблере представляет собой конструкцию, представленную на рис. 5.14.-[SEGMENjJrТип выравниванияТип комбинированияКласссегментаТипразмера .сегментаРис.

5.14. Синтаксис описания сегментаВажно отметить, что функциональное назначение сегментации несколько шире,чем простое разбиение программы на блоки кода, данных и стека. Сегментацияявляется частью более общего механизма, связанного с концепцией модульногопрограммирования. Она предполагает унификацию формата объектных модулей,104Глава 5. Синтаксис ассемблерасоздаваемых компилятором, в том числе компилируемых с разных языков программирования.

Это позволяет объединять программы, написанные на разных языках. Именно для реализации различных вариантов такого объединения и предназначены операнды в директиве SEGMENT. Рассмотрим их подробнее.« Атрибут выравнивания сегмента (тип выравнивания) сообщает компоновщику о том, что нужно обеспечить размещение начала сегмента на заданной границе.

Это важно, поскольку при правильном выравнивании доступ к даннымв процессорах i80x86 выполняется быстрее. Допустимые значения этого атрибута приведены далее. По умолчанию тип выравнивания имеет значение PARA:D BYTE — выравнивание не выполняется. Сегмент может начинаться с любогоадреса памяти;D WORD — сегмент начинается по адресу, кратному двум, то есть последний(младший) значащий бит физического адреса равен 0 (выравнивание по границе слова);П DWORD — сегмент начинается по адресу, кратному четырем, то есть два последних (младших) значащих бита равны 0 (выравнивание по границе двойного слова);П PARA — сегмент начинается по адресу, кратному 16, то есть последняя шестнадцатеричная цифра адреса должна быть Oh (выравнивание по границепараграфа);П PAGE — сегмент начинается по адресу, кратному 256, то есть две последниешестнадцатеричные цифры должны быть OOh (выравнивание по границестраницы размером 256 байт);Р MEMPAGE — сегмент начинается по адресу, кратному 4 Кбайт, то есть три последние шестнадцатеричные цифры должны быть OOOh (адрес следующейстраницы памяти размером 4 Кбайт).№ Атрибут комбинирования сегментов (комбинаторный тип) сообщает компоновщику, как нужно комбинировать сегменты различных модулей, имеющие однои то же имя.

По умолчанию атрибут комбинирования принимает значениеPRIVATE. Возможные значения атрибута комбинирования сегмента перечислены далее:Р PRIVATE — сегмент не будет объединяться с другими сегментами с тем жеименем вне данного модуля;Р PUBLIC — заставляет компоновщик объединить все сегменты с одинаковымименем. Новый объединенный сегмент будет целым и непрерывным. Всеадреса (смещения) объектов, а это могут быть, в зависимости от типа сегмента, команды или данные, будут вычисляться относительно начала этогонового сегмента;Р COMMON — располагает все сегменты с одним и тем же именем по одномуадресу, то есть все сегменты с данным именем перекрываются.

Размер полученного в результате сегмента будет равен размеру самого большого сегмента;Р AT xxxx — располагает сегмент по абсолютному адресу параграфа (параграф —область памяти, объем которой кратен 16, потому последняя шестнадцате-Директивы сегментации105ричная цифра адреса параграфа равна 0). Абсолютный адрес параграфа задается выражением ххх. Компоновщик располагает сегмент по заданномуадресу памяти (это можно использовать, например, для доступа к видеопамяти или области ПЗУ), учитывая атрибут комбинирования. Физически этоозначает, что сегмент при загрузке в память будет расположен начиная с этогоабсолютного адреса параграфа, но для доступа к нему в соответствующийсегментный регистр должно быть загружено заданное в атрибуте значение.Все метки и адреса в определенном таким образом сегменте отсчитываютсяотносительно заданного абсолютного адреса;П STACK — определение сегмента стека.

Заставляет компоновщик объединитьвсе одноименные сегменты и вычислять адреса в этих сегментах относительно регистра SS. Комбинированный тип STACK (стек) аналогичен комбинированному типу PU BLIC за исключением того, что регистр SS является стандартным сегментным регистром для сегментов стека. Регистр SP устанавливаетсяна конец объединенного сегмента стека. Если не указано ни одного сегментастека, компоновщик выдаст предупреждение, что стековый сегмент не найден. Если сегмент стека создан, а комбинированный тип STACK не используется, программист должен явно загрузить в регистр SS адрес сегмента (подобно тому, как это делается для регистра DS).* Атрибут класса сегмента (тип класса) — это заключенная в кавычки строка,помогающая компоновщику определить нужный порядок следования сегментов при сборке программы из сегментов нескольких модулей.

Компоновщикобъединяет вместе в памяти все сегменты с одним и тем же именем класса (имякласса в общем случае может быть любым, но лучше, если оно отражает функциональное назначение сегмента). Типичным примером использования именикласса (обычно класса code) является объединение в группу всех сегментов кодапрограммы. С помощью механизма типизации класса можно группировать также сегменты инициализированных и неинициализированных данных.^ Атрибут размера сегмента. Для процессоров i80386 и выше сегменты могутбыть 16- или 32-разрядными.

Это влияет прежде всего на размер сегмента и порядок формирования физического адреса внутри него. Далее перечислены возможные значения атрибута:П USE16 — сегмент допускает 16-разрядную адресацию. При формированиифизического адреса может использоваться только 16-разрядное смещение.Соответственно, такой сегмент может содержать до 64 Кбайт кода или данных;П USE32 — сегмент должен быть 32-разрядным. При формировании физического адреса может использоваться 32-разрядное смещение. Поэтому такойсегмент может содержать до 4 Гбайт кода или данных.Все сегменты сами по себе равноправны, так как директивы SEGMENT и ENDS несодержат информации о функциональном назначении сегментов.

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

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

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

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