Практическое закрепление материала: домашние задания и семинары

Для уверенного закрепления материала в лекциях предусмотрены предусмотрены семинарские занятия по каждой теме, для которой имеется соответствующий инструмент (как правило, эмулятор соответствующей архитектуры или устройства). Задача семинара — заполнить базовые пробелы в знаниях и навыках студента и дать больше практики более активному студенту. Семинарские занятия не преследуют цели полностью закрывать лекционный материал, даже в практической части.

Семинар состоит из чередующихся активностей:

Более подробно см. описание методологии ведения практикума.

Семинары пронумерованы в соответствии с лекционным планом; темы, по которым практической поддержки нет или она оказалась бы слишком сложной, отмечены «×»

Не предполагается пересказывать на семинарах «теоретическую» часть лекций — видеозаписи находятся в открытом доступе.

  1. [2] Системы счисления и эмулятор учебных машин

    • {OK} Перевод между системами счисления

    • {i} Перевод между двоичным, десятичным и шестнадцатеричным представлением числа

    • {OK} Запись отрицательного числа в дополнительном коде в двоичном виде.

    • {i} Запись отрицательного числа в дополнительном коде в двоичном виде.

    • (!) эмулятор учебных машин

    • {OK} Установка и запуск эмулятора modelmachine

    • {i} Модификация простейшей программы для УМ3.

  2. [4] УМ-3: условия и циклы

    • (!) Система команд УМ3

    • {OK} Условие как переход вперёд

    • {i} Сравнение двух чисел

    • {i} Сравнение трёх чисел (вложенное условие)

    • {OK} Цикл как переход назад

    • {i} Таблица умножения в столбик

  3. [6] УМ-2 и УМ-1

    • (!) Система команд УМ2

    • {OK} Команды УМ2 и флаги для условного перехода

    • {i} Таблица умножения в столбик

    • (!) Система команд УМ1

    • {OK} Планирование вычислений для одноадресной ЭВМ

    • {i} Вычисление формулы

  4. ×
  5. [8] УМ-М и переменный размер команды

    • (!) Регистры и их назначение

    • {OK} Простой цикл для УМ-М

    • {i} Простой цикл для УМ-М

    • (!) Косвенная адресация и массивы

    • {OK} Обход массива

    • {i} Простейшая задача на модификацию массива

  6. ×
  7. [10] Система команд и ассемблер RISC-V

    • (!) Понятие языка ассемблера, работа с RARS, интерактивная помощь в RARS

    • {OK} Простейшая программа для RARS

    • {i} Сумма трёх чисел

    • {OK} Использование ecall

    • {i} Вdод, сумма и вывод трёх чисел

  8. [12] Работа с памятью

    • {OK} Хранение данных и строк

    • {i} Ввести, обработать, вывести числа диагностикой

    • {OK} Условный переход

    • {i} Неравенство треугольника

    • (!) Каноническая схема цикла

    • {OK} Цикл

    • {i} Таблица умножения в столбик

  9. [14] Массивы

    • (!) Косвенная адресация

    • {OK} Ввод и вывод массива

    • {i} Ввод, обработка и вывод массива

    • {OK} Работа с отладчиком в RARS; точки останова

    • {i} Вычислить формулу, посмотреть значения регистров посередине вычисления

    • {OK} Двумерные массивы: ввод и вывод

    • {i} Транспонирование матрицы

  10. [16] Концевые подпрограммы

    • {OK} call и ret; простейшая подпрограмма

    • {i} Формула с подпрограммой к качестве подформулы

    • (!) Конвенции по передаче параметров

    • {i} Подпрограмма с несколькими параметрами и двумя возвращаемыми значениями

  11. [18] Стек и универсальные подпрограммы

    • (!) Стек в RISC-V; понятие «локальной переменной»

    • {i} В цикле положить 10 значений на стек, потом снять и вывести их

    • (!) Конвенции по использованию регистров

    • {OK} Простейшая универсальная подпрограмма — сложение двух чисел

    • {i} Универсальная подпрограмма — сумма четырёх параметров с использованием подпрограммы, вычисляющей сложение

    • {OK} Использование стека для восстановления сохраняемых регистров

    • {i} Универсальная подпрограмма reduce, которая получает на вход адрес массива A, его длину n и адрес подпрограммы, реализующей бинарную операцию ζ (например, сложение или умножение). Подпрограмма возвращает A0 ζ A1 ζ … ζ An-1

      • Для хранения индекса массива или адреса элемента использовать сохраняемый регистр s1

  12. [20] Математический сопроцессор

    • (!) (коротко) Представление вещественных чисел по IEEE 754; нормализованная и денормализованная формы

    • {OK} RARS Floating Point Representation

    • (!) Система команд RISC-V FPU (расширение F)

    • {i} Написать программу, которая получает из числа в нормализованном представлении число в денормализованом представлении (путём деления на 4, например); убедиться в этом с помощью Floating Point Representation

    • (!) Конвенции по передаче параметров и использованию регистров

    • {OK} Универсальная подпрограмма с вычислением формулы; ввод и вывод вещественных чисел в RARS

    • {i} Универсальная подпрограмма с вычислением формулы

  13. [22] Макросы

    • (!) Макроподстановка и макровзрыв

    • {OK} Макроопределение и макроподстановка в программе, использование параметров

    • {i} Задание и использование макроса «вывод строки + числа в заданном формате» (строка передаётся в виде адреса, формат передаётся в виде номера ecall)

    • {OK} Локальное хранение констант (совмещение секций кода и данных) и метки в макросах

    • {i} Переписать предыдущий пример с передачей строки в виде строки

  14. [24] Математический сопроцессор (продолжение) и кадр стека

    • (!) Назначение кадра стека, регистр fp; конвенции по использованию кадра (кратко)

    • {OK} Универсальная подпрограмма с использованием кадра

    • {i} Трижды вызвать по цепочке одну подпрограмму с кадром из другой, пронаблюдать в памяти связный список кадров

    • {OK} Неатомарная операция сравнения; пример

    • {i} Неравенство треугольника (ввести три числа и проверить, можно ли построить треугольник с такими сторонами)

    • {OK} Управляющие регистры FPU и их использование: пример с флагом fcsr OF

    • {i} Ввести два числа, вывести их произведение и информацию, была ли потеряна точность (fcsr NX)

  15. [26] Статические структуры данных

    • (!) Косвенная индексация и адресная арифметика

    • {OK} Моделирование двумерных массивов: подпрограммы вывода двумерного массива по строкам и ввода по столбцам

    • {i} Написать подпрограмму rotate N addr0 addr1, которая поворачивает квадратную матрицу addr0 размером N×N на 90°, заполняя addr1. Вызвать её четырежды.

    • (!) Структура кольцевого буфера — очереди

    • {OK} Разбор реализации очереди из лекций

    • {i} Дописать к имеющейся реализации две подпрограммы — push_q, которая добавляет значение в голову очереди, и pop_q, которая снимает значение из хвоста очереди

  16. [28] Обработка исключений

    • (!) Регистры статуса и управления RISC-V; понятие исключения и обработчика

    • {OK} Разбор простейшего обработчика из лекций

    • {i} Написать простейший обработчик несуществующего внешнего вызова (ENVIRONMENT_CALL), который перегружает a0 в -1, а в противном случае — останавливает работу программы

    • {OK} Конвенция по сохранению контекста в обработчике: uscratch и память для регистров

    • {i} Написать «внешний вызов "счётчик"»: обработчик исключения ENVIRONMENT_CALL, который при a7 == 0x100 возвращает в a0 постоянно увеличивающееся на 1 число. В остальных исключениях останавливать выполнение.

  17. [30] Ввод/вывод: поллинг и MMIO

    • (!) Понятие MMIO

    • {OK} Цифровой блок RARS: сегментный индикатор

    • {i} Написать подпрограмму, которая выводит на цифровом индикаторе двузначное двоичное число в диапазоне от 0 до 3

    • {OK} Цифровой блок RARS: клавиатура

    • {i} Написать подпрограмму, которая возвращает число от 0 до 15, соответствующее клавише, нажатой на цифровой клавиатуре, иначе -1.

    • {OК} Графический дисплей RARS: подпрограмма рисования точки
    • {i} Написать подпрограмму рисования круга circle xcenter ycenter radius color (подсказка: перебрать все точки квадрата, и заполнить те, для которых (xcenter - x)2 + (ycenter - y)2 ⩽ radius2 ).

  18. [32] Прерывания по таймеру

  19. [34] Прерывания

  20. [36] Конвейер, кеш и предсказание перехода

  21. ×
  22. [38] Динамические структуры данных

LecturesCMC/ArchitectureAssemblerProject/Seminars (последним исправлял пользователь FrBrGeorge 2024-08-23 22:07:01)