lui

lui

Asembler RISC-V Referencja

lyszt.net obejmuje lui i inne instrukcje RISC-V w większych szczegółach.

Format kodowania

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

Opis

lui składa duże stałe. Instrukcja RISC-V zajmuje 32 bity, a te bity zawierają operację, jej rejestry i dowolną stałą. Zwykła instrukcja może pomieścić około 12 bitów stałej, co obejmuje małe liczby, ale nie wystarcza na pełną wartość 32-bitową. Kilka instrukcji dostarcza części dużej stałej.

lui (load upper immediate) dostarcza górną część. Przyjmuje 20-bitową stałą i zapisuje ją w górnych 20 bitach rejestru docelowego, pozostawiając dolne 12 bitów jako zera. Forma jest pokazana poniżej.

lui rd, value

Pełna stała wymaga dwóch instrukcji. lui ustawia górne 20 bitów, a addi dodaje dolne 12. Pseudoinstrukcja li wykonuje tę pracę za Ciebie, więc ręcznie pisany lui jest rzadko potrzebny dla zwykłych liczb.

Podręcznik RISC-V stwierdza, że składnia asemblera lui i auipc pomija dolne 12 bitów stałej, ponieważ te bity są zawsze zerowe. Stwierdza również, że lui po którym następuje jalr, może osiągnąć dowolny 32-bitowy adres bezwzględny: lui ładuje górne 20 bitów adresu docelowego, a jalr dodaje dolne bity.

lui pojawia się bezpośrednio przy ładowaniu okrągłych adresów, których dolne bity są zerowe, takich jak stałe adresy urządzeń sprzętowych, gdzie pojedynczy lui dostarcza całą wartość. Jego bliskim krewnym jest auipc, który buduje adres względem bieżącej lokalizacji.

Przykład

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