and

and

Ensamblador RISC-V Referencia

lyszt.net cubre and y otras instrucciones RISC-V con más detalle.

Formato de codificación

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

Descripción

and es una instrucción bit a bit. Un registro contiene 32 bits, que son 32 ceros y unos separados en una fila. Una instrucción bit a bit aplica su operación a las 32 posiciones de forma independiente, y no se produce ningún acarreo entre posiciones.

En un solo bit, AND da 1 solo cuando ambos bits de entrada son 1, y 0 en caso contrario. La forma a continuación aplica esa regla a las 32 posiciones, comparando rs1 y rs2 y escribiendo el resultado en rd.

and rd, rs1, rs2

AND se usa para el enmascaramiento, que conserva algunos bits y borra otros. Donde la máscara tiene un 1, el bit original se mantiene. Donde la máscara tiene un 0, el resultado es 0. Aplicar AND a un valor con la máscara 00001111 conserva los cuatro bits bajos y borra el resto. El enmascaramiento extrae un campo de un valor que empaqueta varios campos juntos.

El manual de RISC-V incluye and, or y xor entre las operaciones registro-registro. Todas ellas leen los registros fuente rs1 y rs2, escriben el resultado en el registro destino rd y realizan operaciones lógicas bit a bit.

En el ejemplo, se aplica AND a 0b1100 (el prefijo 0b marca los dígitos binarios) con 0b1010. Ambas entradas tienen un 1 solo en la posición más a la izquierda, por lo que el resultado es 0b1000, y va a t2.

Ejemplo

li t0, 0b1100
li t1, 0b1010
and t2, t0, t1   # t2 = 0b1000