neg
псевдоlyszt.net охоплює neg та інші інструкції RISC-V більш детально.
Опис
neg змінює знак числа: 5 стає -5, а -5 стає 5. Назва скорочує negate. Наведена нижче форма поміщає заперечення вихідного регістра rs у регістр призначення rd.
neg rd, rs
neg — це псевдоінструкція. Асемблер переписує псевдоінструкцію, яка є читабельним ім'ям, в одну або кілька реальних інструкцій до того, як процесор з нею зіткнеться. neg стає наведеною нижче інструкцією, яка віднімає число від zero, спеціального регістра, який завжди містить 0.
sub rd, zero, rs
0 мінус x дорівнює -x, тому це дає заперечення. RISC-V зберігає свій набір реальних інструкцій невеликим, повторно використовуючи віднімання та нульовий регістр у такий спосіб.
Діапазон від'ємних чисел простягається на один крок далі за додатний діапазон. Він сягає приблизно -2,1 мільярда і лише приблизно +2,1 мільярда. Найбільш від'ємне число не має додатного відповідника, тому його заперечення зациклюється і дає те саме число. Код, що обчислює абсолютні значення, повинен враховувати цей випадок.
Посібник RISC-V визначає sub як віднімання rs2 від rs1 і описує регістр x0, який тут називається zero, як жорстко заданий на значення, всі біти якого дорівнюють 0. Віднімання значення від x0 дає його заперечення, що і є формою, у яку перетворюється neg.
Приклад перетворює 5 на -5. У поєднанні з розгалуженням, яке пропускає neg, коли число вже додатне, це дає звичайне абсолютне значення з двох інструкцій.
Розгортається до
sub rd, zero, rs
Асемблер замінює цю псевдоінструкцію реальною інструкцією або інструкціями, переліченими вище.
Приклад
li t0, 5 neg t1, t0 # t1 = -5
Посилання
- [1]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.
- [2]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.1, Programmers' Model for Base Integer ISA, page 23.
