2009-06-20 4 views
7

Was genau macht diese Anweisung? Ich weiß, dass es versucht, Daten mit einem Vielfachen einer bestimmten Zahl auszurichten, aber warum sollten Sie das tun? Gibt es eine entsprechende Anweisung in anderen Assemblern?'align' Anweisung auf MIPS

Antwort

9

Normalerweise richten Sie Daten aus, um eine bessere Leistung zu erzielen. Bei den meisten Prozessoren hat der Speicherzugriff Nachteile, wenn er nicht auf bestimmte Bytegrenzen zugreift. Für andere Monteure gibt es dafür oft eine Art pseudo-op.align. Die meisten Compiler richten auch ihre Datenstrukturen aus (obwohl Sie sie für Debug-Zwecke deaktivieren können).

Siehe auch Wikipedia entry.

Beachten Sie, dass nicht emulierte MIPS-Systeme möglicherweise sogar abstürzen, wenn Sie versuchen, auf nicht ausgerichtete Speicherzellen zuzugreifen (siehe here und here).

+0

Danke für die zusätzlichen Erläuterungen in externen Links! –

0

Es richtet alles auf die n-te Potenz von zwei. Es ist nicht eine Anweisung, es ist eine Richtlinie, die

Wie für seine Verwendung, für exampe in Befehle übersetzt werden:

MIPS32 Anweisungen sind immer 32 Bit lang. Daher sollte jeder Befehl an einer Wortgrenze beginnen. Das Hinzufügen einer .align-Anweisung vor dem Start des Codes richtet die Objekte auf 32 Bit aus. Dies hat viele Vorteile, einschließlich, dass es nur einen Speicherzugriff für den Abruf der Anweisung benötigt, und dass es wahrscheinlich nützlich für den Befehlscache ist.

+0

Wie wäre es, doppelte Float auf Stack zu speichern? Es benötigt 8 Byte Ausrichtung richtig? –

+0

Ja, verdoppelt sich auf 64 Bits – Tom