nopпсевдо

nop

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

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

Опис

nop нічого не робить. Назва скорочує "no operation" (без операції). Коли процесор досягає nop, жоден регістр не змінюється, пам'ять не зачіпається, а виконання продовжується з наступної інструкції. Він займає один слот у програмі, і минає один такт часу.

nop — це псевдоінструкція для рядка нижче.

addi zero, zero, 0

RISC-V містить регістр під назвою zero, який завжди зберігає 0. Читання повертає 0, а запис відкидається. Ця addi додає 0 і 0 та відкидає результат, тому інструкція завершується і нічого не змінюється. RISC-V не потребує окремого nop, бо регістр zero його забезпечує.

Справжні процесори використовують nop як заповнення, щоб пізніша інструкція починалася на межі пам'яті, яку апаратне забезпечення обробляє швидше, і як заповнювачі, які інструменти згодом перезаписують справжніми інструкціями. Компілятори вставляють їх як належне, тому дизасембльований код містить їх, навіть якщо жоден програміст їх не набирав.

Посібник RISC-V стверджує, що nop не змінює жодного архітектурно видимого стану, тобто нічого, що програма може спостерігати, крім просування pc та збільшення будь-яких лічильників продуктивності. Він наводить два застосування: вирівнювання сегментів коду за межами адрес, які підходять апаратному забезпеченню, та залишення місця для подальших змін коду. Посібник пояснює, що кодування використовує addi, бо ця інструкція коштує найменше ресурсів у більшості систем, оскільки читає лише один регістр.

У цьому симуляторі nop слугує роздільником або маркером під час експериментів. Крок через один просуває pc вперед на 4 і не змінює жодного регістра чи комірки пам'яті.

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

addi zero, zero, 0

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

Приклад

li t0, 1
nop              # advances one instruction, changes nothing
addi t0, t0, 1   # t0 = 2