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)