2013-02-23 752 views
7

Die meisten Assembly-Programme verwenden die 4 allgemeinen Register eax ebx ecx edx, aber ich finde, dass ich ziemlich oft mehr als 4 Register brauche, um meine Aufgabe ohne push und pop zu erfüllen vom Stapel zu viel. Da mein Programm keine Absicht hat, die FPU- oder MMX-Register für Fließkomma-Berechnungen oder deren "beabsichtigte Verwendung" zu verwenden, wird es als akzeptabel angesehen, diese zusätzlichen Register in Ihrem Programm zu verwenden?Verwenden von FPU und MMX-Registern als "allgemeine Register"

Eg. Verwenden Sie xmm0 für einen Schleifeninkrement-Zähler, der das ecx Register freigibt, um andere Dinge zu tun.

+0

Sie können so ziemlich machen, was Sie wollen. Wenn Sie feststellen, dass die Verwendung der xmm-Register schneller ist als das Verschütten auf den Stack, gehen Sie dafür vor. – Mysticial

+2

@Mysticial Selten sagt mir jemand "Ich kann tun, was ich will" in Bezug auf die Programmierung. Ich grabe es :) – user99545

+1

x86_64 hat 8 zusätzliche Register für den allgemeinen Gebrauch. –

Antwort

3

Warum vier? Sie können all diese verwenden: eax, ebx, ecx, edx, esi, edi und ebp. Das sind sieben. Oder ist das auch nicht genug?

FPU- und MMX-Register sind etwas umständlich, da sie nur von sich selbst und dem Speicher geladen werden können und nur für sich und den Speicher gespeichert werden. Sie können nicht frei Daten zwischen ihnen und allgemeinen Registern bewegen, noch gibt es Anweisungen, die in der Lage sind, auf beiden Arten von Registern gleichzeitig zu arbeiten.

Wenn sieben allgemeine Register nicht ausreichen, verwenden Sie lokale/on-stack-Variablen. Zum Beispiel können Sie eine Zählervariable im Speicher direkt dekrementieren und Sie können sie auch direkt mit einer Konstanten oder einem anderen Register vergleichen. Wahrscheinlich wird dies nicht langsamer (wahrscheinlich, schneller) als FPU oder MMX-Register auf seltsame Weise.

+0

Nein, sieben Register sind nicht so schnell wie alle Register. MMX-Register können sehr nützlich sein. –

+0

@BenVoigt Aufwendig? –

-2

Weel gibt es auch SI und DI, und auf x64 haben Sie zusätzliche Register, aber Sie können die FP-Register für was auch immer Sie wollen.

0

Wie oft benötigen Sie volle 32 Bits eines Registers? Für Dinge wie kleine Zähler können Sie frei Byte-Viertel der allgemeinen Register verwenden: AH/AL, BH/BL, CH/CL, DH/DL. Mit einigen bitweisen Tricksereien können Sie auch die oberen 16 Bits von Allzweckregistern als Zwischenspeicher für wortgroße Variablen verwenden.

Im Real-Modus (siehe unter DOS) können Sie auch die Segmentregister ES, FS und GS als Zwischenspeicher verwenden. Unter einem geschützten Betriebssystem (Windows, Linux, * nix) wird der Code jedoch abstürzen.