notпсевдо

not

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

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

Опис

not інвертує всі біти регістра. 0 стає 1, а 1 стає 0. Наведена нижче форма читає вихідний регістр rs, перевертає всі 32 біти й записує результат у регістр призначення rd. Ця операція — побітове доповнення.

not rd, rs

not — це псевдоінструкція: читабельна назва, яку асемблер переписує в справжню інструкцію. Вона перетворюється на наведену нижче інструкцію, тобто XOR із маскою з усіх 1.

xori rd, rs, -1

XOR перевертає біт там, де маска містить 1, тому маска з усіх 1 перевертає всі біти. Значення -1 — це всі 1 у бітах, тому воно працює як маска. У RISC-V немає окремої інструкції інвертування, бо цей перезапис дає раду цьому.

not дає протилежність маски. Якщо шаблон вибирає певні біти, not дає шаблон, який вибирає решту. Використання not разом з and очищає біти, названі початковою маскою, що вимикає набір прапорців.

Посібник RISC-V визначає not як псевдоінструкцію асемблера для xori з константою -1 і описує цей xori як побітову логічну інверсію регістра rs1.

not і neg дають різні результати. not перевертає біти, а neg перевертає знак. not від 5 дорівнює -6, а neg від 5 дорівнює -5. Трасування симулятора показує xori, який виконується замість not.

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

xori rd, rs, -1

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

Приклад

li t0, 0
not t1, t0       # t1 = -1 (every bit flipped)