lui

lui

Assembleur RISC-V Référence

lyszt.net couvre lui et d'autres instructions RISC-V plus en détail.

Format d'encodage

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

Description

lui assemble de grandes constantes. Une instruction RISC-V occupe 32 bits, et ces bits portent l'opération, ses registres et toute constante. Une instruction normale peut contenir environ 12 bits de constante, ce qui couvre les petits nombres mais reste insuffisant pour une valeur complète de 32 bits. Plusieurs instructions fournissent les morceaux d'une grande constante.

lui (load upper immediate) fournit le morceau supérieur. Il prend une constante de 20 bits et l'écrit dans les 20 bits supérieurs du registre de destination, en laissant les 12 bits inférieurs à zéro. La forme apparaît ci-dessous.

lui rd, value

Une constante complète nécessite deux instructions. lui définit les 20 bits supérieurs, et addi ajoute les 12 bits inférieurs. La pseudo-instruction li effectue ce travail pour vous, donc un lui écrit à la main est rarement nécessaire pour les nombres ordinaires.

Le manuel RISC-V indique que la syntaxe d'assemblage de lui et auipc omet les 12 bits inférieurs de la constante, car ces bits sont toujours à zéro. Il indique également qu'un lui suivi de jalr peut atteindre n'importe quelle adresse absolue de 32 bits : lui charge les 20 bits supérieurs de l'adresse cible et jalr ajoute les bits inférieurs.

lui apparaît directement lors du chargement d'adresses rondes dont les bits inférieurs sont à zéro, comme les adresses fixes des périphériques matériels, où un seul lui fournit la valeur entière. Son proche parent est auipc, qui construit une adresse relative à l'emplacement courant.

Exemple

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