sra
lyszt.net cubre sra y otras instrucciones RISC-V con más detalle.
Formato de codificación
Descripción
sra es el segundo desplazamiento a la derecha, junto a srl. El nombre significa desplazamiento aritmético a la derecha. La forma siguiente desplaza rs1 a la derecha por la cantidad contenida en rs2.
sra rd, rs1, rs2
Como cualquier desplazamiento a la derecha, mueve los bits hacia el extremo inferior y descarta los que se salen. Su tratamiento de las posiciones superiores vacías difiere del de srl.
RISC-V usa un esquema con signo en el que el bit superior marca el signo, y un 1 ahí significa que el número es negativo. srl rellena la parte superior con 0s, lo que borra el marcador de signo y convierte un número negativo en uno positivo grande. sra rellena la parte superior con copias del bit de signo existente, así que el relleno es de 1s para un número negativo y de 0s para uno positivo. El número conserva su signo.
sra divide un número con signo entre una potencia de dos. Un desplazamiento de 1 lo reduce a la mitad, un desplazamiento de 3 lo divide entre 8, y los números negativos siguen siendo negativos. El resultado redondea hacia abajo, hacia el valor más negativo, así que -7 desplazado a la derecha por 1 da -4 mientras que la instrucción div da -3. El código de gráficos y audio normalmente acepta el redondeo hacia abajo.
El manual de RISC-V guarda la cantidad de desplazamiento en los 5 bits inferiores del registro rs2. Cinco bits cubren de 0 a 31 posiciones, así que los otros bits de rs2 no tienen efecto. El manual describe sra como un desplazamiento aritmético a la derecha, que copia el bit de signo original en los bits superiores vaciados.
Usa sra para números con signo y srl para patrones de bits sin procesar o números que nunca son negativos. Para una cantidad fija, usa la forma constante srai.
Ejemplo
li t0, -8 li t1, 1 sra t2, t0, t1 # t2 = -4 (sign-filled)
