sra
lyszt.net охоплює sra та інші інструкції RISC-V більш детально.
Формат кодування
Опис
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)
