sltu

sltu

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

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

Опис

sltu встановлює регістр призначення в 1 або 0, як slt, і порівнює два числа як беззнакові значення. Назва означає set less than, unsigned. Сторінка slt описує збереження результату порівняння як 1 або 0.

Ті самі 32 біти можна прочитати як число зі знаком, де старший біт означає від'ємне значення, а діапазон становить приблизно від -2 мільярдів до +2 мільярдів, або як беззнакове число, без від'ємних значень і з діапазоном від 0 до приблизно 4 мільярдів. slt читає значення зі знаком, а sltu — беззнакове. Регістр, усі біти якого встановлені в 1, для slt дорівнює -1, а для sltu — найбільшому можливому значенню, тому дві інструкції можуть розходитися на однакових вхідних даних.

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

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

sltu rd, x0, rs2

Форму sltu показано нижче.

sltu rd, rs1, rs2

В особливому випадку нижче rd стає 1 щоразу, коли rs є чимось іншим, ніж нуль, оскільки 0 менше за будь-яке інше беззнакове значення. Це зводить будь-яке число до 1 або 0.

sltu rd, zero, rs

Приклад

li t0, -1
li t1, 1
sltu t2, t0, t1   # t2 = 0 (t0 read as unsigned is huge)