csrrs

csrrs

Assembly RISC-V Referência

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

Descrição

csrrs lê um registrador de controle e define bits nele. Um registrador de controle e status, ou CSR, contém o estado do processador, como o endereço do manipulador de trap e os interruptores de interrupção (veja csrrw). O nome é abreviação de leitura atômica e definição de bits em CSR. O valor antigo do CSR vai para rd, então todo bit que é 1 em rs1 é definido como 1 no CSR. Bits que são 0 em rs1 mantêm seu valor.

csrrs rd, csr, rs1

O registrador rs1 funciona como uma máscara, um padrão cujos bits 1 escolhem quais bits alterar. As linhas abaixo definem o bit 3 de mstatus, o habilitador global de interrupção, e deixam o valor anterior em t1.

li t0, 8
csrrs t1, mstatus, t0

O 8 é binário 1000, então apenas o bit 3 muda. Quando rs1 é zero, o CSR é lido e nunca escrito, que é o atalho csrr. Quando rd é zero, o valor antigo é descartado, que é o atalho csrs. Veja csrrw para a lista de CSRs neste simulador e csrrc para limpar bits.

O manual RISC-V diz que csrrs com rs1=x0 não grava o CSR de forma alguma.

Exemplo

li t0, 8
csrrs t1, mstatus, t0   # sets bit 3 of mstatus, t1 = old mstatus