Опубликован: 19.01.2025 | Доступ: свободный | Студентов: 1 / 0 | Длительность: 02:34:00
Лекция 4:

Набор непривилегированных инструкций RISC-V

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >

Эта Лекция раскрывает основы непривилегированных целочисленных инструкций архитектуры RISC-V и содержит базовую информацию для написания программ на языке Assembler.

После освоения этой лекции вы должны быть способны:

  • понимать, что архитектура RISC-V определяется через набор инструкций и его расширения;
  • понимать принцип перевода команд на языке Assembler в машинный код;
  • знать основные категории целочисленных инструкций.

Набор непривилегированных инструкций RISC-V

Основной набор целочисленных инструкций

Набор непривилегированных инструкций архитектуры RISC-V описывает четыре базовые набора инструкций:

  1. RV32I (32-х битные целочисленные)
  2. RV32E (32-х битные встроенные)
  3. RV64I (64-х битные целочисленные)
  4. RV128I (128-х битные целочисленные)

Числа 32, 64, и 128 характеризуют размер регистра и адресного пространства. Например, 32-х битный регистр может хранить данные размером до 2^32 бит. Набор инструкций RV32I содержит всего 40 инструкций.

Расширения и именования

Любой процессор RISC-V поддерживает как минимум один базовый набор инструкций. Например, обозначение RV32I означает, что процессор поддерживает 32-х битный целочисленный набор команд. Распространены дальнейшие расширения базового набора инструкций. Тип расширения, который поддерживает процессор, указывается в качестве суффикса к базовой аббревиатуре набора инструкций. Распространены следующие расширения (таблица 3.1):

Таблица 3.1.
Сокращение Стандартное расширение
M целочисленные умножение и деление integer multiplication and division
A атомарные инструкции atomic instructions
F числа с плавающей запятой одинарной точности single-precision floating point
D числа с плавающей запятой двойной точности double-precision floating point
Q числа с плавающей запятой четверной точности quad-precision floating point
C сжатые инструкции compressed instructions
V векторные операции vector operations

Примеры:

  • микропроцессор, построенный на архитектуре RV32IMAC, поддерживает базовый набор 32-х битных инструкций (RV32I), целочисленные умножение и деление (M), атомарные инструкции (A) и сжатые инструкции (C).
  • микропроцессор, построенные на архитектуре RV64IMAFDC поддерживает базовый набор 64-х инструкций (RV64I), целочисленные умножение и деление(M), атомарные инструкции (A), числа с плавающей запятой одинарной (F) и двойной точности (D), а также сжатые инструкции (C).
  • иногда можно встретить микропроцессоры, для которых полная информация зашита внутри процессора и может быть прочитана только после чтения специального регистра. В этом случае суффиксы будут оканчиваться на SU, например, RV64IMAFDCSU. Такое обозначение означает, что процессор поддерживает режим супервизора (S) и пользовательский режим (U).
Регистры RISC-V

Базовый набор инструкций определяет наличие 32 регистров и программного счётчика. Регистры именуются от x0 до x31. Размер регистра соответствует размеру базовых инструкций, например, для процессора RV32I размер каждого из регистров будет составлять 32 бита. Регистр x0 хранит значение 0, которое нельзя поменять.

Расширения предоставляют большее число регистров. Например, расширения, связанные с вычислениями с плавающей запятой, предоставляют дополнительные регистры работы с дробной арифметикой.

Использование регистров языками более высокого уровня, чем Assembler, определяется бинарным интерфейсом для приложений (application binary interface, ABI). Этот интерфейс определяет то, как регистры должны использоваться в процессе трансляции программы компилятором из описания на высокоуровневом языке в машинный код. ABI предписывает использование дополнительных имён регистров и их назначение ( Табл.3.2):

Таблица 3.2.
Регистр Имя ABI Описание
x0 zero Константный ноль Zero constant
x1 ra Адрес возврата Return address
x2 sp Указатель на область стека Stack pointer
x3 gp Глобальный указатель Global pointer
x4 tp Указатель потока Thread pointer
x5-x7 t0-t2 Временные значения Temporaries
x8 s0 / fp Сохраняемый регистр / Указатель на фрейм Saved / Frame pointer
x9 s1 Сохраняемый регистр Saved register
x10-x11 a0-a1 Аргументы функций и возвращаемые значения Function args. / return values
x12-x17 a2-a7 Аргументы функций Function arguments
x18-x27 s2-s11 Сохраняемые регистры Saved registers
x28-x31 t3-t6 Временные значения Temporaries
Pc - Программный счётчик Program counter

Архитектура RISC-V предполагает выполнение арифметических операций через регистры: для модификации данных, находящихся в памяти, необходимо загрузить данные из памяти в один из регистров, выполнить операцию над данными, и переместить результат из регистра обратно в память.

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >