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.
