slti
lyszt.netはsltiおよびその他の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
説明
slti はレジスタと定数を比較し、1 または 0 をデスティネーションに書き込みます。これは slt(2 つのレジスタを比較し、結果を数値として格納する。そのページを参照)の即値版であり、2 番目の値が即値として与えられます。即値とは命令にエンコードされた定数のことで、名前の i はそれを示しています。
slti の形式を以下に示します。rs1 の値が定数 imm より小さい場合、rd は 1 を受け取り、それ以外の場合は 0 を受け取ります。
slti rd, rs1, imm
比較は符号付きで行われるため、レジスタと定数はどちらも負になり得る数値として読み取られます。
事前にわかっている固定のしきい値と変数を比較するのに使用します。インデックスが 10 未満かどうか、あるいは値が制限を下回ったかどうかを確認するには、slti が 1 つあれば済みます。次の行は t0 がゼロより小さいかどうかを問い合わせるもので、負の値を検査し、負の値なら t1 に 1 を、それ以外なら 0 を設定します。
slti t1, t0, 0
RISC-V のマニュアルによると、slti は rs1 と符号拡張された即値をどちらも符号付き数値として扱ったとき、rs1 が即値より小さければ rd に 1 を、それ以外なら 0 を格納します。一般的な符号付き加算のオーバーフロー検査では、slt のページに示されているように、オペランドが負かどうかを記録するためにこれが使われます。
定数の範囲は -2048 から 2047 です。より大きな値と比較するには、li で定数をレジスタにロードし、slt を使用します。アセンブラは範囲外の定数をエラーメッセージとともに拒否します。
例
li t0, 3 slti t1, t0, 5 # t1 = 1 (3 < 5)
電子
- [1]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4.1, Integer Register-Immediate Instructions, pages 28 to 29.
- [2]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4, Integer Computational Instructions, page 27.
