and
lyszt.net aborda and e outras instruções RISC-V com mais detalhes.
Formato de codificação
Descrição
and é uma instrução bit a bit. Um registrador contém 32 bits, que são 32 0s e 1s separados em sequência. Uma instrução bit a bit aplica sua operação a todas as 32 posições de forma independente, e nenhum carry passa entre as posições.
Em um único bit, AND dá 1 apenas quando ambos os bits de entrada são 1, e 0 caso contrário. A forma abaixo aplica essa regra a todas as 32 posições, comparando rs1 e rs2 e escrevendo o resultado em rd.
and rd, rs1, rs2
AND é usado para mascaramento, que mantém alguns bits e limpa outros. Onde a máscara tem um 1, o bit original permanece. Onde a máscara tem um 0, o resultado é 0. Fazer AND de um valor com a máscara 00001111 mantém os quatro bits baixos e limpa o restante. O mascaramento extrai um campo de um valor que empacota vários campos juntos.
O manual do RISC-V lista and, or e xor entre as operações registrador-registrador. Todas elas leem os registradores de origem rs1 e rs2, escrevem o resultado no registrador de destino rd e realizam operações lógicas bit a bit.
No exemplo, 0b1100 (o prefixo 0b marca dígitos binários) recebe AND com 0b1010. Ambas as entradas têm um 1 apenas na posição mais à esquerda, então o resultado é 0b1000, e ele vai para t2.
Exemplo
li t0, 0b1100 li t1, 0b1010 and t2, t0, t1 # t2 = 0b1000
