sb
lyszt.net охоплює sb та інші інструкції RISC-V більш детально.
Формат кодування
Опис
sb записує один байт (8 біт) у пам'ять — це найменша кількість, яку може записати store. Це store-еквівалент завантажень lb і lbu. Синтаксис наведено нижче. Він читає значення з регістра-джерела rs2 і записує його молодші 8 бітів за адресою, утвореною базовим регістром rs1 плюс зсув. Розташування операндів збігається з sw, при цьому регістр-джерело вказано першим.
sb rs2, offset(rs1)
До пам'яті потрапляють лише молодші 8 із 32 бітів регістра, а решту бітів відкидають. У store немає знакової чи беззнакової форми, оскільки він звужує значення й зберігає молодший байт. Значення ширше за байт втрачає зайві біти без попередження. Збереження 300 записує 44, бо 300 виходить за 256.
Найменша одиниця пам'яті — байт, тож sb будує дані по одному байту за раз, наприклад для складання тексту символ за символом, заповнення буфера чи запису окремих значень кольору. Послідовні байти займають адреси з різницею в одиницю, тож цикл просувається, додаючи 1.
Посібник RISC-V зазначає, що sb зберігає молодші 8 бітів регістра rs2 у пам'ять за адресою rs1 плюс 12-бітний зсув зі знаком. Пам'ять адресується побайтово, тож store байта завжди природно вирівняний.
Поширена вправа — записати текст вручну. Збережіть код кожного символу за допомогою sb, завершіть послідовність байтом 0, а потім виведіть її. Коди 72, 105 і 0 у пам'яті виводяться як слово Hi, що показує, що рядок — це байти в послідовних комірках пам'яті, завершені нулем. Store змінює лише один цільовий байт, а сусідні байти зберігають свої попередні значення.
Приклад
la t0, slot li t1, 200 sb t1, 0(t0) # memory at slot now holds the low 8 bits, 200
