add
lyszt.net охватывает add и другие инструкции RISC-V более подробно.
Формат кодирования
Описание
add складывает значения в двух регистрах и сохраняет результат в третьем. Регистр — это небольшой слот внутри процессора, который хранит одно 32-битное число. RISC-V предоставляет 32 регистра. Бит — это один 0 или 1, а 32 бита охватывают целые числа от 0 примерно до четырёх миллиардов. Арифметика выполняется между регистрами и никогда не обращается к памяти напрямую.
add имеет приведённую ниже форму, и результат равен rd = rs1 + rs2. rd — это регистр назначения, куда попадает ответ. rs1 и rs2 — это исходные регистры, и их значения остаются прежними.
add rd, rs1, rs2
Регистр назначения может также служить источником. Следующая строка прибавляет t1 к t0 и помещает результат обратно в t0. Накопительные суммы в циклах используют эту форму.
add t0, t0, t1
Регистр хранит не более 32 бит. Когда сумма превышает наибольшее значение, которое может хранить регистр, результат заворачивается в небольшое число, подобно тому как 24-часовые часы переходят с 23:59 обратно на 00:00. Это переполнение, и RISC-V не выдаёт никакого предупреждения, когда оно происходит.
Руководство RISC-V утверждает, что ни одна целочисленная вычислительная инструкция не вызывает арифметического исключения и что базовый набор инструкций не содержит проверок переполнения, поскольку ветвления справляются с этой задачей с низкими затратами. Для беззнакового сложения достаточно одного ветвления после add. В двух приведённых ниже строках ветвление переходит к метке overflow, когда сумма меньше операнда, что происходит только в случае заворачивания суммы.
add t0, t1, t2 bltu t0, t1, overflow
В примере первые две строки используют li (load immediate), чтобы поместить константы 3 и 4 в t0 и t1. Затем строка add оставляет 7 в t2.
Пример
li t0, 3 li t1, 4 add t2, t0, t1 # t2 = 7
Ссылки
- [1]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4, Integer Computational Instructions, page 27.
- [2]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4.2, Integer Register-Register Instructions, page 29.
