negpseudo

neg

pseudo
Asembler RISC-V Referencja

lyszt.net obejmuje neg i inne instrukcje RISC-V w większych szczegółach.

Opis

neg odwraca znak liczby: 5 staje się -5, a -5 staje się 5. Nazwa jest skrótem od negate. Poniższa forma umieszcza negację rejestru źródłowego rs w rejestrze docelowym rd.

neg rd, rs

neg jest pseudoinstrukcją. Asembler przepisuje pseudoinstrukcję, która jest czytelną nazwą, na jedną lub więcej rzeczywistych instrukcji, zanim procesor ją napotka. neg staje się poniższą instrukcją, która odejmuje liczbę od zero, specjalnego rejestru, który zawsze przechowuje 0.

sub rd, zero, rs

0 minus x równa się -x, więc to daje negację. RISC-V utrzymuje swój zestaw rzeczywistych instrukcji w niewielkim rozmiarze, ponownie wykorzystując odejmowanie i rejestr zerowy w ten sposób.

Zakres liczb ujemnych rozciąga się o jeden krok poza zakres dodatni. Sięga około -2,1 miliarda i tylko około +2,1 miliarda. Najbardziej ujemna liczba nie ma dodatniego odpowiednika, więc jej negacja zawija się i daje tę samą liczbę. Kod obliczający wartości bezwzględne musi uwzględniać ten przypadek.

Podręcznik RISC-V definiuje sub jako odejmowanie rs2 od rs1 i opisuje rejestr x0, nazywany tutaj zero, jako trwale podłączony do wartości, której wszystkie bity wynoszą 0. Odejmowanie wartości od x0 daje jej negację, co jest formą, w którą przekształca się neg.

Przykład neguje 5 do -5. W połączeniu z rozgałęzieniem, które pomija neg, gdy liczba jest już dodatnia, daje to zwykłą dwuinstrukcyjną wartość bezwzględną.

Rozwija się do

sub rd, zero, rs

Asembler zastępuje tę pseudoinstrukcję rzeczywistą instrukcją lub instrukcjami wymienionymi powyżej.

Przykład

li t0, 5
neg t1, t0       # t1 = -5