neg
Pseudoelementlyszt.net behandelt neg und andere RISC-V-Befehle ausführlicher.
Beschreibung
neg kehrt das Vorzeichen einer Zahl um: Aus 5 wird -5, und aus -5 wird 5. Der Name ist die Kurzform von negate. Die folgende Form legt die Negation des Quellregisters rs in das Zielregister rd.
neg rd, rs
neg ist eine Pseudoinstruktion. Ein Assembler schreibt eine Pseudoinstruktion, also einen lesbaren Namen, in eine oder mehrere echte Instruktionen um, bevor der Prozessor sie antrifft. neg wird zur folgenden Instruktion, die die Zahl von zero subtrahiert, dem speziellen Register, das immer 0 enthält.
sub rd, zero, rs
0 minus x ergibt -x, also erzeugt dies die Negation. RISC-V hält seine Menge echter Instruktionen klein, indem es die Subtraktion und das Nullregister auf diese Weise wiederverwendet.
Der Bereich der negativen Zahlen reicht einen Schritt über den positiven Bereich hinaus. Er erreicht etwa -2,1 Milliarden und nur etwa +2,1 Milliarden. Die negativste Zahl hat kein positives Gegenstück, sodass ihre Negation umläuft und dieselbe Zahl ergibt. Code, der Absolutwerte berechnet, muss diesen Fall berücksichtigen.
Das RISC-V-Handbuch definiert sub als die Subtraktion von rs2 von rs1 und beschreibt das Register x0, hier zero genannt, als fest auf einen Wert verdrahtet, dessen Bits alle 0 sind. Die Subtraktion eines Werts von x0 erzeugt dessen Negation, was die Form ist, die neg annimmt.
Das Beispiel negiert 5 zu -5. In Kombination mit einem Sprung, der neg überspringt, wenn die Zahl bereits positiv ist, ergibt sich der übliche Absolutwert aus zwei Instruktionen.
Wird erweitert zu
sub rd, zero, rs
Der Assembler ersetzt diese Pseudoanweisung durch die oben aufgeführte(n) echte(n) Anweisung(en).
Beispiel
li t0, 5 neg t1, t0 # t1 = -5
Referenzen
- [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.
