sb

sb

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

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

Опис

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