|
|
|
|
|
|
|
Основная информация по курсу
|
|
|
|
---
|
|
|
|
|
|
|
|
# Контакты
|
|
|
|
|
|
|
|
* Лектор: [Игорь Жирков](http://rubber-duck-typing.com)
|
|
|
|
* telegram [@igorjirkov](https://t.me/igorjirkov) / email igorjirkov [at] gmail.com
|
|
|
|
* отвечает на вопросы в любой день (кроме ночей перед практикой и рубежным контролем :)
|
|
|
|
* [Журнал успеваемости](https://docs.google.com/spreadsheets/d/1WAw1c4t_Gf-dQkNriWhb4p4hvVny7W7mtPLunDOiVFM/edit?usp=sharing)
|
|
|
|
* [Группа в Telegram](https://t.me/joinchat/Aeg0rQ1O6XOATdnjL1qkAA) (обсуждения, объявления, вопросы)
|
|
|
|
* [Старая группа в VK](https://vk.com/spifmo)
|
|
|
|
* [Канал на YouTube](https://www.youtube.com/channel/UCOLTncnm6jVkO0pcPoIoHFg)
|
|
|
|
|
|
|
|
# Основные источники материала
|
|
|
|
|
|
|
|
* [Low-level programming: C, assembly and program execution on Intel 64 architecture](https://www.amazon.com/Low-Level-Programming-Assembly-Execution-Architecture/dp/1484224027) ([искать в Telegram-группе](https://t.me/c/1125766749/3348))
|
|
|
|
* [Документация Intel](https://gitlab.se.ifmo.ru/low-level-programming/classes/-/tree/master/docs/intel.pdf)
|
|
|
|
* [AMD Application Binary Interface](https://gitlab.se.ifmo.ru/low-level-programming/classes/-/tree/master/docs/intel.pdf) (прежде всего интересно детальное описание соглашения вызова функций)
|
|
|
|
* [Список системных вызовов с аргументами](https://gitlab.se.ifmo.ru/low-level-programming/classes/-/tree/master/docs/system-calls.md)
|
|
|
|
* "Principles of Computer System Design: An Introduction" ([искать в Telegram-группе](https://t.me/c/1125766749/3349))
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
|
|
# Формы контроля
|
|
|
|
|
|
|
|
* Тест на 5 минут на каждой практике.
|
|
|
|
* 8 лабораторных работ разной степени сложности
|
|
|
|
* 2 рубежных контроля (тесты, ответы в свободной форме, есть 2 задания на программирование)
|
|
|
|
* Можно досрочно закрыть курс с помощью **индивидуального** проекта (**не отменяет лабы**). Примеры проектов на [YouTube](https://www.youtube.com/channel/UCOLTncnm6jVkO0pcPoIoHFg). Сначала обсуждается с [@igorjirkov](https://t.me/igorjirkov).
|
|
|
|
|
|
|
|
|
|
|
|
# Лекции
|
|
|
|
|
|
|
|
1. Лекция от 05-09-2020 [[конспект](https://gitlab.se.ifmo.ru/low-level-programming/classes/-/tree/master/lec-1)] [[видеозапись на YouTube](https://www.youtube.com/watch?v=W3KFdwwFAH8)] [[опрос](https://forms.gle/UNGTWQBTVJwwZ9AV8)]
|
|
|
|
|
|
|
|
Системы, сложность систем, функциональная и структурная декомпозиция; исполнитель, память и транспорт, модульность и абстракция.
|
|
|
|
|
|
|
|
2. Лекция 2 [[конспект](https://gitlab.se.ifmo.ru/low-level-programming/classes/-/tree/master/lec-2)] [[видеозапись на YouTube](https://www.youtube.com/watch?v=Ys82UV-IVXs&feature=youtu.be)]
|
|
|
|
|
|
|
|
Модели вычисления, конечные автоматы, Model Checking, RAM-машина, основы ассемблера.
|
|
|
|
|
|
|
|
# Материалы практик
|
|
|
|
|
|
|
|
1. [Практика от 04-09-2020 и 11-09-2020](https://gitlab.se.ifmo.ru/low-level-programming/classes/-/blob/master/practice-1)
|
|
|
|
2. [Практика от 18-09-2020 и 25-09-2020](https://gitlab.se.ifmo.ru/low-level-programming/classes/-/blob/master/practice-2)
|
|
|
|
|
|
|
|
# Лабораторные работы (всего 8)
|
|
|
|
|
|
|
|
1. [Библиотека ввода-вывода на ассемблере](https://gitlab.se.ifmo.ru/low-level-programming/assignment-1-io-library)
|
|
|
|
2. [Словарь на ассемблере](https://gitlab.se.ifmo.ru/low-level-programming/assignment-2-dictionary)
|
|
|
|
3. [Введение в C](https://gitlab.se.ifmo.ru/low-level-programming/assignment-3-intro-c)
|
|
|
|
4. [Связный список](https://gitlab.se.ifmo.ru/low-level-programming/assignment-4-linked-list)
|
|
|
|
5. [Функции высшего порядка](https://gitlab.se.ifmo.ru/low-level-programming/assignment-5-hof)
|
|
|
|
6. [Поворот изображения](https://gitlab.se.ifmo.ru/low-level-programming/assignment-image-rotation)
|
|
|
|
7. [Аллокатор памяти](https://gitlab.se.ifmo.ru/low-level-programming/assignment-memory-allocator)
|
|
|
|
8. [Сепия-фильтр](https://gitlab.se.ifmo.ru/low-level-programming/assignment-8-sepia)
|
|
|
|
|
|
|
|
# Вместе пишем на С
|
|
|
|
|
|
|
|
* [Реализуем Hashmap](https://youtu.be/CGY5bJtlvyM)
|
|
|
|
|
|
|
|
# Преподаватели практики:
|
|
|
|
|
|
|
|
- Балакшин Павел Валерьевич
|
|
|
|
- Ильина Аглая Геннадьевна
|
|
|
|
- Кореньков Юрий Дмитриевич
|
|
|
|
- Логинов Иван Павлович
|
|
|
|
- Лукьянов Николай Михайлович
|
|
|
|
- Садырин Даниил Сергеевич
|
|
|
|
|
|
|
|
# Необходимые инструменты
|
|
|
|
|
|
|
|
* Debian GNU\Linux 8.0+ или аналогичный дистрибутив
|
|
|
|
* NASM 2.11.05+
|
|
|
|
* GCC 4.9.2+ или Clang
|
|
|
|
* GNU Make 4.0+
|
|
|
|
* GDB 7.7.1+
|
|
|
|
* Компьютер с процессором Intel (не Itanium) или AMD
|
|
|
|
|
|
|
|
Лабораторные работы по ассемблеру будет очень сложно выполнить на MacOS если вы
|
|
|
|
ещё не писали на ассемблере. MacOS требует, чтобы код был
|
|
|
|
[позиционно-независимый (PIC)](https://en.wikipedia.org/wiki/Position-independent_code), т.е. не содержал абсолютных адресов, это не так просто сделать.
|
|
|
|
Лабораторные работы 3-7 на C можно выполнять на MacOS.
|
|
|
|
|
|
|
|
Пользователи Windows также могут установить виртуальную машину, мы предлагаем три уже сконфигурированные:
|
|
|
|
|
|
|
|
1. Ubuntu 16 with standard desktop environment (VirtualBox): [https://yadi.sk/d/CLf4D4IM3TSpsx](https://yadi.sk/d/CLf4D4IM3TSpsx)
|
|
|
|
2. Debian 9 Minimal (.vmx) [https://yadi.sk/d/BehMKGzS3LgXzG](https://yadi.sk/d/BehMKGzS3LgXzG)
|
|
|
|
3. Debian 9 + XFCE [https://yadi.sk/d/01uFWHCw3SHzh9](https://yadi.sk/d/01uFWHCw3SHzh9).
|
|
|
|
|
|
|
|
> Логин/пароль user, пароль от рута qwerty
|
|
|
|
|
|
|
|
4. **Docker image** (не тестировалась) [https://github.com/kellyi/nasm-gcc-container](https://github.com/kellyi/nasm-gcc-container)
|
|
|
|
|
|
|
|
Если ни один из этих вариантов для вас невозможен (например, есть только планшет на Android), обратитесь к [@igorjirkov](https://t.me/igorjirkov) за аккаунтом на VPS. |