lui

lui

Assembly RISC-V Riferimento

lyszt.net tratta lui e altre istruzioni RISC-V in modo più dettagliato.

Formato di codifica

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

Descrizione

lui assembla costanti grandi. Un'istruzione RISC-V occupa 32 bit, e quei bit trasportano l'operazione, i suoi registri e qualsiasi costante. Un'istruzione normale può contenere circa 12 bit di costante, il che copre i numeri piccoli ma non basta per un valore completo a 32 bit. Diverse istruzioni forniscono i pezzi di una costante grande.

lui (load upper immediate) fornisce il pezzo superiore. Prende una costante a 20 bit e la scrive nei 20 bit superiori del registro di destinazione, lasciando i 12 bit inferiori a zero. La forma appare di seguito.

lui rd, value

Una costante completa richiede due istruzioni. lui imposta i 20 bit superiori, e addi aggiunge i 12 inferiori. La pseudoistruzione li svolge questo lavoro per te, quindi un lui scritto a mano è raramente necessario per i numeri ordinari.

Il manuale RISC-V afferma che la sintassi assembly di lui e auipc omette i 12 bit inferiori della costante, perché quei bit sono sempre zero. Afferma inoltre che un lui seguito da jalr può raggiungere qualsiasi indirizzo assoluto a 32 bit: lui carica i 20 bit superiori dell'indirizzo di destinazione e jalr aggiunge i bit inferiori.

lui appare direttamente quando si caricano indirizzi tondi i cui bit inferiori sono zero, come gli indirizzi fissi dei dispositivi hardware, dove un singolo lui fornisce l'intero valore. Il suo stretto parente è auipc, che costruisce un indirizzo relativo alla posizione corrente.

Esempio

lui t0, 0x10     # t0 = 0x10000 (0x10 << 12)