blt

blt

RISC-V アセンブリ 参考

lyszt.netはbltおよびその他のRISC-V命令をより詳しく扱っています。

エンコーディング形式

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

説明

blt は 2 つの値を比較し、1 つ目が小さい場合に分岐します。beq と bne は代わりに等価性をテストします。この名前は branch if less than の略です。以下の形式は rs1 が rs2 より小さい場合にラベル付きの位置へジャンプし、そうでなければ次の命令へフォールスルーします。

blt rs1, rs2, label

beq のページでは、分岐、ラベル、およびジャンプの仕組みについて説明しています。

この比較では両方の値を符号付きとして扱うため、負の値も可能です。-1 は 0 より小さく、任意の負の数は任意の正の数より小さくなります。符号なし比較には別の命令 bltu を使用し、最上位ビットがセットされている値では両者の結果が一致しません。

カウントループは blt に依存しています。以下の行は、カウンタ t0 がその上限 t1 を下回っている間、繰り返します。

blt t0, t1, loop

カウンタが上限に達すると、分岐は行われずループは終了します。境界チェックも同じ命令を使用して、プログラムが値を使用する前にその値を最大値未満に保ちます。

RISC-V マニュアルは、blt と bltu が rs1 が rs2 より小さい場合に分岐し、それぞれ符号付きと符号なしで比較することを規定しています。また、bgt、bgtu、ble、bleu は blt、bltu、bge、bgeu のオペランドを逆にすることで合成できることも記しています。

RISC-V には branch if greater はありません。a が b より大きいかどうかをテストするには、比較を逆にして b が a より小さいかどうかをテストします。アセンブラはオペランドを自動的に入れ替える bgt の省略記法を提供しています。

例

li t0, 2
li t1, 5
blt t0, t1, done   # 2 < 5, so jump to 'done'