snezPseudoelement

snez

Pseudoelement
RISC-V Assembler Referenz

lyszt.net behandelt snez und andere RISC-V-Befehle ausführlicher.

Beschreibung

snez prüft, ob ein Register einen von null verschiedenen Wert enthält, die Umkehrung von seqz. Der Name bedeutet „set if not equal to zero“ (setzen, wenn ungleich null). Wenn rs ungleich null ist, schreibt die folgende Form eine 1 in rd, und wenn rs null ist, schreibt sie eine 0.

snez rd, rs

snez ist eine Pseudoinstruktion, wie seqz, und der Assembler erweitert sie zu einer echten Instruktion. Diese Instruktion fragt, ob null kleiner als der Wert ist.

sltu rd, zero, rs

Dies gilt für jeden Wert außer null. Der Assembler führt die Übersetzung durch, wenn Sie snez schreiben.

Eine Berechnung erzeugt oft einen Wert, dessen einzige nützliche Eigenschaft ist, ob er null ist, wie etwa eine Anzahl verbleibender Elemente, die Differenz zwischen zwei Dingen oder eine Gruppe von Flags. snez reduziert diesen Wert auf 1, wenn er ungleich null ist, und auf 0, wenn er null ist, die Standardform für eine Funktion, die eine Ja-oder-Nein-Antwort zurückgibt.

Das RISC-V-Handbuch definiert snez als eine Assembler-Pseudoinstruktion für sltu mit x0 als erster Quelle. Sie setzt rd auf 1, wenn rs2 ungleich null ist, und andernfalls auf 0.

snez arbeitet mit XOR, um Ungleichheit zu testen. Verknüpfen Sie die beiden Werte mit XOR, was nur dann ein von null verschiedenes Ergebnis liefert, wenn sie sich unterscheiden, und wenden Sie dann snez an, um eine 1 zu erhalten, wenn sie verschieden sind. Zusammen mit seqz ergibt dies ein Wahr-oder-Falsch-Ergebnis für gleich und für ungleich, das Sie mit and und or zu größeren Bedingungen ohne Sprung kombinieren können.

Wird erweitert zu

sltu rd, zero, rs

Der Assembler ersetzt diese Pseudoanweisung durch die oben aufgeführte(n) echte(n) Anweisung(en).

Beispiel

li t0, 5
snez t1, t0       # t1 = 1