МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
Федеральное государственное бюджетное
образовательное учреждение
высшего профессионального образования
«ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
ПРОГРАММИРОВАНИЕ НА АССЕМБЛЕРЕ
ДЛЯ ПРОЦЕССОРОВ
ПЕРСОНАЛЬНОГО КОМПЬЮТЕРА
Учебное пособие
ПЕНЗА 2013
Стр.1
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
Федеральное государственное бюджетное
образовательное учреждение
высшего профессионального образования
«Пензенский государственный университет» (ПГУ)
Программирование на ассемблере
для процессоров
персонального компьютера
Учебное пособие
Пенза
Издательство ПГУ
2013
Стр.4
УДК 004.431
П78
Р е ц е н з е н т ы:
кандидат технических наук, заведующий кафедрой
«Управление информационными ресурсами»
Пензенского регионального центра высшей школы
(филиал Российского государственного университета
инновационных технологий и предпринимательства)
М. В. Чернецов;
кандидат технических наук, начальник научно-технического центра
испытаний и метрологического обеспечения
ОАО «Научно-исследовательский институт
электронно-механических приборов»
Г. А. Солодимова
А в т о р ы:
М. К. Маркелов, Л. С. Гурьянова, А. С. Ишков,
А. С. Колдов, С. В. Волков
Программирование на ассемблере для процессоров
П78
персонального компьютера : учеб. пособие / М. К. Маркелов
[и др.]. – Пенза : Изд-во ПГУ, 2013. – 100 с.
ISBN 978-5-94170-537-5
Показаны возможности программирования на языке ассемблер
для персональных компьютеров на базе микропроцессоров фирмы
Intel. Данное пособие позволит студентам приобрести практические
знания и навыки применения ассемблера в профессиональной деятельности.
Учебное
пособие подготовлено на кафедре «Радиотехника и радиоэлектронные
системы» и предназначено для студентов специальностей
210302 «Радиотехника» и 210601 «Радиоэлектронные системы
и комплексы».
УДК 004.431
ISBN 978-5-94170-537-5
2
© Пензенский государственный
университет, 2013
Стр.5
Предисловие
Цифровые устройства (ЦУ), такие как микропроцессоры и микроконтроллеры,
нашли широкое применение в радиоэлектронных устройствах
и радиотехнических системах. Современный радиоинженер должен
не только владеть теорией и практикой проектирования элементов
ЦУ, но и владеть практическими навыками программирования таких
ЦУ на аппаратном уровне. Несомненно, большое значение имеет для
этого освоение такого языка программирования, как ассемблер.
Как известно, программы, написанные на языке ассемблер, отличаются
высокой эффективностью, т.е. минимальным объемом и
максимальным быстродействием. Это обусловило широкое использование
ассемблера в тех случаях, когда скорость работы программы
или расходуемая ею память имеют решающее значение. На языке ассемблер,
как правило, пишутся программы-драйверы, обслуживающие
работу подключаемых к компьютеру внешних устройств или
устройств сопряжения (УС), а также программы для микропроцессорных
устройств и контроллеров, встроенных в различные системы
управления или системы сбора и обработки данных.
При разработке программ часто используется прием объединения
в одну выполнимую программу фрагментов, написанных на разных
языках. Например, основная часть программы написана на языке
высокого уровня, а наиболее критические участки – на языке ассемблер.
Возможна и обратная ситуация, когда в программу на языке ассемблер
вставляют фрагменты для выполнения сложных математических
или логических преобразований, написанные на языке высокого
уровня. При этом упрощаются программирование и отладка, ускоряется
процесс разработки программы.
Язык ассемблер отражает архитектурные особенности и режимы
работы используемого микропроцессора (микроконтроллера), что
предоставляет уникальную возможность изучения машины на «низком
уровне», освоения аппаратного обеспечения компьютера и работы
операционной системы.
Настоящее учебное пособие включает разделы, посвященные
системам счисления, архитектуре микропроцессора, средствам разработки
программ и основам языка ассемблер.
Освоение простейших задач программирования на языке ассемблер
позволит студентам закрепить знания и сформировать навыки
проектирования микропроцессорных устройств с учетом архитектурных
особенностей.
3
Стр.6
Именно так обстояло дело и в России. Поскольку в кодировке
IBM отсутствуют символы кириллицы (русские буквы), в нашей стране
были созданы различные модификации таблицы кодов IBM, содержащие
символы кириллицы. Некоторое время применялось несколько
разных таблиц кодировок, что создавало значительные неудобства.
Однако очень скоро подавляющим большинством пользователей
стала применяться кодировка, показанная в табл. 18 [8], – так
называемая «модифицированная альтернативная кодировка ГОСТа».
В этой кодировке русские буквы расположены на тех позициях, где в
кодировке IBM находятся относительно редко используемые символы
национальных алфавитов и греческие буквы. А остальные символы
(псевдографические символы и некоторые математические символы)
имеют те же коды, что в кодировке символов IBM. Это обеспечивало
возможность использования зарубежных DOS-программ без изменений.
Недостаток такого знакогенератора заключается в том, что символы
кириллицы не образуют непрерывный массив.
Таблица 18
Модифицированная альтернативная кодировка ГОСТа
Стандартный отечественный знакогенератор строится по рекомендациям
Международного консультационного комитета по телеграфии
и телефонии (МККТТ). Кодировка, названная «основной ко95
Стр.98
дировкой ГОСТа», не прижилась: в ней символы кириллицы перекрывали
диапазон псевдографических символов в кодировке IBM, что
сильно мешало использовать зарубежные программы.
В Windows употребляются совершенно иные кодировки символов.
В графической среде Windows кодовые таблицы, разработанные
для IBM PC, являются во многом морально устаревшими. Действительно,
в Windows, как правило, не требуются так называемые «псевдографические
символы» вроде ╧ или ╬, использовавшиеся в текстовом
режиме DOS – программ для рисования линий и диаграмм: в
Windows можно нарисовать любые линии или диаграммы непосредственно.
С другой стороны, в кодовой таблице IBM PC не хватало
многих символов европейских языков. Поэтому фирма Microsoft разработала
для Windows новую кодовую таблицу. Эта кодировка называется
Windows-1252 (иногда называемая ANSI-кодировкой), она используется
для всех текстовых шрифтов в английской версии Windows.
Для русскоязычных пользователей стандартная ANSI-кодировка
непригодна, так как она не содержит русских букв (символов кириллицы).
Поэтому в русской версии Windows, а также при использовании
различных русификаторов Windows употребляется модифицированная,
«русская» версия ANSI-таблицы (табл. 19) – Windows-1251
[8]. Эта кодировка используется в Windows для всех текстовых шрифтов,
содержащих русские буквы.
Некоторые варианты кодировок знакогенераторов ПК представлены
ниже:
1. ASCII ([а´ски] или [э´ски], American Standard Code for Information
Interchange – американский стандартный код для обмена
информацией):
a) ASCII – 7-битовая кодировка;
US-ASCII (International Reference Version) – вариант ASCII без
национальных символов;
ISO 646 (ECMA-6) – вариант ASCII с возможностью размещения
национальных символов;
КОИ-7 – 7-битовая кодировка для русского языка, основанная
на ASCII. (ГОСТ 19768-74 (сейчас недействителен));
б) ASCII – 8-битовая кодировка (обычно используемая в компьютерах);
КОИ-8 («код обмена информацией») – 8-битовая ASCII-совместимая
кодовая страница (ГОСТ 19768–74 (сейчас недействителен),
96
Стр.99
более новая версия ГОСТ 19768–87). Эта кодировка применялась еще
в 70-е гг. ХХ в. на компьютерах серии ЕС ЭВМ, а с середины 80-х гг.
стала использоваться в первых русифицированных версиях операционной
системы UNIX. Фактическим стандартом для России стала кодировка
с русской кириллицей KOI-8R (RFC1489).
Таблица 19
Кодировка символов в русской версии Windows
2. CP437 (Codepage 437, DOSLatinUS) – кодовая страница, использовавшаяся
в первоначальной версии IBM PC с 1981 г. «CP» означает
«Code Page» – «кодовая страница».
3. CP866 – альтернативная кириллическая кодировка, основанная
на CP437 кодовой странице. Была добавлена в MS-DOS версии 6.22.
4. EBCDIC (Extended Binary Coded Decimal Interchange Code –
расширенный двоично-десятичный код обмена информацией, произносится
«эб-си-дик») – стандартный 8-битовый код, разработанный
IBM для использования на мощных компьютерах и суперкомпьютерах
собственного производства.
5. Windows-1251 или CP1251. Наиболее распространенная в настоящее
время кириллическая кодировка от Microsoft. Также может
называться ANSI-кодировкой.
97
Стр.100
6. Windows-1252 – кодовая страница от Microsoft, предназначенная
для западноевропейских языков. Кодировка также известна
как ISO/IEC 8859-1 и Latin-1, однако некоторые символы в Windows1252
и ISO 8859-1 не совпадают. Также может называться ANSIкодировкой.
7.
ISO 8859-5 (Latin/Cyrillic) кодировка, утвержденная в качестве
стандарта для русского языка Международной организацией по
стандартизации (ISO, International Standards Organization).
8. Unicode (Юникод) – стандарт кодирования символов, позволяющий
представить знаки практически всех письменных языков и
специальных символов. Поддерживается некоммерческой организацией
«Консорциум Юникода» (Unicode Consortium, Unicode Inc.).
Стандарт состоит из двух основных разделов: универсальный набор
символов (UCS, Universal character set) и семейство кодировок (UTF,
Unicode transformation format). Универсальный набор символов задает
однозначное соответствие символов кодам – элементам кодового пространства,
представляющим неотрицательные целые числа. Семейство
кодировок определяет машинное представление последовательности
кодов UCS:
a) Unicode 1.1, стандарт 1991–1995 гг.;
б) Unicode 5.2, стандарт 2009 г.;
в) Unicode 6.1, стандарт 2012 г.
В большинстве случаев пользователь не должен заботиться о
перекодировках текстовых документов, так как это делают специальные
программы – конверторы, встроенные в приложения.
98
Стр.101
СОДЕРЖАНИЕ
Предисловие .................................................................................................. 3
1. Системы счисления и работа с ними ...................................................... 4
1.1. Понятие системы счисления ...................................................... 4
1.2. Десятичная система счисления .................................................. 5
1.3. Двоичная система счисления ..................................................... 6
1.4. Шестнадцатеричная система счисления ................................... 8
1.5. Кодирование целых чисел .......................................................... 8
1.6. Кодирование действительных чисел .........................................11
1.7. Перевод чисел из одной системы счисления в другую ...........13
1.8. Арифметические операции в двоичной системе .....................16
2. Архитектура микропроцессора i8086 .....................................................22
3. Средства разработки программ на ассемблере .....................................24
4. Работа с ассемблером ...............................................................................28
4.1. Состав и структура ассемблерной программы ........................28
4.2. Псевдокоманды определения данных .......................................37
4.3. Арифметические команды процессора .....................................38
4.4. Логические команды ...................................................................42
4.5. Команды переходов ....................................................................45
4.6. Использование прерываний BIOS и DOS
для управления ПК .......................................................................................46
4.7. Работа с клавиатурой и дисплеем ПК .......................................47
4.8. Организация задержек с помощью таймера .............................57
4.9. Принципы обмена данными с внешними устройствами ........59
4.10. Использование ассемблерных вставок в программах
на языках высокого уровня .........................................................................68
Cписок литературы.......................................................................................71
Приложение А. Варианты заданий к практическим занятиям ...............73
Приложение Б. Система команд процессоров i8086/88,
i89286 и i80386 ..............................................................................................77
Приложение В. Варианты кодировки знакогенераторов ПК ..................93
99
Стр.102
Учебное издание
Маркелов Максим Константинович, Гурьянова Людмила Станиславовна,
Ишков Антон Сергеевич, Колдов Александр Сергеевич,
Волков Сергей Владимирович
Программирование на ассемблере
для процессоров
персонального компьютера
Редактор О. Ю. Ещина
Корректор Н. А. Сидельникова
Компьютерная верстка Р. Б. Бердниковой
Подписано в печать 13.02.13. Формат 60×841/16.
Усл. печ. л. 5,81. Тираж 51.
Заказ № 73.
Издательство ПГУ.
440026, Пенза, Красная, 40.
Тел./факс: (8412) 56-47-33; е-mail: iic@pnzgu.ru
100
Стр.103