andi
lyszt.net cubre andi y otras instrucciones RISC-V con más detalle.
Formato de codificación
Descripción
andi realiza una operación AND bit a bit con una constante. and toma dos registros, pero andi toma un registro y un inmediato, un valor fijo codificado en la instrucción. La i significa inmediato. La regla de AND no cambia: un bit del resultado es 1 solo cuando ambos bits de entrada son 1, por lo que la constante actúa como una máscara que conserva algunos bits y borra los demás. El enmascaramiento y las operaciones bit a bit se tratan en la página de and.
La forma de andi se muestra a continuación. Realiza la operación AND del valor en rs1 con la constante imm y escribe el resultado en rd.
andi rd, rs1, imm
Úsala cuando sepas de antemano qué bits conservar. La siguiente línea conserva los 8 bits más bajos de t0 y borra los 24 superiores, extrayendo un byte de un valor mayor. El prefijo 0x marca una constante hexadecimal.
andi t1, t0, 0xff
La constante debe caber en 12 bits, por lo que no puede expresar una máscara amplia. Para una máscara mayor, cárgala en un registro con li y usa and.
El manual de RISC-V dice que el inmediato de 12 bits se extiende con signo a 32 bits antes de la operación, por lo que una constante negativa tiene todos sus bits superiores establecidos. andi, ori y xori realizan la operación bit a bit sobre el registro rs1 y ese valor extendido y colocan el resultado en rd.
A continuación se presentan dos usos comunes. La primera línea conserva solo el bit más bajo, que es 1 para números impares y 0 para números pares. La segunda línea da el resto después de dividir por 8, porque un resto sin signo por una potencia de dos son los bits más bajos.
andi t1, t0, 1 andi t1, t0, 7
Ejemplo
andi t1, t0, 0xff # keep only the low byte
