Es klingt, als ob Sie eine Matrix-Transponierung durchführen möchten, die ein wenig anders ist als die Rotation. In der Drehung können die Zeilen zu Spalten werden, aber entweder die Zeilen oder die Spalten sind in umgekehrter Reihenfolge, abhängig von der Drehrichtung. Die Transposition behält die ursprüngliche Reihenfolge der Zeilen und Spalten bei.
Ich denke, die Verwendung des richtigen Algorithmus ist viel wichtiger als ob Sie Assembly oder nur C verwenden. Die Drehung um 90 Grad oder Transposition läuft wirklich nur auf Bewegung Speicher. Die größte Sache zu prüfen, ist der Effekt der Cache verfehlt, wenn Sie einen naiven Algorithmus wie folgt verwenden:
for(int x=0; x<width; x++)
{
for(y=0; y<height; y++)
out[x][y] = in[y][x];
}
Dies wird viele Cache verursachen verpasst, weil Sie um viel im Speicher springen. Es ist effizienter, einen blockbasierten Ansatz zu verwenden. Google für "Cache effiziente Matrix transponieren".
Ein Ort, an dem Sie möglicherweise einige Vorteile erzielen können, ist die Verwendung von SSE-Anweisungen, um mehr als ein Datenelement gleichzeitig zu verschieben. Diese sind in Montage und in C erhältlich. Schauen Sie auch this link. Etwa auf halbem Weg haben sie einen Abschnitt über die Berechnung einer schnellen Matrix-Transponierung.
edit: Ich sah nur Ihren Kommentar, dass Sie dies für eine Klasse in der Montage machen, so dass Sie wahrscheinlich die meisten außer Acht lassen kann, was ich sagte. Ich nahm an, Sie wollten die beste Leistung seit der Montage auspressen.
Also, ich bin neugierig, warum würden Sie so etwas in der Montage tun? – WhirlWind
Weil es ein Projekt für einen Kurs ist, den ich in Assembly mache;) – Nick
sollten Sie das Hausaufgaben-Tag zu Fragen wie diesem hinzufügen, aber das scheint ziemlich vernünftig, da es auf einem hohen Niveau ist, und Sie fordern uns nicht zu tun die Hausaufgaben für dich. – WhirlWind