lui
lyszt.net охватывает lui и другие инструкции RISC-V более подробно.
Формат кодирования
Описание
lui собирает большие константы. Инструкция RISC-V занимает 32 бита, и эти биты содержат операцию, её регистры и любую константу. Обычная инструкция может вместить примерно 12 бит константы, что покрывает небольшие числа, но недостаточно для полного 32-битного значения. Несколько инструкций поставляют части большой константы.
lui (load upper immediate) поставляет верхнюю часть. Она принимает 20-битную константу и записывает её в верхние 20 бит регистра назначения, оставляя младшие 12 бит нулевыми. Форма показана ниже.
lui rd, value
Полная константа требует двух инструкций. lui устанавливает старшие 20 бит, а addi добавляет младшие 12. Псевдоинструкция li выполняет эту работу за вас, поэтому написанный вручную lui редко нужен для обычных чисел.
Руководство RISC-V утверждает, что синтаксис ассемблера lui и auipc опускает младшие 12 бит константы, потому что эти биты всегда нулевые. Оно также утверждает, что lui, за которым следует jalr, может достичь любого 32-битного абсолютного адреса: lui загружает старшие 20 бит целевого адреса, а jalr добавляет младшие биты.
lui появляется напрямую при загрузке круглых адресов, младшие биты которых нулевые, таких как фиксированные адреса аппаратных устройств, где один lui поставляет всё значение. Его близкий родственник — auipc, который строит адрес относительно текущего местоположения.
Пример
lui t0, 0x10 # t0 = 0x10000 (0x10 << 12)
