addi
lyszt.net охоплює addi та інші інструкції RISC-V більш детально.
Формат кодування
Опис
addi додає константу до регістра. Назва означає add immediate (додати безпосереднє значення). Безпосереднє значення — це константа, записана в самій інструкції, а не прочитана з регістра. Використовуйте її, коли одне з чисел фіксоване під час написання програми, наприклад під час додавання 1 до лічильника.
Форму addi показано нижче. Вона читає значення з вихідного регістра rs1, додає константу imm і записує результат у регістр призначення rd.
addi rd, rs1, imm
Наступний рядок читає t0, додає одиницю й записує результат назад, тож t0 = t0 + 1.
addi t0, t0, 1
Константа займає 12 бітів і є знаковою, що дає діапазон від -2048 до 2047. Асемблер відхиляє більші значення. Для більшої константи спершу завантажте її в регістр за допомогою li. Від'ємна константа змушує addi також віднімати, тому в RISC-V немає окремої інструкції віднімання безпосереднього значення. Наступний рядок веде відлік униз.
addi t0, t0, -1
Посібник RISC-V називає константу 12-бітовим безпосереднім значенням із розширенням знака. У ньому зазначено, що арифметичне переповнення ігнорується, тому результат зберігає лише свої молодші XLEN бітів, де XLEN — ширина регістра в бітах, тут 32. Коли знак константи відомий, одна гілка після додавання перевіряє знакове переповнення. Два рядки нижче обробляють поширений випадок додавання додатної константи.
addi t0, t1, +imm blt t0, t1, overflow
Програми використовують addi для лічильників, для переміщення вказівника до наступного елемента та для резервування місця в стеку. Приклад додає 1, щоб просунути лічильник, і додає -16, щоб зарезервувати 16 байтів робочої пам'яті, — так зазвичай починається функція, якій потрібен робочий простір.
Приклад
addi t0, t0, 1 # t0++ addi sp, sp, -16 # reserve 16 bytes of stack
Посилання
- [1]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4.1, Integer Register-Immediate Instructions, pages 28 to 29.
- [2]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4, Integer Computational Instructions, page 27.
