blt
lyszt.net behandelt blt und andere RISC-V-Befehle ausführlicher.
Kodierungsformat
Beschreibung
blt vergleicht zwei Werte und verzweigt, wenn der erste kleiner ist. beq und bne prüfen stattdessen auf Gleichheit. Der Name steht für branch if less than (verzweige, wenn kleiner als). Die folgende Form springt zur beschrifteten Position, wenn rs1 kleiner als rs2 ist, und fällt andernfalls zur nächsten Anweisung durch.
blt rs1, rs2, label
Die Seite beq erklärt Verzweigungen, Labels und wie ein Sprung funktioniert.
Der Vergleich behandelt beide Werte als vorzeichenbehaftet, sie können also negativ sein. -1 ist kleiner als 0, und jede negative Zahl ist kleiner als jede positive. Vorzeichenlose Vergleiche verwenden eine separate Anweisung, bltu, und die beiden unterscheiden sich bei jedem Wert, dessen höchstes Bit gesetzt ist.
Zählschleifen verlassen sich auf blt. Die folgende Zeile wiederholt sich, solange der Zähler t0 unter seinem Grenzwert t1 bleibt.
blt t0, t1, loop
Sobald der Zähler den Grenzwert erreicht, wird die Verzweigung nicht genommen und die Schleife endet. Bereichsprüfungen verwenden dieselbe Anweisung, um einen Wert unter einem Maximum zu halten, bevor das Programm ihn verwendet.
Das RISC-V-Handbuch legt fest, dass blt und bltu die Verzweigung nehmen, wenn rs1 kleiner als rs2 ist, wobei sie jeweils vorzeichenbehaftet und vorzeichenlos vergleichen. Es merkt außerdem an, dass bgt, bgtu, ble und bleu synthetisiert werden können, indem man die Operanden von blt, bltu, bge und bgeu vertauscht.
RISC-V bietet keine Verzweigung bei größer. Um zu prüfen, ob a größer als b ist, kehre den Vergleich um und prüfe, ob b kleiner als a ist. Der Assembler bietet eine bgt-Kurzform, die die Operanden für dich vertauscht.
Beispiel
li t0, 2 li t1, 5 blt t0, t1, done # 2 < 5, so jump to 'done'
