Лекция 1. Вводная лекция. История вычислительной техники. Архитектура фон Неймана. Основные компоненты компьютера. Слайды
Лекция 2. Архитектура IA32: основные регистры, форматы команд. Пример ассемблерной программы: пересылка данных, арифметические операции, регистр флагов. Пример №1, Слайды
Лекция 3. Отображение операторов разыменование указателя и взятия адреса из языка Си в язык ассемблера. Передача управления. Пример ассемблерной программы: условные и безусловные переходы. Пример работы с указателями, Пример №2, Слайды
Лекция 4. Проблемы организации вызова функций. Аппаратная поддержка стека. Пример ассемблерной программы: отображение вызова функции языка C в язык ассемблера. Пример №3, Слайды
Лекция 5. Реализация арифметических операций над 64-разрядными целыми в архитектуре IA32.Примеры программ, Слайды
Лекция 6. Структуры и объединения. Доступ к полям. Выравнивание данных. Примеры программ, Слайды
Лекция 7. Побитовые логические инструкции. Инструкции сдвига и вращения. Примеры программ, Слайды
Лекция 8. Условная передача данных. Отображение операторов цикла языка Си в язык ассемблера. Организация цикла с помощью инструкции LOOP. Примеры программ, Слайды
Лекция 9. Массивы: одномерные, многомерные, многоуровневые. Расположение в памяти, способы работы с отдельными элементами. Работа с массивами: примеры простых оптимизаций. Понятие о машинно-независимой и машинно-зависимой оптимизации. Примеры программ, Слайды
Лекция 10. Различные способы отображения оператора switch в язык ассемблера: последовательность if-else, таблица переходов, дерево выбора. Примеры программ, Слайды
Лекция 11. Соглашение о вызове cdecl. Распределение памяти во фрейме функции. Организация рекурсии. Примеры программ, Слайды. Коллоквиум №1
Лекция 12. Возвращаемое значение в соглашении cdecl, возврат структур из функции. Выравнивание фреймов в стеке. Организация вызова функций стандартной библиотеки языка Си из ассемблерного кода. Ускорение вызова функций и возврата из них: реализация вызова функций без указателя фрейма, соглашение fastcall. Функции с переменным числом параметров. Примеры программ, Слайды
Лекция 13. Вызов функции по указателю. Обратный вызов. Формат инструкций архитектуры IA32. Префиксы: модификаторы размера операнда и адреса, префиксы повтора REP/REPE/REPZ/REPNE/REPNZ. Реализация операций над строками. Инструкции MOVS, CMPS, SCAS. Регистры EDI и ESI. Флаг DF. Инструкции STD и CLD. Примеры программ, Слайды
Лекция 14. Представление чисел с плавающей точкой. Стандарт IEEE 754. Операции над числами с плавающей точкой. Округление чисел. Слайды
Лекция 15. Сопроцессор FPU x87. Аппаратный стек регистров. Обратная польская запись. Инструкции FLD, FST, FILD, FIST, FXCH, FADD, FSUB, FMUL, FDIV, … Примеры программ, Слайды
Лекция 16. Организация аппаратного обеспечения компьютера. Логические вентили. Закон Мура. Закон Гроша. Устройство оперативной памяти. Статическая и динамическая память. Расслоение памяти. Слайды
Лекция 17. Ввод/вывод. Шины, их характеристики, примеры шин: фронтальная шина, PCI, USB, SATA … Устройство НЖМД: организация, емкость, временные характеристики доступа. Организация ввода/вывода через пространство портов и через память. Прямой доступ к памяти периферийных устройств. Слайды
Лекция 18. Твердотельные диски. Тенденции в развитии запоминающих устройств. Локальность в программах. Иерархическая организация памяти, кэширование. Кэш-память: способы организации. Кэш прямого отображения. N-канальный ассоциативный кэш. Слайды
Лекция 19. Метрики производительности кэша. Способы оценки производительности компьютеров и программ. Аппаратные средства измерения времени. Синтетический тест: оценка производительности памяти современного компьютера. Конвейерная обработка команд. Приостановка и опустошение конвейера. Суперскалярная архитектура. CISC и RISC архитектуры. Слайды
Лекция 20. Коллоквиум №2.
Лекция 21. История развития архитектуры x86. Обратная совместимость процессоров. Многозадачная работа компьютера: требования к аппаратуре, работа с памятью в защищенном режиме. Страничная организация памяти. Режимы работы современного процессора архитектуры Intel64/AMD64. Слайды
Лекция 22. Компиляция и интерпретация. Система программирования языка Си. Программные инструменты, используемые при разработке Си-программ. Схема работы ассемблера. Статическая компоновка программы. Схема работы компоновщика: разрешение символов и перемещение кода. Типы объектных файлов (модулей). Формат ELF. Слайды
Лекция 23. Обработка компоновщиком нескольких символов с одинаковыми именами: сильные и слабые символы. Организация многомодульной программы, роль заголовочных файлов. Автоматизация сборки многомодульной программы: утилита make. Статические библиотеки. Компоновка со статическим библиотеками. Загрузка исполняемого файла в память. Слайды
Лекция 24. Разбор результатов коллоквиума №2. Подведение итогов курса.
Для лучшей наглядности соответствия операторов исходных Си-программ и ассемблерных инструкций они выделены соответствующим фоновым цветом.