lbu
lyszt.net obejmuje lbu i inne instrukcje RISC-V w większych szczegółach.
Format kodowania
Opis
lbu odczytuje jeden bajt (8 bitów) z pamięci jako wartość bez znaku. Współpracuje z lb, a oba różnią się tylko sposobem wypełniania reszty rejestru. Oba odczytują jeden bajt przy użyciu tego samego adresowania. Strona lb omawia bajty i formę adresowania. Forma lbu znajduje się poniżej.
lbu rd, offset(rs1)
Rejestr przechowuje 32 bity, więc ładowanie 1 bajtu pozostawia 24 bity do wypełnienia. lb kopiuje najwyższy bit bajtu do tych bitów, co jest rozszerzeniem znaku i może dać liczbę ujemną. lbu wypełnia je zerami, więc wynik zawsze mieści się między 0 a 255. Litera u oznacza odczyt bez znaku.
Ładowanie tekstu zwykle używa lbu. Kody znaków są bez znaku, a wiele z nich ma ustawiony najwyższy bit, w tym litery z akcentami i różne symbole. Rozszerzający znak lb czyni je ujemnymi i psuje porównania. Standardowa pętla tekstowa używa lbu. Ładuje bajt, sprawdza, czy jest zerem, co oznacza koniec tekstu, przetwarza go i dodaje 1 do adresu.
Podręcznik RISC-V definiuje lb i lbu jako 8-bitowe wersje ładowania półsłowa, z tym samym adresem efektywnym rejestru rs1 plus 12-bitowym przesunięciem rozszerzonym znakowo. Pamięć jest adresowana bajtowo, więc każdy adres nazywa jeden bajt.
lbu nadaje się również do innych danych bajtowych, w tym kanałów kolorów w obrazach, surowych buforów danych i bajtów instrukcji w interpreterze. Bajty ładowane w ten sposób nie mają znaku do obsługi, więc łączą się bezpośrednio z przesunięciami i OR-ami, gdy większa wartość jest odtwarzana z pojedynczych bajtów. Używaj lb tylko wtedy, gdy dane 8-bitowe są ze znakiem.
Przykład
.data val: .byte 0xff .text la t0, val lbu t1, 0(t0) # t1 = 255 (zero-extended)
