Современная электроника №3/2026
ИНЖЕНЕРНЫЕ РЕШЕНИЯ 19 WWW.CTA.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА • № 3 / 2026 знака в операциях над регистрами невозможно. Аналогичным образом устроена система команд в RISC-архитектуре PowerPC [2]. А вот в компьютере SPARC, чтобы избежать учета влия- ния знака, принята другая хитрость [17]. Там константа для задания стар- шей («верхней») части регистра содержит 22 бита, а младшая – 13. Нетрудно видеть, что 22 + 13 > 32, т.е. имеет место запас, который позволяет при задании младшей части вообще не пользоваться зна- ковым битом. Посмотрим теперь, как формируют- ся константы в RISC-V. Константа в RISC-V: постановка задачи Будем рассматривать базовую архи- тектуру стандарта RISC-V , которая маркируется как RV32I: набор RISC-V инструкций для работы с 32-битными целочисленными данными. Регистры для таких данных, что очевидно, тоже будут иметь разрядность 32 бита . Система команд стандарта постро- ена так, что многие инструкции име- ют вариант, оперирующий с непо- средственной константой. Возьмём для примера часто используемую инструкцию сложения с константой ADDI ( Add I mmediate): ADDI x7, x6, 8. Она прибавляет к числу из регистра x6 константу 8 и результат помещает в регистр x7 (т.е. x7 = x6 + 8). Соглас- но стандарту под хранение непосред- ственного операнда в любой команде выделяется 12 бит . Общее количество возможных значений, таким образом, 2 12 = 4096. Из них ровно половина – отрицательные числа. Учитывая, что есть нулевое значение, окончатель- но имеем диапазон от –2048 до 2047 включительно. Итак, в регистре 32 бита, а в кон- станте – 12. Для заполнения 20 стар- ших бит в системе команд RISC-V предусмотрена специальная инструк- ция LUI . Она загружает ( L oad) в верх- нюю ( U pper) часть регистра констан- ту, входящую непосредственно в код команды ( I mmediate). Константа как раз имеет размер 20 бит. Младшие 12 бит при записи в регистр гаран- тированно обнуляются. Например, инструкция LUI x31, 1 занесёт в регистр x31 число 1000 16 = = 4096. Объединяя LUI с ADDI , можно обе- спечить доступ ко всем 20 + 12 = = 32 битам регистров. Сразу подчер- кнём, что наличие отрицательных значений осложняет картину. Но об этом немного позже. Для удобства обсуждения введём обозначения. Полную 32-битную кон- станту, значение которой мы будем формировать в регистре, обозначим C . Она образуется из двух неодинаковых по размеру частей. Старшие 20 бит (здесь и далее будем использовать полное обозначение Ch 20 , или про- сто Ch ) задаются с помощью команды LUI , а младшие 12 ( Cl 12 , или Cl ) при- бавляются посредством ADDI . Для большей наглядности процесс фор- мирования константы в RISC-V изо- бражён на рис. 1. Будем пользоваться стандартной нумерацией бит справа налево, начи- ная с нуля. Тогда Cl 12 состоит из бит с 11-го по 0-й, а Ch 20 содержит биты константы с 31-го по 12-й. Формаль- но можно считать, что знак Cl 12 опре- деляется 11-м битом константы. При расширении знака слагаемого значе- ние этого бита заносится во все биты 31–12. Далее ради наглядности будем писать шестнадцатеричные значе- ния констант, подчёркивая основание системы счисления обозначением h после них. Например, 10h. Примечание . Это не совсем по стан- дарту ассемблера, но попытки исполь- зовать общепринятую запись 0x10 делают инструкции RISC-V, где реги- стры тоже маркируются буквой x , плохо читаемыми: имена регистров трудно отличать от констант. Варианты задания констант: примеры Особенности формирования кон- стант в RISC-V отчётливо видны на примерах. Пример 2 Пусть требуется занести в регистр x6 положительное значение, не пре- вышающее 7FFh, например, 20h. Оче- видно, что для размещения данного небольшого числа в Cl 12 вполне доста- точно бит, поэтому хватает одной инструкции: ADDI x6, x0, 20h. В RISC-V содержимое x0 всегда гаран- тированно равно 0, так что результат получается 0+20 = 20h. Вычисленная константа будет записана в x6. Мы знаем, что Cl 12 определяет 12 младших бит числа. Старшие биты определяются по правилу расшире- ния знака, которое было сформули- ровано выше. В нашем случае число положительно, поскольку его 11-й бит нулевой, следовательно, все 20 старших бит регистра x6 автомати- чески обнулятся и получится полно- Рис. 1. Формирование константы из двух частей Рис. 2. Влияние расширения знака на формирование константы
RkJQdWJsaXNoZXIy MTQ4NjUy