notpseudo

not

pseudo
Assembly RISC-V Referência

lyszt.net aborda not e outras instruções RISC-V com mais detalhes.

Descrição

not inverte todos os bits de um registrador. Um 0 se torna 1, e um 1 se torna 0. A forma abaixo lê o registrador de origem rs, inverte todos os 32 bits e escreve o resultado no registrador de destino rd. Essa operação é o complemento bit a bit.

not rd, rs

not é uma pseudoinstrução: um nome legível que o montador reescreve como uma instrução real. Ela se torna a instrução abaixo, que é um XOR com uma máscara de todos os 1s.

xori rd, rs, -1

O XOR inverte um bit onde quer que a máscara tenha um 1, então uma máscara de todos os 1s inverte todos os bits. O valor -1 é todos os bits em 1, e é por isso que ele funciona como máscara. O RISC-V não tem uma instrução de inversão dedicada porque essa reescrita dá conta disso.

not produz o oposto de uma máscara. Se um padrão seleciona certos bits, not produz o padrão que seleciona o restante. Usar not seguido de and limpa os bits que a máscara original nomeava, o que desliga um conjunto de flags.

O manual do RISC-V define not como uma pseudoinstrução de montador para xori com a constante -1, e descreve esse xori como uma inversão lógica bit a bit do registrador rs1.

not e neg dão resultados diferentes. not inverte os bits, e neg inverte o sinal. not de 5 é -6, e neg de 5 é -5. O trace do simulador mostra o xori que é executado no lugar de not.

Expande para

xori rd, rs, -1

O montador substitui esta pseudoinstrução pela instrução ou instruções reais listadas acima.

Exemplo

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