Лабораторная работа №3. Опыты
Цель:
- познакомиться на практике с системами команд разных типов процессоров;
- познакомиться с устройством процессоров на уровне принципиальных схем.
Лабораторные работы проводят при помощи проекта wrench:
- находится на стадии Beta, поэтому могут быть баги, ошибки моделирования, отсутствие необходимых инструкций, и т.п.;
- инструкции по установке, использованию, примеры исходных кодов и конфигураций приведены в репозитории.
Содержание лабораторной работы:
- Реализация заданных вариантом алгоритмов на заданных архитектурах (см. документацию wrench):
- аккумуляторная архитектура
acc32,
- CISC архитектура
m68k,
- стековая архитектура
f32a,
- RISC архитектура
risc-iv-32.
- Подготовка принципиальной схемы заданной вариантом для одного из используемых процессоров.
- Защита реализованных алгоритмов (включая понимание архитектуры процессора, её достоинств и недостатков) и схемы.
Ваш вариант будет приведён в ведомости. Расшифровка варианта приведена в файле: variants.md, где приведён код на языке Python и набор тестов. Вам необходимо написать эквивалентные алгоритмы на заданной архитектуре с учётом следующих требований:
- Если ввод не соответствует области определения – вернуть
-1.
- Если результат не может быть корректно рассчитан (результат не может быть представлен в рамках машинного слова) – вернуть результат заполненный байтами со значениями
0xCC.
- Ввод должен подаваться через ячейку памяти
0x80.
- Вывод должен подаваться в ячейку памяти
0x84.
- Входное значение и результат по умолчанию — машинное слово в 32 бита, если не указано иное.
- Исходный код должен быть отформатирован (вручную или при помощи
wrench-fmt).
- Журнал работы не должен быть обрезан (используйте конфигурацию с пониманием).
- Требования, специфичные для ISA:
f32a: использовать процедуры;
risc-iv-32: использовать вложенных процедур, с целью демонстрации работы со стеком. Где применимо – рекомендуется рекурсивное решение задачи.
m68k: необходимо использовать различные режимы инструкций и способы адресации. Использовать вложенные процедуры и стек.
- При использовании процедур требуется выработать способ именования меток, помогающий видеть структуру кода.
Формат занятия (или его части), посвящённого данной лабораторной работе:
- Защита лабораторных работ.
- Когда все выполненные лабораторные работы завершены — классическая консультация, где преподаватель ответит на ваши и в случае необходимости свои вопросы.
Процедура сдачи лабораторной работы:
- Ваша реализация алгоритма и формата отчёта загружаются на сайт wrench.edu.swampbuds.me, где подвергается автоматическому тестированию.
- В случае успешного прохождения тестов – сохраните ссылку на страницу отчёта.
- Тестовые наборы и модели процессоров будут уточняться и дополняться в течение семестра. Будьте готовы, что ваша реализация может “сломаться”.
- Тестовые наборы и система симуляции могут содержать ошибки. В таком случае обращайтесь к преподавателю на лабораторных занятиях и консультациях, исправим.
- Приходите на лабораторное занятие со ссылками на алгоритмы. Проходите защиту.
- ВАЖНО: сохраняйте копии загруженных данных. В любой момент может потребоваться повторная загрузка.
Каждый алгоритм и схема сдаются отдельно. Если на занятии несколько учащихся – по одной за раз. Повторная сдача одного результата в течение дня запрещена.
Оценивание реализации алгоритмов:
8 баллов – успешная реализация алгоритма и достойные ответы на вопросы:
- объяснение алгоритма;
- объяснение инструкций;
- объяснение принципов формирования машинного кода из ассемблера;
- объяснение специфики системы команд процессора;
- и т.п.
5 баллов – успешная реализация алгоритма и частичные ответы на вопросы.
0 баллов – отсутствие реализации алгоритма и/или корректных ответов на вопросы.
Оценивание схемы:
8 баллов – корректное отображение схемы и достойные ответы на вопросы, включая возможную вариативность предложенной схемы и связанные с этим компромиссы.
7 баллов – корректное отображение схемы и достойные ответы на вопросы:
- объяснение принципов работы схемы и процессора;
- объяснение порядка выполнения той или иной инструкции данного процессора;
- объяснение принципов работы с памятью и регистрами, вводом/выводом;
- и т.п.
5 баллов – корректное отображение схемы и частичные ответы на вопросы. Демонстрация на элементах схемы специфики вашего варианта.
0 баллов – отсутствие корректной схемы и/или корректных ответов на вопросы.
ВАЖНО: оценка может быть снижена если:
- задание сдаётся многократно (что говорит об отсутствии должной подготовки);
- исходный код неконсистентен (стиль кодирования / документирования / комментирования).
Типовые вопросы для защиты:
- Что такое метка (label)?
- Откуда рассчитываются значения меток (label)?
- Как вывести в отчёте состояние регистра
Acc в hex формате?
- Назначение
alignment (неиспользуемый буфер в секции данных)?
acc32 Зачем определены дублирующиеся инструкции load_addr и load?
acc32 Переполнение и перенос. Overflow и Carry флаги, иные способы обработки.
acc32 Какие Load* операции можно выкинуть чтобы сохранить возможности процессора?
- Что такое Memory Mapped IO?
- Что будет, если процессор попытается прочитать инструкцию из адреса ввода-вывода?
- Что означает инструкция
...? Объясните что происходит в строках ....
- Как сократить объём машинного кода? Какие ограничения/проблемы это создаст?
risc-iv Что означает конструкция 0(t1)? Зачем она нужна?
risc-iv Почему для загрузки слова регистр нужно две инструкции?
f32a Почему в F32a удобно использовать процедуры?
f32a Extended arithmetic mode. Назначение и использование.
- Как бы вы итерировались по массиву слов? По массиву структур?
- Особенности кодирования инструкций, плотность кода, проблемы доступа.
- Как вы можете сократить объём машинного кода? Продемонстрируйте.
risc-iv Работа со стеком. Выделение памяти, передача данных в/из процедур.
schema Как будет выглядеть Nop и как он будет выполняться?
schema Как будет выглядеть Jmp и как он будет выполняться?
schema Как будет выглядеть Add и как он будет выполняться?
schema Как работает внутри регистровый файл?
schema Как работает внутри Memory Mapped I/O?
schema Есть ли регистры в Control Unit?
Чек лист перед защитой:
- Убедитесь, что код соответствует требованиям и работа оформлена правильно (в том числе ссылка и доступность схемы).
- Комментарии должны быть полезными. Ваш код должен оставаться читаемым.
- Вы должны понимать каждую строку кода и уметь объяснить, зачем она нужна.
- При сдаче работы по определённой архитектуре необходимо быть готовым отвечать по всем её инструкциям и особенностям, а не только по тем, что использовались в лабораторной.
- Будьте готовы объяснить, почему выбранное решение лучше альтернатив, и что будет при другом подходе.
- После фраз “я уже забыл”, “не знаю, т.к. по варианту мне не нужно было” и им подобных оценка будет снижена.
- Длительная задержка с ответом, посторонние шумы или печатание во время защиты считаются нарушением, работа может быть не принята.
- Если ваша работа имеет признаки нейронки или похожа на чью-то другую, возможно произвольное количество вопросов.
- Нарушение порядка (влезание без очереди, просьбы “дослать в лс”) фиксируются в журнале.
- При наличии ошибок или нарушений требований работа может быть не принята без объяснений.