Архитектура ЭВМ и язык ассемблера

Архитектура ЭВМ и язык ассемблера

Архитектура ЭВМ и язык ассемблера

Автор: Вартан Андроникович Падарян
Дата выхода: 2024
Издательство: Самиздат
Количество страниц: 291
Размер файла: 5,7 МБ
Тип файла: PDF
Добавил: codelibs
 Проверить на вирусы

1 Лекция 1. Введение. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.1 Цель курса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2 Несколько проблем программирования . . . . . . . . . . . . . . . . 10
1.3 Зачем нужен язык ассемблера . . . . . . . . . . . . . . . . . . . . . 14
1.4 История первых компьютеров . . . . . . . . . . . . . . . . . . . . . 14
1.5 Архитектура фон Неймана . . . . . . . . . . . . . . . . . . . . . . . 15
1.6 Другие варианты архитектур . . . . . . . . . . . . . . . . . . . . . . 17
1.7 Модельный цикл работы ЭВМ . . . . . . . . . . . . . . . . . . . . . 18
1.8 Ключевые понятия и термины . . . . . . . . . . . . . . . . . . . . . 19
2 Лекция 2. Машина, на которой работает пользовательская программа . . . 21
2.1 Машина, на которой работает пользовательская программа . . . . . 21
2.2 Порядок размещения байт в памяти . . . . . . . . . . . . . . . . . . 23
2.3 Команда сложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.4 Интерпретация конструкции с командой add с незаданным размером 25
2.5 Команда пересылки . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.6 Типы адресации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.7 IA-32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.8 Примеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3 Лекция 3. Устройство ассемблерной программы . . . . . . . . . . . . . . . 31
3.1 Пример . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2 Обратный путь . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3 Устройство ассемблерной программы . . . . . . . . . . . . . . . . . 37
3.4 Пример заполнения секции .data . . . . . . . . . . . . . . . . . . . . 39
3.5 Секция .text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.6 Основные арифметические команды . . . . . . . . . . . . . . . . . 40
4 Лекция 4. Регистр EFLAGS. . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.1 Регистр EFLAGS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.2 Арифметические FLAGи . . . . . . . . . . . . . . . . . . . . . . . . 44
4.3 Переполнение при сложении двух беззнаковых чисел . . . . . . . . 44
4.4 FLAG OF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.5 Изменение естественного порядка выполнения программы . . . . . 46
4.6 Коды . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.7 Варианты сравнения . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.8 Регистр EFLAGS и инструкции . . . . . . . . . . . . . . . . . . . . 51
4.9 Обратная задача . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.10 Просмотр содержимого исполняемого файла . . . . . . . . . . . . . 54
5 Лекция 5. Вызов функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.1 Вызов функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.2 Аппаратный стек AI-32 . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.3 Команда push . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.4 Команда pop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.5 Языки программирования (ЯП), базирующиеся на стеке вызовов . 59
5.6 Порядок вызова функции . . . . . . . . . . . . . . . . . . . . . . . . 60
5.7 Стек фреймов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.8 Организация фрейма в IA-32/Linux . . . . . . . . . . . . . . . . . . 64
6 Лекция 6. Система команд. . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
6.1 Группы команд . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
6.2 Команда LEA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
6.3 Косвенная адресация . . . . . . . . . . . . . . . . . . . . . . . . . . 71
6.4 Реализация стрелки Пирса . . . . . . . . . . . . . . . . . . . . . . . 72
6.5 Сдвиги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6.6 Форматы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.7 Команды вращения . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.8 Обратная задача . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.9 Сложение 64-разрядных чисел на 32 разрядных регистрах . . . . . 79
6.10 Умножение 64 разрядных чисел на 32 разрядных регистрах . . . . 80
7 Лекция 7. Как организована передача управления. . . . . . . . . . . . . . . 83
7.1 Сравнение беззнаковых чисел . . . . . . . . . . . . . . . . . . . . . 83
7.2 Сравнение знаковых чисел . . . . . . . . . . . . . . . . . . . . . . . 83
7.3 Сравнение: со знаком и без . . . . . . . . . . . . . . . . . . . . . . . 84
7.4 Реализация операндов с помощью известных команд . . . . . . . . 86
7.5 Условная передача данных . . . . . . . . . . . . . . . . . . . . . . . 89
7.6 Конвейер – совмещение разных действий в один момент времени . 90
7.7 Оператор do-while . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
7.8 Оператор while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
7.9 Оператор for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
8 Лекция 8. Оператор управления switch . . . . . . . . . . . . . . . . . . . . . 99
8.1 Обратная задача . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
8.2 Оператор управления switch . . . . . . . . . . . . . . . . . . . . . . 100
8.3 Duff’s Device . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
8.4 Обратная задача . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
8.5 Указатели . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
8.6 Массивы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
9 Лекция 9. Многомерные массивы. . . . . . . . . . . . . . . . . . . . . . . . 116
9.1 Массивы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
9.2 Две обратные задачи . . . . . . . . . . . . . . . . . . . . . . . . . . 117
9.3 Выделение памяти . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
9.4 Доступ к строкам . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
9.5 Оптимизация доступа к многомерным массивам. . . . . . . . . . . 122
9.6 Обращение к элементу . . . . . . . . . . . . . . . . . . . . . . . . . 122
9.7 Оптимизация доступа к элементам массива . . . . . . . . . . . . . 123
10 Лекция 10. Структуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
10.1 Повторение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
10.2 Структуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
10.3 Выравнивание полей в структурах . . . . . . . . . . . . . . . . . . . 127
10.4 Объединения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
10.5 Порядок байт . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
10.6 Битовые поля . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
10.7 Немного про функции . . . . . . . . . . . . . . . . . . . . . . . . . 132
10.8 Соглашения CDECL . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
10.9 Сохранение регистров . . . . . . . . . . . . . . . . . . . . . . . . . 133
11 Лекция 11. Функция main . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
11.1 ABI - двоичный интерфейс приложения . . . . . . . . . . . . . . . 134
11.2 Функция main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
11.3 Начальное состояние стека . . . . . . . . . . . . . . . . . . . . . . . 135
11.4 Сохранение требований по выравниванию . . . . . . . . . . . . . . 137
11.5 Конструкторы и деструкторы . . . . . . . . . . . . . . . . . . . . . 138
11.6 Оболочка вокруг main . . . . . . . . . . . . . . . . . . . . . . . . . . 139
12 Лекция 12. Особенности архитектуры х86-64. . . . . . . . . . . . . . . . . 140
12.1 Выравнивание фрейма . . . . . . . . . . . . . . . . . . . . . . . . . 140
12.2 Отказ от указателя фрейма . . . . . . . . . . . . . . . . . . . . . . . 140
12.3 Компиляторы и соглашения вызова функции . . . . . . . . . . . . . 142
12.4 Соглашение FASTCALL . . . . . . . . . . . . . . . . . . . . . . . . 144
12.5 Особенности 64-разрядной процессорной архитектуры . . . . . . . 145
12.6 Архитектура х86_64 . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
13 Лекция 13. Безопасность программного обеспечения . . . . . . . . . . . . 148
13.1 Пример 1 “Заглянуть за горизонт” . . . . . . . . . . . . . . . . . . . 148
13.2 Пример 2. “Нескучная арифметика” . . . . . . . . . . . . . . . . . . 150
13.3 Пример 3. “return-to-libc” . . . . . . . . . . . . . . . . . . . . . . . . 151
13.4 Способы защиты . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
14 Лекция 14. Динамическая память . . . . . . . . . . . . . . . . . . . . . . . 156
14.1 Управление динамической памятью . . . . . . . . . . . . . . . . . . 156
14.2 Выделение динамической памяти . . . . . . . . . . . . . . . . . . . 156
14.3 Ограничения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
14.4 Производительность. Пропускная способность . . . . . . . . . . . 158
14.5 Внутренняя фрагментация. Внешняя фрагментация . . . . . . . . . 158
14.6 Проблемы реализации менеджера памяти . . . . . . . . . . . . . . 159
15 Лекция 15. Работа с числами с плавающей точкой. Часть 1 . . . . . . . . . 165
15.1 Дробные двоичные числа . . . . . . . . . . . . . . . . . . . . . . . . 165
15.2 Представимые рациональные числа . . . . . . . . . . . . . . . . . . 165
15.3 Представление чисел с плавающей точкой . . . . . . . . . . . . . . 165
15.4 Диапазоны значений . . . . . . . . . . . . . . . . . . . . . . . . . . 167
15.5 Округление . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
15.6 Арифметические операции . . . . . . . . . . . . . . . . . . . . . . . 168
15.7 Математические свойства сложения и умножения . . . . . . . . . . 170
15.8 Числа с плавающей точкой в языке Си . . . . . . . . . . . . . . . . 171
15.9 Упрощённая схема х87 . . . . . . . . . . . . . . . . . . . . . . . . . 171
16 Лекция 16. Работа с числами с плавающей точкой. Часть 2. Сопроцессор х87.....173
16.1 Слово (регистр) состояния . . . . . . . . . . . . . . . . . . . . . . . 173
16.2 Управляющий регистр . . . . . . . . . . . . . . . . . . . . . . . . . 175
16.3 Регистр признаков . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
16.4 NASM и числа с плавающей точкой . . . . . . . . . . . . . . . . . . 175
16.5 Пример 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
16.6 Пример 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
16.7 Порядок действий . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
16.8 Дополнительные команды . . . . . . . . . . . . . . . . . . . . . . . 179
16.9 Сравнение чисел . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
16.10 Дополнительные возможности работы сопроцессора . . . . . . . . 181
17 Лекция 17. Элементы системы программирования . . . . . . . . . . . . . . 182
17.1 Система программирования . . . . . . . . . . . . . . . . . . . . . . 182
17.2 Система программирования языка Си . . . . . . . . . . . . . . . . . 182
17.3 Компиляция . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
17.4 Схема работы ассемблера . . . . . . . . . . . . . . . . . . . . . . . . 184
17.5 Пример Си-программы . . . . . . . . . . . . . . . . . . . . . . . . . 185
17.6 Статическая компоновка . . . . . . . . . . . . . . . . . . . . . . . . 186
18 Лекция 18. Сборка Си-программы . . . . . . . . . . . . . . . . . . . . . . . 191
18.1 Предварительное определение переменных . . . . . . . . . . . . . 191
18.2 Сильные и слабые символы. Пример. . . . . . . . . . . . . . . . . . 191
18.3 Правила работы с символами . . . . . . . . . . . . . . . . . . . . . 192
18.4 Задача. Ошибка компоновки . . . . . . . . . . . . . . . . . . . . . . 193
18.5 Пример (Правила перебазирования) . . . . . . . . . . . . . . . . . . 193
18.6 Работа с общими функциями . . . . . . . . . . . . . . . . . . . . . . 196
18.7 Статические библиотеки . . . . . . . . . . . . . . . . . . . . . . . . 196
18.8 Загрузка исполняемого объектного файла . . . . . . . . . . . . . . . 197
19 Лекция 19. Динамические библиотеки. Динамическое связывание . . . . . 199
19.1 Динамические библиотеки . . . . . . . . . . . . . . . . . . . . . . . 199
19.2 Пример . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
19.3 Позиционно независимый код в IA-32 . . . . . . . . . . . . . . . . . 201
19.4 Код при вызове функций . . . . . . . . . . . . . . . . . . . . . . . . 204
19.5 Загрузка динамически скомпонованного исполняемого файла . . . 205
20 Лекция 20. Аппаратное обеспечение . . . . . . . . . . . . . . . . . . . . . . 207
20.1 Логические вентили . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
20.2 Сумматор. Полусумматор . . . . . . . . . . . . . . . . . . . . . . . . 209
20.3 Мультиплексор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
20.4 Арифметико-логическое устройство . . . . . . . . . . . . . . . . . . 210
20.5 Регистр: сохранение 1 бита . . . . . . . . . . . . . . . . . . . . . . . 210
20.6 Статическая память . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
20.7 Отличие статической памяти от динамической памяти . . . . . . . 211
20.8 Разработка интегральных схем . . . . . . . . . . . . . . . . . . . . . 211
20.9 Этапы разработки и изготовления компонент ЭВМ . . . . . . . . . 212
20.10 Закон Мура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
20.11 Закон Гроша . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
20.12 Закон Белла . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
20.13 Различные классы компьютеров . . . . . . . . . . . . . . . . . . . . 213
20.14 Оперативная память . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
21 Лекция 21. Организация шин . . . . . . . . . . . . . . . . . . . . . . . . . . 217
21.1 Шины и адресные пространства. . . . . . . . . . . . . . . . . . . . 217
21.2 Организация ввода/вывода через пространство портов и через память. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
21.3 Шина. Точка зрения системного программиста . . . . . . . . . . . . 222
21.4 Пример устройства на шине: WatchDog. . . . . . . . . . . . . . . . 224
21.5 Физические принципы устройства шин. Основные характеристики шин. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
21.6 Развитие системы связанных шин персональных компьютеров . . . 226
21.7 Примеры шин: фронтальная шина . . . . . . . . . . . . . . . . . . . 229
21.8 Синхронизация обращений к памяти . . . . . . . . . . . . . . . . . 229
21.9 Примеры шин: PCI. . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
22 Лекция 22. Использование шин в современных компьютерах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
22.1 Примеры шин: AGP, USB, SATA . . . . . . . . . . . . . . . . . . . . 234
22.2 Жесткий диск . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
22.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
22.4 Ввод/вывод (блочного) SATA-устройства. . . . . . . . . . . . . . . . 238
22.5 Твердотельные диски (SSD) . . . . . . . . . . . . . . . . . . . . . . 239
22.6 Локальность в программах . . . . . . . . . . . . . . . . . . . . . . . 242
22.7 Иерархическая организация памяти, кэширование. . . . . . . . . . 244
22.8 Кэш-память: способы организации. . . . . . . . . . . . . . . . . . . 246
22.9 Кэш прямого отображения. . . . . . . . . . . . . . . . . . . . . . . . 247
23 Лекция 23. Работа кэша. Количественные характеристики работы компьютера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
23.1 Запись в кэш . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
23.2 Метрики производительности кэша . . . . . . . . . . . . . . . . . . 249
23.3 Способы оценки производительности компьютеров и программ . . 250
23.4 Аппаратные средства измерения времени. . . . . . . . . . . . . . . 251
23.5 Оценка производительности памяти: синтетический бенчмарк (контрольная задача) . . . . . . . . . . . . . . . . . . . . . . . . . . 252
23.6 Микроархитектура процессора, ее связь с другими архитектурными уровнями. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
23.7 Пропускная способность vs. Латентность . . . . . . . . . . . . . . . 256
23.8 Оценка латентности памяти на синтетическом тесте. . . . . . . . . 257
23.9 Микроархитектурные решения . . . . . . . . . . . . . . . . . . . . 260
23.10 Конвейерная обработка команд, проблемы конвейерной обработки 260
23.11 CISC и RISC архитектуры. . . . . . . . . . . . . . . . . . . . . . . . 266
23.12 RISC-V – архитектура RISC-микропроцессоров с открытым исходным кодом. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
23.13 Конвейер RISC-V . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
23.14 Развитие системы команд в архитектуре x86 . . . . . . . . . . . . . 270
24 Лекция 24. Системное управление работой современного компьютера . . . 272
24.1 Режимы работы современного процессора архитектуры Intel64/AMD64, загрузка. . . . . . . . . . . . . . . . . . . . . . . . . 272
24.2 Встраиваемое ПО, обеспечивающее начальную загрузку компьютера: BIOS, ACPI, UEFI . . . . . . . . . . . . . . . . . . . . 273
24.3 Многозадачная работа компьютера: требования к аппаратуре. . . . 275
24.4 Модели памяти. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
24.5 Аппарат защиты памяти. . . . . . . . . . . . . . . . . . . . . . . . . 278
24.6 Страничная виртуальная память. . . . . . . . . . . . . . . . . . . . 280
24.7 Упрощенная схема извлечения данных из виртуальной памяти . . 284
24.8 Уровни (кольца) защиты . . . . . . . . . . . . . . . . . . . . . . . . 285
24.9 Прерывания. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
24.10 Hello, world! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

 Книга имеет своей целью изучение базовых принципов устройства современных ЭВМ, анализ качественных и количественных характеристик различных компонент ЭВМ, анализ влияния этих характеристик на работу прикладных программ. Помимо того, предполагается практическое освоение языка ассемблера архитектуры IA-32, изучение особенностей этой процессорной архитектуры, изучение взаимосвязей между архитектурой набора команд, механизмами реализации языка Си и системой программирования.


Похожее:

Список отзывов:

Нет отзывов к книге.