laпсевдо

la

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

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

Опис

la завантажує адресу чогось у регістр. Ця адреса — це комірка пам'яті, а значення, що зберігається в цій комірці, — це щось окреме. Назва розшифровується як load address (завантажити адресу).

Коли ви резервуєте дані в пам'яті, ви даєте їм ім'я, наприклад arr або msg, що позбавляє вас від відстеження необроблених чисел-адрес. Це ім'я — мітка, читабельна заміна адреси пам'яті. Наступний рядок завантажує адресу, позначену міткою arr, у t0. Він надає місцеположення, з якого починається масив, і не читає вміст масиву.

la t0, arr

Інструкції завантаження та збереження (lw, sw та решта) приймають адресу, що зберігається в регістрі. Перш ніж ви зможете прочитати або записати іменовані дані, їхня адреса має бути в регістрі, і la розміщує її там. Читання значення потребує двох інструкцій. la знаходить, де розташовані дані, а lw читає те, що там є.

Посібник з RISC-V описує auipc як інструкцію для побудови адрес відносно pc. У ньому зазначено, що auipc, за яким іде завантаження або збереження з 12-бітним зсувом, може досягти будь-якої 32-бітної адреси даних відносно pc.

Адреса та її вміст різняться так само, як різняться вказівник і значення. Після того як адреса перебуває в регістрі, ви дістаєтеся до окремих елементів, додаючи до неї зсуви. У прикладі адреса фрагмента тексту завантажується в a0, що вимагає служба друку рядків. Їй потрібно повідомити, де розташований текст, і вона читає текст звідти. la — це псевдоінструкція, яку асемблер будує з кількох справжніх інструкцій.

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

auipc rd, hi(label)
addi  rd, rd, lo(label)

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

Приклад

.data
msg: .string "hi"
.text
la a0, msg     # a0 = address of msg