li
псевдо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
