ori

ori

Assembly RISC-V Referência

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

Formato de codificação

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

Descrição

ori realiza um OR bit a bit com uma constante. Sua relação com or corresponde à de andi com and. O i significa imediato, um valor fixo codificado na instrução. ori faz OR de um registrador com essa constante em vez de fazer OR de dois registradores. A regra do OR não muda. Uma posição de bit no resultado é 1 quando qualquer um dos bits ali é 1, então a constante define os bits que você escolher. A página or cobre a operação.

A forma de ori aparece abaixo. Ela faz OR do valor em rs1 com a constante imm e escreve o resultado em rd.

ori rd, rs1, imm

O OR define bits e deixa o restante como estava, então ori liga flags específicas quando você sabe quais quer. A linha seguinte liga o terceiro bit a partir da direita em t0 e deixa todos os outros bits inalterados. O prefixo 0b marca uma constante binária.

ori t0, t0, 0b100

Registradores de configuração, flags de permissão e palavras de status contêm bits independentes de ligado e desligado, e ori liga os escolhidos em uma única instrução sem registrador de máscara.

O manual do RISC-V afirma que o imediato de 12 bits é estendido com sinal para 32 bits antes da operação. Uma constante negativa, portanto, tem todos os seus bits superiores definidos, e ori com -1 define todos os bits do resultado.

A constante é limitada a 12 bits, como em andi e addi. Para definir bits fora desse intervalo, carregue a máscara mais ampla em um registrador com li e use or.

Exemplo

li t0, 0
ori t1, t0, 0xf   # t1 = 0xf