О курсе
Общие сведения
Введение в курс
Этот курс предназначен для базового понимания применения языка программирования Assembler при работе с микропроцессорами архитектуры RISC-V. Понимание и способность писать программы на языке Assembler очень важны для программистов, работающих с "железом" на низком уровне. Основы языка Assembler помогают в понимании и реализации частей операционных систем и компиляторов. Задачи вроде отладки и обнаружения критичных с точки зрения производительности участков кода проще решать, обладая базовыми знаниями языка Assembler.
Содержимое курса покрывает такие темы, как инструкции процессора RISC-V (RV32I, RV64I), псевдо-инструкции и директивы языка Assembler, интерфейс для написания программ (application programming interface, API), взаимодействие с программами, написанными на языке программирования C и понимание принципов дизассемблирования бинарного кода. Также рассматриваются идея и основные моменты, связанные с расширениями команд.
Основной задачей курса является предоставление информации, необходимой для выполнения поставленных задач, связанных с программированием, и получение практики программирования на языке Assembler на основе предоставляемых примеров. Они затрагивают такие вопросы, как циклы, условные операторы, функции и другие.
Показываются примеры запуска разрабатываемых программ на базе ОС Linux, работающей на процессоре RISC-V. По окончании этого курса вы получите достаточно глубокое понимание архитектуры инструкций процессора RISC-V и получите знания, необходимые для программирования на языке Assembler для конкретных аппаратных средств.
Цели обучения на курсе
В конце этого курса вы должны будете:
- разбираться в наборе инструментов программирования для RISC-V;
- получить понимание архитектуры инструкций процессора RISC-V;
- научиться программировать под RISC-V на языке Assembler на базовом уровне;
- уметь реализовывать программный код и запускать его под ОС Linux на RISC-V;
- понимать механизмы дизассемблирования и отладки программного кода.
Прежде, чем мы начнём
Прежде, чем окунуться в дисциплину, мы настоятельно рекомендуем ознакомиться с её содержанием. Оно предоставляет наиболее важную информацию о курсе включая:
- обзор содержимого курса;
- входные требования для освоения дисциплины;
- цели изучения курса;
- тайминги освоения курса;
- и многие другие
Необходимые знания
Для успешного прохождения курса необходимо обладать базовыми знаниями в области программирования.
Структура курса
Лекция 1 посвящена обсуждению связи архитектуры RISC-V с языком Assembler, а также специфическим характеристикам языка.
В Лекции 2 рассматривается установка и использование ряда симуляторов и эмуляторов, а также обсуждается применение набора инструментов GNU toolchain для разработки приложений.
Лекция 3 рассматривает базовые инструкции и расширения RISC-V, принцип кодирования инструкций языка Assembler в машинный код, основные категории базовых целочисленных инструкций.
В Лекции 4 рассматривается применение меток, директив языка и псевдоинструкций, а также то, как реализовать управление работой программы и зачем использовать бинарный интерфейс приложения (ABI).
В Лекции 5 рассматривается написание программ на языке Assembler с использованием системных вызовов и библиотек C.
Лекция 6 рассматривает реализацию простейших структур данных и использование функций malloc и free - функций библиотеки C для выделения и освобождения оперативной памяти. Также обсуждается написание программ с использованием чисел с плавающей запятой.
Отказ от ответственности
Данный материал является переводом и адаптацией учебного курса "Foundations of RISC-V Assembly Programming" под авторством Маттиаса Кёнига (Matthias Koenig), расположенного по адресу: https://training.linuxfoundation.org/training/foundations-of-risc-v-assembly-programming-lfd117x/ и распространяемого под лицензией CC BY 4.0. Перевод и адаптация выполнены Дмитрием Булахом, НИУ МИЭТ по заказу Альянса RISC-V, допускается к использованию под лицензией CC BY 4.0.