seqzPseudoelement

seqz

Pseudoelement
RISC-V Assembler Referenz

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

Beschreibung

seqz prüft, ob ein Register null enthält. Der Name bedeutet "set if equal to zero" (setzen, wenn gleich null). Wenn das Quellregister rs null ist, schreibt die untenstehende Form eine 1 in das Zielregister rd und eine 0, wenn rs einen anderen Wert enthält.

seqz rd, rs

Die Ausgabe ist 1 oder 0 und beantwortet die Frage, ob der Wert null ist.

seqz ist eine Pseudoinstruktion: ein lesbarer Name, den der Assembler in eine echte Instruktion umschreibt. Das Ergebnis ist die untenstehende Instruktion, die fragt, ob der Wert kleiner als 1 ist.

sltiu rd, rs, 1

Unter den vorzeichenlosen Zahlen ist 0 der einzige Wert kleiner als 1. Man schreibt seqz, und der Assembler führt die Übersetzung durch.

Keine RISC-V-Instruktion fragt, ob zwei Werte gleich sind, daher wird seqz verwendet, um Gleichheitstests zu erstellen. Verknüpfe die beiden Werte mit XOR, was null ergibt, wenn sie übereinstimmen, und ein von null verschiedenes Ergebnis, wenn sie sich unterscheiden, und wende dann seqz auf dieses Ergebnis an. Eine 1 bedeutet, dass die Originale gleich waren. Die Seite xor erklärt, warum XOR Gleichheit erkennt.

Das RISC-V-Handbuch definiert seqz als eine Assembler-Pseudoinstruktion für sltiu mit der Konstante 1, die rd auf 1 setzt, wenn rs1 gleich null ist, und andernfalls auf 0.

seqz kehrt auch den Sinn eines Wahr- oder Falschwerts um. Ein Register mit 0 wird zu 1, und jeder von null verschiedene Wert wird zu 0. Die Antwort ist eine gewöhnliche Zahl, sodass sie in weitere Arithmetik einfließen kann, zum Beispiel durch Multiplikation damit, um einen Wert bedingt auf null zu setzen. Ihr Gegenstück ist snez, das auf einen von null verschiedenen Wert prüft.

Wird erweitert zu

sltiu rd, rs, 1

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

Beispiel

li t0, 0
seqz t1, t0       # t1 = 1