slli
lyszt.net охоплює slli та інші інструкції RISC-V більш детально.
Формат кодування
Опис
slli зсуває біти вліво на фіксовану величину. Операція відповідає sll: біти зсуваються вліво, нулі заповнюють праву сторону, біти, що виходять за лівий край, втрачаються, і кожен зсунутий розряд подвоює значення (сторінка sll описує механіку). Інструкція зберігає величину зсуву як константу, тому жоден регістр її не надає. Літера i означає immediate (безпосередній), що є терміном для константи, записаної в інструкції.
Форма slli показана нижче, де amount — фіксоване число від 0 до 31.
slli rd, rs1, amount
Наступний рядок зсуває t0 вліво на 3 розряди, що множить його на 8.
slli t1, t0, 3
Масиви роблять цю інструкцію поширеною. 32-бітне значення в масиві займає 4 байти, тому елемент номер i розташований на відстані i помножити на 4 байти від початку, а зсув вліво на 2 множить на 4. Звичайний шаблон зсуває індекс, щоб отримати зсув у байтах, додає початкову адресу масиву, а потім завантажує значення. Розпізнавання цієї послідовності зсуву, додавання та завантаження допомагає під час читання асемблера, написаного іншими.
Посібник RISC-V кодує зсуви на константу як спеціалізацію формату типу I, одного зі стандартних форматів інструкцій. rs1 містить операнд, який потрібно зсунути, а молодші 5 бітів поля immediate містять величину зсуву. slli виконує логічний зсув вліво, і нулі входять у молодші біти.
Використовуйте slli, коли величина зсуву відома під час написання коду. Використовуйте sll, коли величина обчислюється під час виконання програми. Приклад зсуває 5 вліво на 3, що дає 5 помножити на 8, або 40.
Приклад
li t0, 5 slli t1, t0, 3 # t1 = 5 << 3 = 40 (5 * 8)
