Войти
Информатика 24 лекции
Архитектура ЭВМ и язык ассемблера
1
Лектор
Падарян Вартан Андроникович
#лекции
ВМК
II семестр
Осень 2020

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

Список всех тем лекций

Лекция 1. Введение.
Цель курса Свойства чисел Язык ассемблера Отладка Асимптотическая сложность Зачем сейчас нужен язык ассемблера? Литература План лекций История первых компьютеров Архитектура фон Неймана Единственный вариант архитектуры? Модельный цикл работы ЭВМ Ключевые термины и понятия

Лекция 2. Машина, на которой работает пользовательская программа.
Машина, на которой работает пользовательская программа Рассмотрение одного регистра Кодирование записи четырех команд Команда MOV Порядок размещения байт в памяти Команда сложения Интерпретация конструкции с командой add с незаданным размером Еще одна команда пересылки Резюме IA-32 Пример Память

Лекция 3. Устройство ассемблерной программы.
Повторение Объявление и инициализация переменной Построение дерева Умножение Обратный путь Устройство ассемблерной программы Основные секции Директивы секции data Пример заполнения секции data Резюме по командам арифметики INC MUL Пример IDIV, DIV 16-разрядный операнд CBW, CWD, CDQ

Лекция 4. Регистр EFLAGS.
Регистр EFLAGS Арифметические FLAGи ZF, SF, CF Переполнение при сложении двух беззнаковых чисел OF - знаковое переполнение Знаковое переполнение с графической точки зрения Изменение естественного порядка выполнения программы Команды переходов Коды Варианты сравнения Пример Другой способ Резюме Восстановление корректного варианта Код Просмотр содержимого исполняемого файла

Лекция 5. Вызов функции.
Вызов функции Аппаратный стек AI-32 Команда push Команда push dword Команда pop dword Команда call Куда call передаст управление? Команда ret Пример цепочки вызовов Стек фреймов Организация фрейма в IA-32/Linux Пример

Лекция 6. Система команд.
Повторение Группы команд Команда LEA Косвенная адресация Базово-индексная адресация Базово-индексная с масштабированием Базово-индексная с масштабированием и смещением Реализация стрелки Пирса Сдвиг влево Направление и интерпретация Сдвиг вправо Форматы FLAGи Команды вращения Фрагмент кода криптографической хеш-функции Обратная задача Сложение 64-разрядных чисел на 32-разрядных регистрах Умножение 64-разрядных чисел на 32-разрядных регистрах

Лекция 7. Как организована передача управления.
Как организована передача управления Сравнение знаковых чисел Сравнение: со знаком и без Пример Задача Реализация операторов с помощью известных команд Условная передача данных Конвейер - совмещение разных действий в один момент времени Опустошение конвейера при передаче управления Применение команды, чтобы передачи управления не происходило Циклы Оператор while Команда loop для поддержки работы с циклами

Лекция 8. Оператор управления switch.
Задача Оператор управления switch Реализация на ассемблере Duffs Device Пример Код Размещение меток в массиве Числовой круг Приведение сравниваемой величины к нулевой базе Начало оператора switch Окончание оператора switch Дерево поиска Обратная задача Указатели Массивы Имена для производных типов Обращение к отдельному элементу Пример

Лекция 9. Многомерные массивы.
Разбор вопросов Повторение Две обратные задачи Добавили к одномерному массиву еще один уровень Не во всех языках программирования развертывание идет по строчкам Выделение памяти Доступ к строчкам Пример Массивы указателей Оптимизации, выполняющиеся при работе с многомерными массивами Обращение к элементу Неизвестная размерность Оптимизация доступа к элементам массива Упрощение кода

Лекция 10. Структуры.
Повторение Задача на определение размерности двух массивов Структуры Доступ к полям Указатель на поле структуры Выравнивание полей в структурах Почему выравнивают данные Выполнение правил выравнивания для полей Различные соглашения о выравнивании Массивы структур Как сохранить место Пример: двоичное дерево Использование объединений для доступа к отдельным битам Пример Пример, связанный с рекурсивным вызовом Распределение регистров Рекурсивный вызов Выводы

Лекция 11. Функция main.
Обратная задача- восстанавливаем объявление функции ABI - двоичный интерфейс приложения Уровни Функция main Начальное состояние стека Секции программы Расчёты адреса начала координат Команда hlt Сохранение требований по выравниванию Функция main с выравниванием стека Пример вызова malloc Реализация кода Выравнивание стека

Лекция 12. Отклонение от соглашения вызова CDECL. Особенности архитектуры х86-64.
Выравнивание фрейма (повторение пройденного материала) Отказ от указателя фрейма Компиляторы и соглашения о вызове функций Соглашение STDCALL Соглашение FASTCALL Особенности 64-х разрядной процессорной архитектуры Архитектура х86-64 Примеры

Лекция 13. Безопасность программного обеспечения.
"Заглянуть за горизонт" " Нескучная арифметика" "return-to-libc" Вызов функций - заключение

Лекция 14. Динамическая память.
Управление динамической памятью Выделение динамической памяти Ограничения Пропускная способность Внешняя фрагментация Проблемы реализации менеджера памяти Промежуточные итоги Задача на моделирование работы менеджера динамической памяти

Лекция 15. Работа с числами с плавающей точкой. Часть 1.
Дробные двоичные числа Представимые рациональные числа Представление чисел с плавающей точкой Диапазоны значений Некоторые числа Округление. Математические свойства сложения и умножения Числа с плавающей точкой в языке Си Пример Упрощённая схема х87

Лекция 16. Работа с числами с плавающей точкой. Часть 2. Сопроцессор х87.
Слово (регистр) состояния Управляющий регистр Регистр признаков (тагов) NASM и числа с плавающей точкой Пример 1 Пример 2 Порядок действий Дополнительные возможности работы сопроцессора

Лекция 17. Элементы системы программирования.
Система программирования Система программирования языка Си Компиляция Пример Си-программы Частичная трансляция команд Построение объектного кода Статическая компоновка

Лекция 18. Сборка Си-программы.
Предварительное определение переменных Пример Задача (ошибка компоновки) Пример (правила перебазирования) Работа с общими функциями

Лекция 19. Динамические библиотеки. Динамическое связывание.
Динамические библиотеки Пример Позиционно независимый код IA-32 Код при вызове функции Динамическая библиотека LD_LIBRARY_PATH=pwd Резюме по теме

Лекция 20. Аппаратное обеспечение.
Логические вентили Полусумматор Мультиплексор Арифметико-логическое устройство бита Статическая память Отличие статической памяти от динамической памяти Разработка интегральных схем Этапы разработки и изготовления компонент ЭВМ Закон Мура Закон Гроша Закон Белла Различные классы компьютеров Оперативная память

Лекция 21. Организация шин. Часть 1.
Организация шин Типовое соединение ЦПУ и оперативной памяти Шина: точка зрения разработчика аппаратуры Характеристика шин Примеры шин (1) Синхронизация обращений к памяти Примеры шин (2)

Лекция 22. Организация шин. Часть 2.
Примеры шин (3) Внешнее устройство HDD Геометрия диска Ёмкость диска Работа с диском (одна пластина) Доступ к диску Логические блоки Твердотельные диски Тенденции в развитии запоминающих устройств Примеры Примеры кэшей

Лекция 23. Организация функционирования кэш-памяти.
Запись данных в память Иерархия кэшей в Intel Core i7 Метрики производительности кэша Оценка производительности Пример (оценка производительности памяти) Неучтённые факторы Упреждающая выборка данных Латентность Отключение упреждающей выборки Выводы

Лекция 24. Системное управление работой компьютера.
Архитектура Intel64 Схема загрузки IA-32 Реальный режим/8086 UЕFI Стандарт АСРI Многозадачная работа компьютера: требования к аппаратуре Модель памяти в IA-32 Уровни защиты Типы и классы прерываний Системные вызовы