sra

sra

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

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

Опис

sra — це другий зсув праворуч, поруч із srl. Назва означає арифметичний зсув праворуч. Наведена нижче форма зсуває rs1 праворуч на величину, що міститься в rs2.

sra rd, rs1, rs2

Як і будь-який зсув праворуч, він переміщує біти до молодшого кінця й відкидає ті, що виходять за межу. Його обробка порожніх верхніх позицій відрізняється від srl.

RISC-V використовує знакову схему, у якій старший біт позначає знак, і 1 там означає, що число від'ємне. srl заповнює верх нулями, що стирає маркер знака й перетворює від'ємне число на велике додатне. sra заповнює верх копіями наявного біта знака, тож заповнення складається з 1 для від'ємного числа й з 0 для додатного. Число зберігає свій знак.

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

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

Використовуйте sra для знакових чисел, а srl — для необроблених бітових шаблонів або чисел, які ніколи не бувають від'ємними. Для фіксованої величини використовуйте константну форму srai.

Приклад

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