Язык ассемблера для процессоров Intel

3-е издание
Кип Ирвин

Assembly Language For Intel-Based Computers Third Edition
Kip Irvine
книга Язык ассемблера для процессоров Intel, 3-е издание

Тираж данной книги закончился.
Оглавление
Введение

Эта книга предназначена для студентов и профессионалов, интересующихся основами операционных систем и архитектурой микропроцессоров. В третьем издании Кип Ирвин обобщает информацию об операционных системах Windows/MS-DOS и раскрывает тонкости языка ассемблера для процессоров Intel. Основное внимание уделено решению проблем, возникающих при программировании, с помощью использования кодирования на машинном уровне. На прилагаемом компакт-диске находятся полные профессиональные версии ассемблеров Microsoft MASM 6.11 и 6.13, текстовый редактор для ввода программ, библиотеку макроопределений и исходные коды примеров из книги.

616 стр., с ил.; ISBN 5-8459-0332-7, 0-1366-0390-4; формат 70x100/16; твердый переплетгазетнаяCD-ROM; 2002, 3 кв.; Вильямс.



Понравилась книга? Порекомендуйте её друзьям и коллегам:







Книги, рекомендуемые вместе с этой книгой:



Оглавление книги "Язык ассемблера для процессоров Intel"

Предисловие 11
От издательства 18
Глава 1. Введение 19
Глава 2. Аппаратные и программные средства 39
Глава 3. Фундаментальные понятия языка ассемблера 69
Глава 4. Использование ассемблера 99
Глава 5. Процедуры и прерывания 135
Глава 6. Условные вычисления 177
Глава 7. Целочисленная арифметика 215
Глава 8. Структуры и макроопределения 249
Глава 9. Числовые преобразования и библиотеки 287
Глава 10. Строки и массивы 323
Глава 11. Дисковые системы хранения информации 355
Глава 12. Работа с файлами 395
Глава 13. Интерфейс с языками высокого уровня 423
Глава 14. Дополнительные темы, часть 1 449
Глава 15. Дополнительные темы, часть 2 473
Предметный указатель 611


Предисловие

Язык ассемблера для процессоров Intel - это уже третье издание книги, ранее называвшейся "Язык ассемблера для IBM PC". Материал книги рассчитан на университетский курс по программированию на языке ассемблера и предполагает использование процессоров Intel семейства 80х86. Все приведенные программы тестировались с помощью компиляторов Microsoft Macro Assembler (MASM) версии 6.13 и Borland TASM 4.0. К этой книге прилагается компакт-диск с копией последней версии компилятора MASM.

Информация на Web-сервере. Все корректировки и дополнения этой книги, включая программные проекты к каждой главе для преподавателей, можно найти на специальных сайтах:

http://www.pobox.com/~irvinek/books/asm

http://www.nuvisionmiami.com/books/asm

Если по каким-либо причинам невозможно будет соединиться с этими сайтами, то информацию об этой книге и ссылки на действующий сайт можно найти на www.prenhall.com, используя поиск по названию книги или по полному имени автора - Kip Irvine. С автором также можно связаться по адресу: [email protected].

Компакт-диск, входящий в комплект этой книги, содержит полную профессиональную версию компилятора Microsoft Macro Assembler 6.13 и листинги всех примеров, приведенных в книге.

Книга предназначена в основном для студентов, изучающих язык ассемблера, она содержит:

  • набор команд процессоров семейства Intel 80x86 и их архитектуру;
  • команды языка ассемблера, макроопределения, операторы и структуру программы;
  • методологию программирования, вопросы использования языка ассемблера для разработки программ системного уровня, а также прикладных программ;
  • примеры управления устройствами компьютера;
  • Анализ взаимодействие между программами на языке ассемблера, операционной системой и другими прикладными программами.

Изучение языка ассемблера только для процессоров Intel помогает, тем не менее, приобрести универсальные знания. Многие из тех, кто изучал язык ассемблера еще до появления первых IBM PC на других компьютерах, использовали свои знания для адаптации к современным условиям. Поэтому студенты, изучающие язык ассемблера для процессоров Intel, могут использовать свои знания при работе с любым компьютером.

Книга начинается с рассмотрения простых понятий о числах и данных. Далее излагаются основы архитектуры процессоров. Изучая небольшие программы и используя интерактивный отладчик, можно легко освоить основные команды системного уровня. Вводный курс по языку ассемблера представлен в главе 3. Более подробное описание языка ассемблера дано в главе 4. Далее речь пойдет об основных командах. Представлены небольшие, но полезные прикладные программы, а также создана библиотека процедур. В конце книги приведены программы и описание технических приемом позволяющих использовать специальные методы программирования и функции операционной системы.

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

Одной из целей книги является помощь студентам в решении проблем программирования на уровне машинных команд. Очень важно иметь представление о процессоре как диалоговом устройстве, чтобы правильно оценивать все его действия. Программа отладки (debugger) является лучшим помощником программиста не только потому, что выявляет ошибки в программе, но и потому, что помогает вообще лучше понять работу процессора и операционной системы. Следует поощрять студентов в их желании понять роль языков высокого уровня и акцентировать внимание на том, что хотя языки высокого уровня очень удобны и позволяют писать компактный код, они не могут непосредственно управлять системными устройствами.

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

Дополнительные требования. Читатели должны быть знакомы, по крайней мере, с одним из языков высокого уровня (предпочтительно с такими из них, как Pascal, Java, C или C++). В главе 13 рассматриваются непростые вопросы использования языка С++, и поэтому желателен практический опыт работы с этим языком. Также может быть вполне целесообразным использование этой книги при изучении базовых курсов по компьютерам, управлению информационными системами и при изучении других инженерных курсов. В тех случаях, когда необходимо продемонстрировать соответствующие примеры, используются Microsoft Visual C++ 5.0 и Borland C++ 5.0.

Достоинства книги

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

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

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

32-разрядные вычисления. По мере изучения книги читатель сможет постепенно перейти к 32-разрядным регистрам и расширенной системе команд. Можно создавать программы для процессоров 8086/8088, но использование кодов для процессоров 80386 и более поздних модификаций дает несомненные преимущества.

Принципы структурного программирования. Хочется обратить особое внимание на главу 5, где описываются процедуры и декомпозиция модулей. Важно, чтобы студенты осознали общие проблемы программирования, которые требуют тщательного структурирования создаваемого кода в объеме всей программы.

Хранение данных и файлы. Главы 11 и 12 демонстрируют много технических приемов, которые невозможно реализовать с помощью языков высокого уровня. Студенты научатся непосредственно управлять устройствами и сохранением данных на диске без участия операционной системы. Изучение альтернативных путей управления, как правило, вызывает повышенный интерес.

Создание библиотеки загрузочных модулей. Студенты смогут свободно добавлять свои процедуры к приведенной в книге библиотеке загрузочных модулей и создавать собственные библиотеки. Они научатся пользоваться справочными материалами и писать коды, которые могут применяться во многих программах.

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

Совместное использование с языками высокого уровня. Отдельная глава посвящена совместному использованию ассемблера и языков высокого уровня С и С++. Читатели научатся оптимизировать написанные коды и ознакомятся с реальными примерами работы компилятора С++.

Дополнительные возможности. Все листинги программ находятся на прилагаемом диске или на Web-сайте. Преподаватели получают полное справочное руководство, стратегию обучения и решение всех приведенных примеров.

Изменения в третьем издании

Необходимость в третьем издании возникла в связи с благоприятными отзывами о предыдущих изданиях, что говорит о растущей популярности книги. Первое издание вышло в 1990 году и было переработано в 1993 году. Разумеется, компьютеры претерпели значительные изменения за последние годы. Когда-то процессор 386 был самым совершенным устройством, а жесткие диски объемом 32 Мбайт считались вполне приемлемыми для работы. Используя на протяжении многих лет в своей преподавательской деятельности данную книгу, автор, конечно же, вносил в нее необходимые изменения. Этот справочник должен облегчить работу преподавателя, позволяя сосредоточиться на основных идеях. Ниже приведен краткий обзор всех глав.

В главе 1 очень подробно рассматривается вопрос выбора языка программирования высокого или низкого уровня для определенных приложений.

В главе 2 сделан обзор семейства процессоров Intel 80х86 вплоть до Pentium II, а также сравниваются их основные возможности. Кроме того, объясняется архитектура 32-разрядных процессоров, представлены современные системные платы, шинная архитектура и типы памяти.

В главе 3 объясняется, как использовать ассемблер, загрузчик и отладчик. Все приведенные программы можно использовать в дальнейшей работе.

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

В главе 5 рассматриваются вопросы передачи параметров, о чем также идет речь в главе 7, но с более детальным изучением параметров стека. Дополнения ассемблера в компиляторах Microsoft и Borland приведены в отдельных разделах. Улучшены разделы, посвященные прерываниям INT 21h, INT 16h и INT 10h.

Глава 6 посвящена условным вычислениям, в ней объясняются манипуляции с битами и команды сравнения, которые разрешены в процессорах 386 и 486. Также показано, как реализовать конечный автомат с помощью языка ассемблера. Предлагаются простые приложения по обработке текстов.

Глава 7 посвящена целочисленным вычислениям. Приводятся отдельные 32-разрядные команды и показывается, как выполнять 32-разрядные арифметические операции. Отдельный раздел посвящен прямой передаче символов и атрибутов на видеоустройство.

В главе 8 описываются макроопределения и структуры. Студенты научатся создавать полезные библиотеки макроопределений. Здесь приводится несколько дополнительных макрооператоров с примерами, которые генерируют псевдокод и создают структуры данных.

В главе 9 дано объяснение таких понятий, как строка и массив, рассматриваются 32-разрядные версии команд пересылки строк (SCASD и MOVSD), приводятся соответствующие упражнения.

Главы 11 и 12 посвящены вопросам работы с файлами и записи на диск. Эти главы значительно переработаны, поскольку в современных жестких дисках изменены форматы записи. Глава 12 включает программу, позволяющую загружать и отображать графические изображения формата Windows.

В главе 13 рассматриваются языки высокого уровня, в основном С и С++, а также Pascal; подробно рассматриваются вопросы использования встроенного ассемблерного кода; приводятся примеры написания подпрограмм для 32-разрядного защищенного режима.

Основные темы

В главах 1-8 описаны основные понятия языка ассемблера, предназначенные для последовательного изучения. Значительные усилия были приложены для достижения равномерного распределения материала по сложности.

1. Введение. Использование языка ассемблера, базовые понятия, машинный язык, представление данных, использование отладчика.

2. Аппаратные и программные средства. Основы аппаратного обеспечения и терминология, понятие об архитектуре процессоров 80x86, 16- и 32-разрядные регистры, архитектура памяти, жесткие диски, видеоадаптеры и системное программное обеспечение.

3. Фундаментальные понятия языка ассемблер. Трансляция, загрузка и отладка, определение констант и переменных, команды передачи данных и арифметические команды, обзор операндов.

4. Использование ассемблера. Загрузчик и файлы перекрестных ссылок, операторы, директивы, выражения, JMP, LOOP, косвенная адресация, вызов процедур из загрузочной библиотеки.

5. Процедуры и прерывания. Стек, объявление процедур, прерывания DOS и BIOS для консоли, видеорежимов и клавиатурного ввода. Типы параметров процедур. Рекурсия.

6. Условные вычисления. Команды сравнения и логические операции, переход по условию и циклы, логические структуры высокого уровня и конечные автоматы.

7. Целочисленная арифметика. Команды сдвига и циклического сдвига, простые приложения, сложение и вычитание, MUL и DIV, прямой видеовыход, десятичная арифметика. Главы 9-15 можно изучать в любом порядке. Раздел по отдельно компилируемым модулям в главе 9 должен быть изучен, если студенты собираются добавлять свои собственные процедуры в загрузочную библиотеку. Команды работы со строками в главе 10 (SCAS, MOVS, LODS, STOS) являются частью системы команд процессора, поэтому рекомендуется просмотреть соответствующий раздел.

8. Структуры и макроопределения. Глава по макроопределениям (перемещена с главы 10 в предыдущем издании) предназначена для студентов, которые хотят использовать макроопределения и структуры для получения законченных программ при изучении второй половины книги.

9. Числовые преобразования и библиотеки. Методы передачи символов, отдельно компилируемые модули, создание загрузочных библиотек, преобразование двоичных чисел в символы ASCII и обратное преобразование.

10. Строки и массивы. Методы хранения строк, команды работы со строками, построение библиотеки строковых процедур.

11. Дисковые системы хранения информации. Основы записи на диск, сектора, кластеры, каталоги, декодирование таблицы размещения файлов, обработка кодов ошибок DOS, драйвера и управление каталогами.

12. Работа с файлами. Управление файлами, стандартное обслуживание файлов в DOS, файлы с произвольной выборкой, создание и чтение текстовых файлов.

13. Интерфейс с языками высокого уровня. Параметры передачи, встроенный ассемблерный код, совмещение модулей на языке ассемблера с программами на С/С++.

14. Дополнительные темы, часть 1. Косвенные переходы и вызовы, таблицы удаленных указателей, аппаратные порты ввода/вывода, определение явных сегментов, программы реального времени, динамическое распределение памяти.

15. Дополнительные темы, часть 2. Кодирование машинных команд, подпрограммы обработки прерываний, завершение и резидентные процедуры, вещественные числа и сопроцессор для обработки чисел с плавающей запятой.

Справочные материалы

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

Справочные материалы по языку ассемблера. Интерактивный перечень тем по языку ассемблера находится на компакт-диске. Здесь рассматриваются вопросы по преобразованию чисел, способах адресации, использованию регистров, отладке программ, двоичным числам с плавающей запятой. Темы оформлены в виде документов HTML, что облегчает работу с ними и позволяет добавлять собственные материалы.

Учебник по двоичным и шестнадцатеричным числам. Приложение А включает подробную информацию, в которой объясняется способы преобразования между двоичными, десятичными и шестнадцатеричными числами; также объясняется двоичная и шестнадцатеричная арифметика.

Отладчик. Приложение Б содержит удобный в использовании учебник и справочные материалы по отладчику. Простые утилиты работают с MS-DOS и Windows.

Справочник по CodeView и Turbo Debugger. Приложения В и Г включают доступную информацию по использованию Microsoft CodeView and Borland Turbo Debugger.

Библиотека загрузочных модулей. Приложение Д содержит список всех программ и файлов на компакт-диске, поставляемом с книгой. Представленная библиотека загрузочных модулей значительно облегчает программирование ввода/вывода и включает следующие подпрограммы: генерация случайных чисел, функции даты и времени, работа с диском и управление файлами, операции со строками.

Библиотека макроопределений. Библиотека находится на прилагаемом компакт-диске и может использоваться как руководство для студентов, которые будут создавать собственные макроопределения. Имена макроопределений перечислены в приложении Д.

Список зарезервированных слов. Перечень всех используемых слов для компиляторов Microsoft и Borland.

Функции DOS и BIOS. Приложение Ж включает перечень большинства прерываний BIOS и DOS. Особое внимание уделяется прерываниям INT 10h и INT 21h.

Система команд. Приложение Е включает перечень всех "непривилегированных" команд для семейства процессоров 80x86. Дано подробное описание выполнения каждой команды, показан ее синтаксис и используемые флаги.

Презентации. Несколько превосходных презентаций созданы в программе PowerPoint профессором Марио Маршанд (Университет Оттавы, Канада)

Ответы на вопросы. Ответы на все вопросы с четными номерами находятся на компакт-диске. Ответы на вопросы с нечетными номерами могут получить только преподаватели.

Благодарности

Выражаю огромную благодарность Лауре Стил (Laura Steel), старшему редактору отдела компьютерных наук в издательстве Prentice Hall, которая оказывала дружескую поддержку во время написания этой книги.

Также благодарю Джона Гриффина (JohGriffin), редактора издания, и Рона Харрисона (Ron Harris), ответственного за производство в издательстве Macmillan Publishing.

Особая признательность профессорам: Джеральду Кахиллу (Gerald Cahill) из колледжа Antelope Valley, который предложил свои многочисленные улучшения, Тиму Доунью (Tim Downey) из Florida International University, который превосходно объяснил принцип компьютерной архитектуры, Джеймсу Бринку (James Brink) из университета Pacific Lutheran, который создал 32-разрядную библиотеку загрузочных модулей для одноуровневых программ.

Компания Microsoft предоставила программу Macro Assembler для распространения вместе с этой книгой по разумной цене.

Производственный коллектив по выпуску третьего издания.

Благодарю следующих сотрудников: Донну Салливан (Donna Sullivan), руководителя проекта в издательстве Prentice Hall, Роя Робинсона (Ray Robinson), директора проекта, и Келли Добс (Kelly Dobbs), руководителя проекта из D & G Limited, LLC, которые великолепно подготовили книгу для печати; Михаэля Бруммита (Michael Brumitt) из D & G Limited, LLC, нашедшего много ошибок при подготовке издания; Давида Ирвина (David Irvine), сделавшего огромную работу по созданию всех иллюстраций и таблиц; Билла Девера (Bill Dever), Александро Ферро (Alejandro Ferro) и Раймонда Лима (Raymond Lim), приложивших немало усилий при окончательном вычитывании книги.

Рецензенты третьего издания:

  • Катя Бличарз (Kathy Blicharz) из колледжа Pima Community;
  • Патрисия Нетнин (Ratricia Nettnin) из колледжа Finger Lakes Community.

    Рецензенты первого и второго изданий:

  • Михаэль Уолтон (Michael J. Walton), Барри Брош (Barry Brosch), Брюс ДеСайтел (Bruce DeSautel) и Ричард Уайт (Richard White) из колледжа Miami-Dade Community;
  • Ричард Биб (Richard A. Beebe) из колледжа Симпсона (Simpson College);
  • Джон Эрхард (John V. Erhart), Северо-восточный Университет штата Миссури (Northeast Missouri State University);
  • Гоншин Лау (Gonshin Liu), университет г. Бриджпорт (University of Bridgeport);
  • С.К. Сачдев (S. K. Sachdev), Восточный университет штата Мичиган (Eastern Michigan University);
  • Дуглас Найт (Douglas W. Knight), Университет Южного Колорадо (University of Southern Colorado);
  • Дон Ретзлаф (Don Retzlaff), Университет Северного Техаса (University of North Texas);
  • Роберт Галиван (Robert Galivan), консультант по программному обеспечению, который написал справочное руководство;
  • Джордж Каменз (George Kamenz), великолепный программист, прочитавший материалы для третьего издания и предложивший множество улучшений;
  • Диего Эскала (Diego Escala) написал большую программу для просмотра изображений в формате BMP, представленную в главе 12.
  • Также я должен поблагодарить сотни студентов из Miami-Dade Community College, обучавшихся в 1990-1999 годах и проявивших настойчивость при изучении языка ассемблера по предыдущим изданиям этой книги.

    От издательства

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

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

    Посылая письмо или сообщение, не забудьте указать название книги и ее авторов, а также ваш e-mail. Мы внимательно ознакомимся с вашим мнением и обязательно учтем его при отборе и подготовке к изданию последующих книг. Наши координаты:

    E-mail:[email protected]

    WWW:http://www.williamspublishing.com


  • Copyright © 1992-2019 Издательская группа "Диалектика-Вильямс"

    Rambler  Top100