Юрий МагдаАссемблер для процессоров Intel Pentium
Введение
Эта книга посвящена описанию возможностей языка ассемблера процессоров Intel Pentium. Книга не является учебником по языку ассемблера, хотя и может использоваться в этом качестве, – скорее это расширенное руководство по применению ассемблера процессоров Intel Pentium. Материал книги содержит много справочной информации по командам ассемблера и современным технологиям обработки данных. Изучение современного ассемблера – задача далеко не простая, и эта книга позволит читателю успешно ее решить.
Язык ассемблера появился вместе с появлением процессоров и тесно связан с их архитектурой, позволяя напрямую обращаться к аппаратным ресурсам компьютера. Часто у читателей возникает вопрос: а зачем вообще нужно изучать язык ассемблера, когда имеются развитые средства программирования на языках высокого уровня, такие, например, как Visual C++ .NET фирмы Microsoft или Borland Delphi 2005? Тем более что помимо этих средств есть еще целый спектр специализированных программных продуктов для разработки офисных приложений, баз данных, электронных таблиц и т. д. Подобные программы называются средствами быстрой разработки и позволяют в считанные недели создавать самые сложные приложения.
Тем не менее значение языка ассемблера трудно переоценить. Все без исключения средства разработки программ в той или иной степени используют ассемблер. К примеру, большинство библиотечных функций языков C++ и Pascal, на основе которых построены такие мощные инструменты разработки, как Visual C++ и Delphi, написаны на ассемблере. Мультимедийные приложения, программы обработки сигналов и многие другие используют высокопроизводительные библиотеки функций, разработанные с помощью ассемблерных команд технологии SIMD. Наконец, если требуется, чтобы приложение работало максимально быстро и занимало меньше памяти (а это нужно для встроенных и мобильных систем в различных отраслях промышленности), то применение ассемблера является едва ли не единственным способом достижения цели. По этой причине большинство приложений, работающих в режиме реального времени, либо написаны целиком на ассемблере, либо используют в критических участках кода ассемблерный код.
Даже по этим нескольким примерам видно, что язык ассемблера имеет свои сферы применения, свои ниши, которые никогда и ничем не будут заняты. Кроме того, как уже отмечалось, при разработке приложений на языках высокого уровня критические секции, требующие высокой скорости выполнения, пишутся на ассемблере. Именно поэтому в Visual C++ .NET и Delphi 2005 имеется возможность создавать программный код на встроенном ассемблере. Должен заметить, что фирма Microsoft постоянно совершенствует встроенный ассемблер.
Вряд ли кому-то придет в голову разрабатывать большие и многофункциональные приложения на языке ассемблера, но ускорить производительность работы таких приложений с помощью ассемблера можно. По сравнению с языками высокого уровня ассемблер обладает одним фундаментальным преимуществом, проистекающим из его природы, – он позволяет писать самый быстрый и компактный код. Изучение языка ассемблера дает программисту одно очень важное преимущество – он глубже начинает понимать принципы работы приложений, написанных на любых языках, в том числе и на языках высокого уровня. Ассемблер очень помогает при разработке программ на языках высокого уровня, поскольку знание низкоуровневого программирования позволяет выбирать оптимальные решения.
Что же касается инструментальных средств для разработки приложений на «чистом» ассемблере, то в последнее время появились очень мощные приложения такого рода, что вынуждает по-другому взглянуть на проблему. Из таких инструментальных средств проектирования можно выделить в первую очередь макроассемблер MASM32, а также AsmStudio и NASM. Эти и другие инструменты разработки программ имеют самый современный графический интерфейс. Не следует забывать и о том, что для ассемблера разработаны многочисленные библиотеки функций, приближающие этот язык по своим функциональным возможностям к высокоуровневым средствам разработки приложений.
Материал книги охватывает полный спектр архитектурно-программных решений для процессоров Intel Pentium, включая как базовую программную архитектуру и набор основных команд ассемблера, так и современные технологии параллельной обработки данных (SIMD). Эта книга задумана как расширенный справочник по применению ассемблера в практических разработках, хотя может быть использована и как практическое пособие для программистов-разработчиков, желающих углубить свои знания о современных технологиях программирования на ассемблере.
Материал книги включает много примеров программного кода, в том числе и для технологий SIMD. Этими практическими примерами подкрепляются большинство теоретических аспектов, рассматриваемых в книге. По мнению автора, такой путь является наиболее эффективным для изучения языка ассемблера.
Все примеры программ являются полностью работоспособными и проверены автором. Они демонстрируют ключевые моменты использования тех или иных команд или технологий и реализованы в виде коротких процедур. Такая методика выбрана сознательно, поскольку длинные и сложные программы обычно запутывают читателя, и при их анализе легко теряются ключевые моменты, ради которых эти программы, собственно, и были разработаны. Любой пример несложно адаптировать для дальнейшего использования в собственных разработках.