srai

srai

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

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

Опис

srai зсуває біти вправо на фіксовану величину та копіює знаковий біт в звільнені верхні позиції, що зберігає від'ємні числа від'ємними. Це форма sra зі сталою величиною, тому заповнення зберігає знак. Літера i означає immediate (безпосередній) — константу, закодовану в інструкції.

Синтаксис srai наведено нижче, де amount — константа від 0 до 31.

srai rd, rs1, amount

Зсув вправо на одну позицію зменшує число вдвічі та залишає знак без змін, тому srai ділить число зі знаком на степінь двійки. Наступний рядок ділить значення зі знаком на 8 як для додатних, так і для від'ємних вхідних даних.

srai t0, t0, 3

srai округлює вниз, у бік більш від'ємного значення. Зсув -7 вправо на 1 дає -4, тоді як div з дільником 2 дає -3, бо округлює в бік нуля. Обидва збігаються для невід'ємних чисел і для ділення без остачі. Вони різняться на одиницю лише тоді, коли від'ємне число залишає остачу. Код графіки, аудіо та обробки сигналів зазвичай потребує округлення вниз.

Посібник RISC-V кодує зсуви на константу як спеціалізацію формату I-типу, одного зі стандартних форматів інструкцій. Величина зсуву займає молодші 5 бітів поля безпосереднього значення, а біт 30 інструкції розрізняє два зсуви вправо. srai виконує арифметичний зсув вправо, і початковий знаковий біт заповнює звільнені верхні біти.

З чотирьох зсувів srai обробляє числа зі знаком, які діляться, а srli обробляє необроблені біти або числа, які ніколи не стають від'ємними. Форми без i, sra та srl, приймають відстань зсуву, обчислювану під час виконання програми.

Приклад

li t0, -8
srai t1, t0, 1   # t1 = -4 (sign-filled)