negпсевдо

neg

псевдо
Асемблер RISC-V Посилання

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