neg
pseudolyszt.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
Odwołania
- [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.
