slt

slt

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

lyszt.net охоплює slt та інші інструкції 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

Опис

slt порівнює два числа й зберігає результат як 1 або 0. Назва означає set less than (встановити, якщо менше). Наведена нижче форма перевіряє, чи rs1 менше за rs2. Якщо перевірка успішна, інструкція записує 1 в регістр призначення rd. Якщо вона не проходить, записується 0.

slt rd, rs1, rs2

Порівняння можна використовувати двома способами. Інструкція розгалуження виконує перехід на його основі. Або відповідь так чи ні можна зберегти як число, 1 для істини та 0 для хиби, і використати пізніше. slt виконує збереження. Асемблер представляє істину та хибу збереженими 1 або 0, і це значення можна додавати, маскувати чи комбінувати як будь-яке інше число.

Порівняння розглядає значення як знакові, тому вони можуть бути від'ємними, і -1 вважається меншим за 0. Пов'язана інструкція sltu розглядає їх як беззнакові, що змінює відповідь для великих значень і для значень, які виглядають від'ємними.

Посібник RISC-V описує slt і sltu як знакове та беззнакове порівняння, які записують 1 у rd, якщо rs1 менше за rs2, і 0 в іншому разі. Він також використовує slt у перевірці переповнення для загального знакового додавання. Після додавання другий рядок нижче фіксує, чи другий операнд від'ємний, третій рядок фіксує, чи сума менша за перший операнд, а останній рядок виконує перехід, коли дві відповіді різняться.

add t0, t1, t2
slti t3, t2, 0
slt t4, t0, t1
bne t3, t4, overflow

Обґрунтування полягає в тому, що сума має бути меншою за один операнд лише тоді, коли інший операнд від'ємний.

Інструкції set greater than не існує. Щоб перевірити, чи a більше за b, поміняйте операнди місцями й запитайте, чи b менше за a. У прикладі порівнюються 3 і 9. Оскільки 3 менше за 9, t2 встановлюється в 1.

Приклад

li t0, 3
li t1, 9
slt t2, t0, t1   # t2 = 1