Навигатор
My RISC-V home
Инструкции
базового набора
RV64I
(дополняет
RV32I):
арифметические
сдвиги
загрузки
сохранения
См. также
|
Инструкция ADDIW
ADDIW rd, rs1, imm
Набор команд: базовый RV64I
Формат: I
Операнды: rd и rs1 – регистры, imm – 12-битная константа (со знаком!)
Действие: у суммы rs1+imm старшие биты 32-63 заполняются значением из бита 31 (биты нумеруются справа налево с 0), т.е. фактически формируется 32-битное число с расширением знака; полученный таким способом результат сохраняется в rd.
Примечания
- Перед сложением у константы imm производится расширение знака.
- Имеется разновидность операции сложения ADDW, у которой вместо константы imm используется содержимое регистра.
Пример 1
Инструкция ADDIW x31, x7, 6 прибавляет к содержимому регистра x7 число 6, а затем результат, преобразованный по описанным выше правилам, помещает в x31.
Код инструкции содержит следующие поля:
поле | разрядность | содержимое | примечание |
imm | 12 битов | 000000000110 | 6 |
rs1 | 5 битов | 00111 | x7 |
func3 | 3 бита | 000 |
всегда |
rd | 5 битов | 11111 | x31 |
opcode | 7 битов | 0011011 |
всегда |
Итоговый код
000000000110 00111 000 11111 00110112 = 00 63 8F 9B16
Пример 2
Инструкция ADDIW x31, x7, 0 расширяет знак младших 32 битов регистра x7 (32-битового слова) и записывает 64-битовый результат в x31 . Для операции такого вида в ассемблере вводится псевдоинструкция sext.w x31, x7 . Сокращение: sext.w = sign-extend word.
Например, если x7 = 7000 0000 8000 000016, то результат будет FFFF FFFF 8000 0000. Заметим, что старшие биты исходного значения x7 на результат никак не влияют.
|