slti

slti

Асемблер RISC-V Посилання

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, який порівнює два регістри й зберігає результат як число (див. ту сторінку), але з другим значенням, поданим як безпосереднє значення. Безпосереднє значення — це константа, закодована в інструкції, і літера i в назві це позначає.

Форму slti показано нижче. Коли значення в rs1 менше за константу imm, rd отримує 1, інакше 0.

slti rd, rs1, imm

Порівняння знакове, тому і регістр, і константа читаються як числа, які можуть бути від’ємними.

Використовуйте її, щоб порівняти змінну з фіксованим порогом, відомим заздалегідь. Перевірка того, чи індекс менший за 10 або чи значення впало нижче межі, потребує однієї slti. Наступний рядок запитує, чи t0 менше за нуль, що перевіряє від’ємне значення й установлює t1 у 1 для від’ємних значень і в 0 в іншому разі.

slti t1, t0, 0

Посібник RISC-V каже, що slti поміщає 1 в rd, якщо rs1 менше за безпосереднє значення, розширене зі знаком, коли обидва розглядаються як знакові числа, і 0 в іншому разі. Перевірка переповнення для загального знакового додавання використовує її, як показано на сторінці slt, щоб записати, чи операнд є від’ємним.

Константа лежить у діапазоні від -2048 до 2047. Щоб порівняти з більшим значенням, завантажте константу в регістр за допомогою li й використайте slt. Асемблер відхиляє константу поза діапазоном із повідомленням про помилку.

Приклад

li t0, 3
slti t1, t0, 5   # t1 = 1 (3 < 5)