Алексей Молчанов - Системное программное обеспечение. Лабораторный практикум

Тут можно читать онлайн Алексей Молчанов - Системное программное обеспечение. Лабораторный практикум - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Array Издательство «Питер», год 2005. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Системное программное обеспечение. Лабораторный практикум
  • Автор:
  • Жанр:
  • Издательство:
    Array Издательство «Питер»
  • Год:
    2005
  • Город:
    Санкт-Петербург
  • ISBN:
    978-5-469-00391-4
  • Рейтинг:
    5/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

Алексей Молчанов - Системное программное обеспечение. Лабораторный практикум краткое содержание

Системное программное обеспечение. Лабораторный практикум - описание и краткое содержание, автор Алексей Молчанов, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
В книге рассматриваются базисные теоретические основы, необходимые для построения компиляторов, основные технологические приемы и методы их реализации. В ней приведены различные варианты заданий для выполнения лабораторного практикума по курсу «Системное программное обеспечение», а также примеры выполнения этих заданий. В каждом примере подробно рассматриваются все особенности его выполнения, как на этапе подготовки необходимой математической базы, так и на этапе программной реализации. В лабораторных работах автор обращает внимание на основные сложности, связанные с ее выполнением, а также на возможные типичные ошибки и недочеты, дает рекомендации по возможностям программной реализации, отличным от кода, приводимого в примерах.
Книга ориентирована на студентов, обучающихся в технических вузах по специальностям, связанным с вычислительной техникой. Но она будет также полезна всем, чья деятельность так или иначе касается разработки программного обеспечения.

Системное программное обеспечение. Лабораторный практикум - читать онлайн бесплатно полную версию (весь текст целиком)

Системное программное обеспечение. Лабораторный практикум - читать книгу онлайн бесплатно, автор Алексей Молчанов
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Но система команд процессоров типа Intel 80x86 имеет одну особенность: команды условного перехода могут передавать управление не далее, чем на 128 байт вперед или назад от места команды. В момент генерации кода для триады IF, как правило, не известно, будет ли передача управления происходить в пределах 128 байт кода или выйдет за рамки данного ограничения. Чтобы обойти это ограничение, передачу управления можно организовать с помощью двух команд: сначала команда условного перехода по обратному условию «не ноль» передает управление на локальную метку, а потом команда безусловного перехода передает управление на требуемую «дальнюю» метку:

jnz @Fx

jmp @Mx

Fx:…

Здесь @Fx – локальная («обходная») метка, а @Mx – та метка, на которую необходимо передать управление. Именно такой подход реализован в разработанном генераторе ассемблерного кода. [11]

Есть еще одна особенность в генерации кода для триады IF: поскольку в разработанном генераторе триад операции сравнения и логические операции обрабатываются как линейные операции, а потому могут быть оптимизированы, первый операнд триады может оказаться константой. При этом триада IF будет выполнять не условный, а безусловный переход на одну из частей условного оператора в зависимости от значения этого операнда. Например, в последовательности операторов:

a:= 1;

if (a<0) b:=0 else b:=1;

первая часть условного оператора (b:=0) никогда не будет выполнена и в результате выполнения оптимизации это станет очевидным (первый операнд триады IF будет равен 0). Генератор ассемблерного кода порождает соответствующий код: если первый операнд равен 0 – команду безусловного перехода; если первый операнд не равен 0, никаких команд для триады IF вообще не порождается.

Можно отметить, что в этом случае вообще нет необходимости порождать код для одной из ветвей условного оператора, что сократит объем результирующего кода, но такая оптимизация требует существенных модификаций всего списка триад, что не предусмотрено в данном примере выполнения работы.

Описание используемого метода оптимизации

Машинно-независимые методы оптимизации

Оба используемых машинно-независимых метода оптимизации – метод свертки объектного кода и метод исключения лишних операций – были описаны при выполнении лабораторной работы № 4, поэтому нет необходимости описывать их здесь повторно. Эти методы оптимизации не зависят ни от входного, ни от результирующего языка, а потому реализующие их алгоритмы, разработанные при выполнении лабораторной работы № 4, могут быть без модификаций использованы в курсовой работе.

Функции, осуществляющие оба метода машинно-независимой оптимизации, реализованы в модуле TrdOpt (листинг П3.11, приложение 3). Для алгоритма оптимизации методом свертки объектного кода необходимо вычислять значения триад, которые могут входить в состав линейных участков кода. Типы таких триад, а также функции вычисления их значений зависят от входного языка (поэтому при выполнении лабораторной работы № 4 они были выделены в отдельный модуль). Вычисления триад для алгоритма свертки объектного кода для курсовой работы реализованы в модуле TrdCalc (листинг П3.9, приложение 3).

Кроме этих двух методов при генерации результирующего кода реализован еще один простейший метод оптимизации, который зависит от семантики входного языка. Этот метод основан на особенностях выполнения арифметических и логических операций. Учитываются следующие особенности:

• для логической операции OR нет необходимости порождать код, выполняющий эту операцию, если один из операндов равен 0;

• для операции AND нет необходимости порождать код, выполняющий эту операцию, если один из операндов равен 1;

• для арифметической операции сложения нет необходимости порождать код, выполняющий эту операцию, если любой из операндов равен 0, а для арифметической операции вычитания – если второй операнд равен 0.

В отличие от двух ранее рассмотренных методов оптимизации, эта оптимизация выполняется не над внутренним представлением программы (триадами), а над результирующей программой при генерации ассемблерного кода. Поэтому соответствующие действия реализованы в функции MakeOpcode в модуле TrdAsm (листинг П3.13, приложение 3).

Машинно-зависимые методы оптимизации

В качестве дополнительных возможностей в компиляторе, построенном в ходе выполнения примера курсовой работы, реализованы простейшие машинно-зависимые методы оптимизации. Эти методы не претендуют ни на полноту, ни на существенное повышение эффективности результирующей программы, но на их основе можно показать, как выполняется машинно-зависимая оптимизация.

Реализованные методы машинно-зависимой оптимизации основаны на двух особенностях системы команд процессоров типа Intel 80x86 [41, 44]:

1. Особенность загрузки данных в регистр аккумулятора eax.

2. Особенность выполнения арифметических операций.

В первом случае учитывается, что команда загрузки нулевого значения в регистр аккумулятора eax

mov eax, 0

выполняется дольше и имеет большую длину, чем команда очистки регистра eax, которая может быть осуществлена с помощью операций xor (исключающее или) или sub (вычитание) над этим регистром процессора. Например:

xor eax, eax

Поэтому в тех случаях, когда в регистр аккумулятора eax требуется загрузить нулевое значение, генератор ассемблерного кода порождает именно команду очистки регистра. Аналогично, если необходимо загрузить значение, равное 1, то порождается пара команд

xor eax, eax

inc eax

а для значения -1 – пара команд

xor eax, eax

dec eax

Оптимизация загрузки регистра аккумулятора выполняется при порождении результирующего кода. Она реализована в функции MakeMove в модуле TrdAsm (листинг П3.13, приложение 3).

Надо отметить, что эта оптимизация существенно зависит и от целевой вычислительной системы (поскольку она использует особенности системы команд процессоров типа Intel 80x86), и от результирующего языка (например, если бы операндами были однобайтовые величины, эффективность такой оптимизации была бы сомнительна).

Во втором случае учитывается, что при выполнении операций сложения и вычитания в тех случаях, когда один из операндов равен 1 или -1, результирующий код будет более эффективным, если использовать ассемблерные команды увеличения и уменьшения значения регистра на 1 (команды inc и dec):

• для операции сложения порождается команда inc вместо команды add, если один из операндов равен 1;

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Алексей Молчанов читать все книги автора по порядку

Алексей Молчанов - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Системное программное обеспечение. Лабораторный практикум отзывы


Отзывы читателей о книге Системное программное обеспечение. Лабораторный практикум, автор: Алексей Молчанов. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x