liпсевдо

li

псевдо
Асемблер RISC-V Посилання

lyszt.net охоплює li та інші інструкції RISC-V більш детально.

Опис

li завантажує стале число в регістр. Назва означає load immediate (завантажити безпосереднє значення), а безпосереднє значення — це фіксоване значення, записане безпосередньо в коді. Наступний рядок зберігає 42 у t0.

li t0, 42

Більшість програм починається з розміщення відомих чисел у регістрах, зокрема лічильників, меж і службових кодів.

Слово load походить від апаратного обмеження. Інструкція RISC-V має довжину 32 біти й повинна одночасно містити операцію, регістри та константу. Одна інструкція не може вмістити повну 32-бітну константу. Малі константи вміщуються, а великі — ні.

li обходить це обмеження. Це псевдоінструкція — назва, яку асемблер замінює на реальні інструкції, потрібні для цього значення. Мале значення потребує однієї інструкції. Велике значення потребує двох: одна встановлює старшу частину, а інша додає молодшу частину, тому наступний рядок працює для числа будь-якого розміру.

li t1, 0x10010000

Симулятор відображає реальні інструкції, у які розгортається li.

Посібник RISC-V описує lui як інструкцію для побудови 32-бітних констант. Вона розміщує 20-бітне значення у старших бітах регістра призначення й заповнює молодші 12 бітів нулями.

li і la завантажують різні речі. li завантажує число, яке ви ввели, а la завантажує адресу, яку позначає мітка. Приклад завантажує мале значення й велике, і асемблер обробляє обидва однаково.

Розгортається до

addi rd, zero, imm          # small constants
lui rd, hi  +  addi rd, rd, lo   # large constants

Асемблер замінює цю псевдоінструкцію реальною інструкцією або інструкціями, переліченими вище.

Приклад

li t0, 42
li t1, 0x10010000