Практическое закрепление материала: домашние задания и семинары
Для уверенного закрепления материала в лекциях предусмотрены предусмотрены семинарские занятия по каждой теме, для которой имеется соответствующий инструмент (как правило, эмулятор соответствующей архитектуры или устройства). Задача семинара — заполнить базовые пробелы в знаниях и навыках студента и дать больше практики более активному студенту. Семинарские занятия не преследуют цели полностью закрывать лекционный материал, даже в практической части.
Семинар состоит из чередующихся активностей:
Фрагмент теории (как правило, терминология, ссылки)
Совместный разбор примеров (студенты копирую действия преподавателя)
Самостоятельное решение простейших упражнений на разобранную тему
- Дополнительно может быть составлено отдельное домашнее задание по практической части лекций (в данном плане отсутствует)
Более подробно см. описание методологии ведения практикума.
Семинары пронумерованы в соответствии с лекционным планом; темы, по которым практической поддержки нет или она оказалась бы слишком сложной, отмечены «×»
Не предполагается пересказывать на семинарах «теоретическую» часть лекций — видеозаписи находятся в открытом доступе.
[2] Системы счисления и эмулятор учебных машин
Перевод между системами счисления
Перевод между двоичным, десятичным и шестнадцатеричным представлением числа
Запись отрицательного числа в дополнительном коде в двоичном виде.
Запись отрицательного числа в дополнительном коде в двоичном виде.
Установка и запуск эмулятора modelmachine
Модификация простейшей программы для УМ3.
[4] УМ-3: условия и циклы
Система команд УМ3
Условие как переход вперёд
Сравнение двух чисел
Сравнение трёх чисел (вложенное условие)
Цикл как переход назад
Таблица умножения в столбик
[6] УМ-2 и УМ-1
Система команд УМ2
Команды УМ2 и флаги для условного перехода
Таблица умножения в столбик
Система команд УМ1
Планирование вычислений для одноадресной ЭВМ
Вычисление формулы
- ×
[8] УМ-М и переменный размер команды
Регистры и их назначение
Простой цикл для УМ-М
Простой цикл для УМ-М
Косвенная адресация и массивы
Обход массива
Простейшая задача на модификацию массива
- ×
[10] Система команд и ассемблер RISC-V
Понятие языка ассемблера, работа с RARS, интерактивная помощь в RARS
Простейшая программа для RARS
Сумма трёх чисел
Использование ecall
Вdод, сумма и вывод трёх чисел
[12] Работа с памятью
Хранение данных и строк
Ввести, обработать, вывести числа диагностикой
Условный переход
Неравенство треугольника
Каноническая схема цикла
Цикл
Таблица умножения в столбик
[14] Массивы
Косвенная адресация
Ввод и вывод массива
Ввод, обработка и вывод массива
Работа с отладчиком в RARS; точки останова
Вычислить формулу, посмотреть значения регистров посередине вычисления
Двумерные массивы: ввод и вывод
Транспонирование матрицы
[16] Концевые подпрограммы
call и ret; простейшая подпрограмма
Формула с подпрограммой к качестве подформулы
Конвенции по передаче параметров
Подпрограмма с несколькими параметрами и двумя возвращаемыми значениями
[18] Стек и универсальные подпрограммы
Стек в RISC-V; понятие «локальной переменной»
В цикле положить 10 значений на стек, потом снять и вывести их
Конвенции по использованию регистров
Простейшая универсальная подпрограмма — сложение двух чисел
Универсальная подпрограмма — сумма четырёх параметров с использованием подпрограммы, вычисляющей сложение
Использование стека для восстановления сохраняемых регистров
Универсальная подпрограмма reduce, которая получает на вход адрес массива A, его длину n и адрес подпрограммы, реализующей бинарную операцию ζ (например, сложение или умножение). Подпрограмма возвращает A0 ζ A1 ζ … ζ An-1
Для хранения индекса массива или адреса элемента использовать сохраняемый регистр s1
[20] Математический сопроцессор
(коротко) Представление вещественных чисел по IEEE 754; нормализованная и денормализованная формы
RARS Floating Point Representation
Система команд RISC-V FPU (расширение F)
Написать программу, которая получает из числа в нормализованном представлении число в денормализованом представлении (путём деления на 4, например); убедиться в этом с помощью Floating Point Representation
Конвенции по передаче параметров и использованию регистров
Универсальная подпрограмма с вычислением формулы; ввод и вывод вещественных чисел в RARS
Универсальная подпрограмма с вычислением формулы
[22] Макросы
Макроподстановка и макровзрыв
Макроопределение и макроподстановка в программе, использование параметров
Задание и использование макроса «вывод строки + числа в заданном формате» (строка передаётся в виде адреса, формат передаётся в виде номера ecall)
Локальное хранение констант (совмещение секций кода и данных) и метки в макросах
Переписать предыдущий пример с передачей строки в виде строки
[24] Математический сопроцессор (продолжение) и кадр стека
Назначение кадра стека, регистр fp; конвенции по использованию кадра (кратко)
Универсальная подпрограмма с использованием кадра
Трижды вызвать по цепочке одну подпрограмму с кадром из другой, пронаблюдать в памяти связный список кадров
Неатомарная операция сравнения; пример
Неравенство треугольника (ввести три числа и проверить, можно ли построить треугольник с такими сторонами)
Управляющие регистры FPU и их использование: пример с флагом fcsr OF
Ввести два числа, вывести их произведение и информацию, была ли потеряна точность (fcsr NX)
[26] Статические структуры данных
Косвенная индексация и адресная арифметика
Моделирование двумерных массивов: подпрограммы вывода двумерного массива по строкам и ввода по столбцам
Написать подпрограмму rotate N addr0 addr1, которая поворачивает квадратную матрицу addr0 размером N×N на 90°, заполняя addr1. Вызвать её четырежды.
Структура кольцевого буфера — очереди
Разбор реализации очереди из лекций
Дописать к имеющейся реализации две подпрограммы — push_q, которая добавляет значение в голову очереди, и pop_q, которая снимает значение из хвоста очереди
[28] Обработка исключений
Регистры статуса и управления RISC-V; понятие исключения и обработчика
Разбор простейшего обработчика из лекций
Написать простейший обработчик несуществующего внешнего вызова (ENVIRONMENT_CALL), который перегружает a0 в -1, а в противном случае — останавливает работу программы
Конвенция по сохранению контекста в обработчике: uscratch и память для регистров
Написать «внешний вызов "счётчик"»: обработчик исключения ENVIRONMENT_CALL, который при a7 == 0x100 возвращает в a0 постоянно увеличивающееся на 1 число. В остальных исключениях останавливать выполнение.
[30] Ввод/вывод: поллинг и MMIO
Понятие MMIO
Цифровой блок RARS: сегментный индикатор
Написать подпрограмму, которая выводит на цифровом индикаторе двузначное двоичное число в диапазоне от 0 до 3
Цифровой блок RARS: клавиатура
Написать подпрограмму, которая возвращает число от 0 до 15, соответствующее клавише, нажатой на цифровой клавиатуре, иначе -1.
- {OК} Графический дисплей RARS: подпрограмма рисования точки
Написать подпрограмму рисования круга circle xcenter ycenter radius color (подсказка: перебрать все точки квадрата, и заполнить те, для которых (xcenter - x)2 + (ycenter - y)2 ⩽ radius2 ).
[32] Прерывания по таймеру
[34] Прерывания
[36] Конвейер, кеш и предсказание перехода
- ×
[38] Динамические структуры данных