Parece que quiere realizar una transposición de matriz que es un poco diferente a la rotación. En rotación, las filas pueden convertirse en columnas, pero las filas o las columnas estarán en orden inverso dependiendo de la dirección de rotación. La transposición mantiene el orden original de las filas y columnas.
Creo que usar el algoritmo correcto es mucho más importante que si usa ensamblaje o solo C. La rotación en 90 grados o la transposición realmente se reduce a solo mover la memoria. Lo más importante a tener en cuenta es el efecto de la caché se pierde si se utiliza un algoritmo ingenuo como esto:
for(int x=0; x<width; x++)
{
for(y=0; y<height; y++)
out[x][y] = in[y][x];
}
Esto hará que una gran cantidad de memoria caché se pierde porque se está saltando en la memoria mucho. Es más eficiente usar un enfoque basado en bloques. Google para "transposición de matriz eficiente de caché".
Un lugar donde puede obtener algunas ventajas es usar las instrucciones SSE para mover más de un dato a la vez. Estos están disponibles en ensamblaje y en C. También consulte this link. Aproximadamente a mitad de camino tienen una sección sobre computación de una transposición de matriz rápida.
edición: Acabo de ver su comentario de que usted está haciendo esto para una clase en el montaje por lo que probablemente puede pasar por alto la mayor parte de lo que he dicho. Supuse que estabas buscando sacar el mejor rendimiento ya que estabas usando ensamblaje.
Entonces, tengo curiosidad, ¿por qué harías eso en el montaje? – WhirlWind
Porque es un proyecto para un curso que estoy tomando en Asamblea;) – Nick
debe agregar la etiqueta de tarea a preguntas como esta, pero parece bastante razonable, ya que es de alto nivel, y no nos está pidiendo que hagamos la tarea para ti – WhirlWind