lbu
lyszt.net охоплює lbu та інші інструкції RISC-V більш детально.
Формат кодування
Опис
lbu читає один байт (8 біт) з пам'яті як беззнакове значення. Він працює в парі з lb, і вони відрізняються лише тим, як заповнюють решту регістра. Обидва читають один байт, використовуючи ту саму адресацію. Сторінка lb описує байти та форму адресації. Форма lbu наведена нижче.
lbu rd, offset(rs1)
Регістр містить 32 біти, тому завантаження 1 байта залишає 24 біти для заповнення. lb копіює старший біт байта в ці біти, що є розширенням знака і може дати від'ємне число. lbu заповнює їх нулями, тому результат завжди знаходиться між 0 і 255. Літера u означає беззнакове читання.
Завантаження тексту зазвичай використовує lbu. Коди символів беззнакові, і в багатьох установлений старший біт, зокрема в літер з діакритичними знаками та різних символів. Розширювальний знак lb робить їх від'ємними й порушує порівняння. Стандартний текстовий цикл використовує lbu. Він завантажує байт, перевіряє, чи він дорівнює нулю, що позначає кінець тексту, обробляє його й додає 1 до адреси.
Посібник RISC-V визначає lb і lbu як 8-бітні версії завантаження півслова з тією самою ефективною адресою регістра rs1 плюс 12-бітне зміщення зі знаком. Пам'ять адресується побайтово, тому кожна адреса позначає один байт.
lbu також підходить для інших байтових даних, зокрема кольорових каналів у зображеннях, необроблених буферів даних і байтів інструкцій в інтерпретаторі. Завантажені в такий спосіб байти не мають знака, тому вони безпосередньо поєднуються зі зсувами та OR, коли більше значення відновлюється з окремих байтів. Використовуйте lb лише тоді, коли 8-бітні дані знакові.
Приклад
.data val: .byte 0xff .text la t0, val lbu t1, 0(t0) # t1 = 255 (zero-extended)
