lbu
lyszt.net tratta lbu e altre istruzioni RISC-V in modo più dettagliato.
Formato di codifica
Descrizione
lbu legge un byte (8 bit) dalla memoria come valore senza segno. Fa coppia con lb, e i due differiscono solo nel modo in cui riempiono il resto del registro. Entrambi leggono un byte usando lo stesso indirizzamento. La pagina lb copre i byte e la forma di indirizzamento. La forma di lbu è mostrata di seguito.
lbu rd, offset(rs1)
Un registro contiene 32 bit, quindi un caricamento di 1 byte lascia 24 bit da riempire. lb copia il bit più alto del byte in quei bit, il che è estensione del segno e può produrre un numero negativo. lbu li riempie con 0, quindi il risultato cade sempre tra 0 e 255. La u sta per la lettura senza segno.
I caricamenti di testo normalmente usano lbu. I codici dei caratteri sono senza segno, e molti hanno il bit più alto impostato, incluse le lettere accentate e vari simboli. Il lb con estensione del segno li rende negativi e rompe i confronti. Il ciclo di testo standard usa lbu. Carica un byte, controlla se è zero, il che segna la fine del testo, lo elabora e aggiunge 1 all'indirizzo.
Il manuale RISC-V definisce lb e lbu come le versioni a 8 bit dei caricamenti di mezza parola, con lo stesso indirizzo effettivo del registro rs1 più l'offset di 12 bit esteso in segno. La memoria è indirizzata a byte, quindi ogni indirizzo indica un byte.
lbu si adatta anche ad altri dati a byte, inclusi i canali di colore nelle immagini, i buffer di dati grezzi e i byte di istruzione in un interprete. I byte caricati in questo modo non hanno segno da gestire, quindi si combinano direttamente con scorrimenti e OR quando un valore più grande viene ricostruito da singoli byte. Usa lb solo quando i dati a 8 bit sono con segno.
Esempio
.data val: .byte 0xff .text la t0, val lbu t1, 0(t0) # t1 = 255 (zero-extended)
