sw
lyszt.net cubre sw y otras instrucciones RISC-V con más detalle.
Formato de codificación
Descripción
sw toma un valor de un registro y lo escribe en memoria, lo opuesto de lw. El nombre significa store word (almacenar palabra), y una palabra es de 32 bits. Las cargas mueven datos desde la memoria a los registros para poder operar con ellos, y los almacenamientos envían los resultados de vuelta. Las dos instrucciones componen el ciclo de carga, cálculo y almacenamiento de RISC-V, porque la aritmética ocurre solo en los registros.
La sintaxis de sw aparece a continuación. El orden de los operandos difiere del de la mayoría de las instrucciones.
sw rs2, offset(rs1)
rs2 contiene el valor que se va a escribir. El segundo operando, offset(rs1), da la dirección de destino en memoria: la dirección del registro base rs1 más un pequeño desplazamiento constante, el mismo direccionamiento que usa lw. La línea siguiente escribe el valor de t1 en la dirección contenida en t0.
sw t1, 0(t0)
sw deja todos los registros sin cambios. Su efecto recae por completo en la memoria, mientras que casi todas las demás instrucciones escriben en un registro.
El manual de RISC-V indica que sw, sh y sb almacenan valores de 32, 16 y 8 bits desde los bits bajos del registro rs2 a la memoria. La dirección efectiva es el registro rs1 más el desplazamiento de 12 bits con extensión de signo. Las cargas y los almacenamientos en direcciones naturalmente alineadas nunca generan un error de alineación, y el manual garantiza que se ejecutan de forma atómica, como un solo paso indivisible.
Los almacenamientos guardan resultados en arreglos y variables, y una función los usa para colocar valores en su espacio de trabajo en la pila. Un almacenamiento sobrescribe los 4 bytes en la dirección de destino. El ejemplo escribe 99 en un lugar etiquetado de la memoria, reemplazando lo que había allí. La memoria conserva ese valor hasta que otro almacenamiento lo sobrescriba, a diferencia de un registro.
Ejemplo
la t0, slot li t1, 99 sw t1, 0(t0) # memory at slot now holds 99
