Введение. . . . . . . . . . . . . . . . . . ....3
Глава 1. Понятие вычислительной системы (ВС) 5
1.1. Терминология . . . . . . . . . . . . . ....5
1.2. Структурная декомпозиция вычислительной системы 6
1.2.1. Единицы измерения . . . . ....10
1.2.2. Порядок следования байтов . . ....11
1.2.3. Цикл выполнения команды . . ....14
1.2.4. Расположение программ и данных 17
1.2.5. Память. . . . . . . . . . ....19
1.2.6. Регистры. . . . . . . . . . ....21
1.3. Иерархическая декомпозиция ВС . ....22
1.3.1. Цифровой логический уровень....22
1.3.2. Микроархитектурный уровень....23
1.3.3. Уровень архитектуры команд ....24
1.3.4. Уровень операционной системы 25
1.3.5. Уровень ассемблера. ....26
1.3.6. Языки высокого уровня . . . ....27
1.4. История . . . . . . . . . . . . . ....29
1.4.l. Развитие вычислительной техники 29
1.4.2. Операционные системы 38
Контрольные вопросы . . . . . . . . . ....40
Глава 2. Представление данных . . . . . ....41
2.1. Качественные и количественные данные....41
2.2. История чисел. . . . . . . . . . . . ....43
2.3. Позиционные системы счисления . . . ....46
2.3.1. Перевод натуральных чисел между позиционными системами счисления 47
2.3.2. Экономичность системы счисления . . . . . ....49
2.3.3. Нецифровые символы в представлении чисел . ....50
2.3.4. Позиционное представление вещественных чисел 51
2.4. Двоичное представление беззнаковых целых чисел . ....58
2.4.1. Восьмеричное и шестнадцатеричное представление 59
2.4.2. Беззнаковая арифметика в вычислительных системах 62
2.5. Представление отрицательных чисел
2.5.1. Величина со знаком .
2.5.2. Код с избытком. . . . . . . .
2.5.3. Дополнительный код . . . . .
2.5.4. Знаковая арифметика в вычислительных системах
2.6. Альтернативная арифметика . . . . .
2.6.1. Двоично-десятичная арифметика.
2.6.2. Модулярная арифметика .
2.6.3. Арифметика с насыщением
2.7. Битовые операции . . . . . .
2.7.1. Поразрядные операции .
2.7.2. Расширение целых чисел.
2.7.3. Битовые сдвиги. . . . .
2.8. Представление вещественных чисел ....89
2.8.1. Представление вещественных чисел с фиксированной запятой 89
2.8.2. Представление вещественных чисел с плавающей запятой 92
Контрольные вопросы . . . . . . . . . ....101
Глава 3. Архитектура команд семейства х86 102
3.1. Развитие линейки х86 и режимы работы 102
3.1.1. История семейства х86 . ....103
3.1.2. Режимы работы процессора 106
3.2. Сегменты памяти . . . . . . ....108
3.2.1. Код и статические данные....110
3.2.2. Куча ....111
3.2.3. Стек. . . . . . . . . . ....112
3.3. Регистры . . . . . . . . . . ....115
3.3.1. Регистры общего назначения, доступные в тридцатидвухбитном режиме 116
3.3.2. Регистры общего назначения, доступные в шестидесятичетырёхбитном режиме 117
3.3.3. Специальные регистры и регистры расширений 119
3.4. Математический сопроцессор (FPU х87)....120
3.4.1. Регистры FPU. ....120
3.4.2. Исключения FPU . . . . . ....123
3.5.Флши. . . . . . . . . . . . . ....126
3.5.1. Флаги основного процессора....126
3.5.2. Флаги FPU . . . . . . . . ....129
3.6. Структура команды и методы адресации 131
3.6. 1. Методы адресации . . . . . . . ....131
3.6.2. Структура команды. . . . . . . ....132
3.6.3. Общие для тридцатидвухбитного и шестидесятичетырёхбитного режимов сведения об адресации 133
3.6.4. Адресация в тридцатидвухбитном режиме . . . . . . . . ....136
3.6.5. Расширение регистров в шестидесятичетырёхбитном режиме 137
3.6.6. Операнды и адресация в шестидесятичетырёхбитном режиме 139
3.6.7. Адресация относительно указателя команды 140
Контрольные вопросы . . . . . ....141
Глава 4. Связь уровней абстракции....142
4.1. Компиляция. . . . . . . . ....142
4.1.1. Инструменты разработки 143
4.1.2. Этапы компиляции 146
4.1.3. Особенности GCC....148
4.2. Препроцессор . . . . ....152
4.2. 1. Включение файла ....153
4.2.2. Условная компиляция....154
4.2.3. Макросы . . . . . . ....155
4.3. Ассемблерные вставки в код С++ ....159
4.3. 1. Синтаксис ассемблерных вставок в GCC 159
4.3.2. Расширенная форма. . . . . . . . . ....161
4.3.3. Практическое использование параметров....167
4.3.4. Ограничения на расположение операнда 170
4.3.5. Модификаторы параметров . . . . . . ....171
Контрольные вопросы . . . . . . . . . . . . . ....172
Глава 5. Синтаксис н команды GNU AssemЫer х86 ....173
5.1. Особенности GNU AssemЫer ....173
5.1.1. Общие правила . . ....174
5.1.2. Основные директивы 175
5.1.3. Порядок операндов ....178
5.1.4. Адресация операндов 179
5.1.5. Размер операндов команды 182
5.1.6. Мнемоники. ....184
5.1.7. Префиксы . . ....185
5.2. Основные команды. ....185
5.2. 1. Общие команды....186
5.2.2. Передача управления, вызов и возврат 190
5.2.3. Обнуление регистра. . . . . . . . ....194
5.2.4. Команды целочисленной арифметики 194
5.2.5. Битовые операции
5.2.6. Флаги . . . . . .
5.2.7. Условные команды
5.3. Команды FPU . . . . .
5.3.1. Внутреннее представление чисел.
5.3.2. Возможные форматы экспорта-импорта
5.3.3. Общие команды
5.3.4. Загрузка, выгрузка и пересылка данных....214
5.3.5. Основные арифметические команды . ....221
5.3.6. Дополнительные арифметические и трансцендентные команды....226
5.3.7. Сравнение вещественных чисел . . . ....228
Контрольные вопросы . . . . . . . . . . . . ....232
Глава 6. Программирование на языке Ассемблера 233
6. 1. Структура программы на ассемблере . . . ....233
6.1.l. Программирование с использованием libc....234
6.1.2. Программирование без libc . ....237
6.2. Подпрограммы и функции . . . . . ....239
6.2.1. Требования к вызовам функций ....240
6.2.2. Механизм вызова подпрограммы....241
6.2.3. Соглашения о вызовах . . . . . ....245
6.2.4. Описание функций на ассемблере 249
6.2.5. Импорт функций из модулей на ассемблере в код на С++ 252
6.2.6. Импорт функций из модулей на С++ в код на ассемблере 254
6.2.7. Искажение имён при компиляции . . ....255
6.2.8. Системные вызовы . . . . . . . . . ....259
6.3. Программирование нелинейных алгоритмов ....261
6.3.1. Условие с операторами в одной ветви 261
6.3.2. Условие с операторами в двух ветвях 263
6.3.3. Цикл. . . . . . . . . . . . . . ....267
6.4. Взаимодействие со структурами данных....270
6.4.1. Массивы . . . . . . ....270
6.4.2. Структуры и объекты . . . . . . ....277
Контрольные вопросы . . . . . . . . . . ....282
Глава 7. Программирование на языке в ысокого уровня: С++ 283
7.1. Структура программы 284
7.2. Типы данных . . . . . ....285
7.2.1. Целые типы . . . . ....285
7.2.2. Вещественные типы ....288
7.2.3. Специальные типы 289
7.2.4. Указатели . . . . ....290
7.3. Приведение типов
7.4. Литералы С++ . .
7.4.1. Целые ...
7.4.2. Вещественные
7.4.3. Строки. . . .
7.5. Средства автоматизации С++ .
7.5.1. Шаблоны С++ ..... .
7.5.2. Макросы препроцессора С/С++
7.6. Ввод-вывод . . . . . . . . . .
7.6.1. Ввод-вывод в поток . . . .
7.6.2. Ввод-вывод с помощью libc
7.7. Отладочная печать ...... .
7.7.1. Средства исследования переменных
7.7.2. Автоматизация отладочной печати .
Контрольные вопросы
Заключение . . . . . . . . . . . . . . . . .
Приложение А. Лабораторный практикум GNU AsseшЫer
Требования к выполнению лабораторных работ
Л 1. Представление данных в ЭВМ . .
Л2. Отладка кода . . . . . . . . . . . . . .
Л3. Модули и функции на ассемблере .....
Л4. Использование ассемблерных вставок в программах на С++.
Л5. Программирование FPU . . . . . . . . . . . . . . . . .
Л6. Программирование ветвящихся и циклических алгоритмов .
Л7. Использование массивов
Приложение Б. Коды ASCII
Литература
Предметный указатель.
Список таблиц
Список иллюстраций
В пособии представлен систематизированный курс одной из основной дисциплин специализированной подготовки бакалавров по направлениям 09.03.04 "Программная инженерия" и 01.03.04 "Прикладная математика" с точки зрения прикладного программирования и парадигмы кроссплатформенности.
Рассмотрены основы архитектуры вычислительных систем как системной дисциплины. Представлен обзор архитектуры популярных процессоров семейства x86, в том числе шестидесятичетырёхбитных, представление основных типов данных в памяти компьютера, основные команды набора x86 и синтаксис AT&T. Обозначена проблематика прикладного кроссплатформенного программирования, объединяющего язык высокого уровня и язык Ассемблера.
Строгий стиль изложения сопровождается доступными для понимания пояснениями и многочисленными примерами, а также контрольными вопросами к каждой главе, необходимыми для глубокого усвоения материала. Книга адресована студентам технических специальностей, соискателям степени бакалавра по указанным направлениям, слушателям институтов повышения квалификации, может быть использована для самообразования.
Приложение А содержит методические указания к лабораторным работам.