sw
lyszt.net охоплює sw та інші інструкції RISC-V більш детально.
Формат кодування
Опис
sw бере значення з регістра й записує його в пам'ять — протилежність lw. Назва означає store word (зберегти слово), а слово — це 32 біти. Завантаження переміщують дані з пам'яті в регістри, щоб з ними можна було працювати, а збереження надсилають результати назад. Ці дві інструкції складають цикл завантаження, обчислення та збереження в RISC-V, оскільки арифметика виконується лише в регістрах.
Синтаксис sw наведено нижче. Порядок операндів відрізняється від більшості інструкцій.
sw rs2, offset(rs1)
rs2 містить значення для запису. Другий операнд, offset(rs1), задає адресу призначення в пам'яті: адреса в базовому регістрі rs1 плюс невелике стале зміщення — та сама адресація, яку використовує lw. Наступний рядок записує значення з t1 за адресою, що зберігається в t0.
sw t1, 0(t0)
sw залишає кожен регістр без змін. Його вплив повністю припадає на пам'ять, тоді як майже кожна інша інструкція записує в регістр.
Посібник RISC-V зазначає, що sw, sh і sb зберігають у пам'ять 32-, 16- і 8-бітні значення з молодших бітів регістра rs2. Ефективна адреса — це регістр rs1 плюс 12-бітне зміщення зі знаком. Завантаження та збереження за природно вирівняними адресами ніколи не спричиняють помилку вирівнювання, і посібник гарантує, що вони виконуються атомарно, як один неподільний крок.
Збереження записують результати в масиви та змінні, а функція використовує їх, щоб розмістити значення у своєму робочому просторі на стеку. Збереження перезаписує всі 4 байти за цільовою адресою. Приклад записує 99 у позначене місце в пам'яті, замінюючи те, що там було. Пам'ять зберігає це значення, доки інше збереження його не перезапише, на відміну від регістра.
Приклад
la t0, slot li t1, 99 sw t1, 0(t0) # memory at slot now holds 99
