JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=1718654df039521ce6deb503487a0913Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

[Inline-ASM] Variablen aus Klasse in Register

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
FH
Super JLI'ler


Alter: 36
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 07.05.2005, 20:50    Titel: [Inline-ASM] Variablen aus Klasse in Register Antworten mit Zitat

CPP:
class CTest
{
public:
    static inline void Func()
    {
        __asm mov eax,Var
        //[...]
    }

    static unsigned int Var;
};

Ich will die Variable Var in den Register eax kriegen... Das geht aber nicht. Der meckert, dass sei ein unzulässiges Symbol.
Wenn ich das nicht hinkriege, muss ich 2 lokale Variablen definieren, und einen timeGetTime-Aufruf mehr machen... Is also wichtig! Wink
Die Funktion wird mehrmals pro Frame aufgerufen... Also is es wirklich wichtig! Wink
Gruß

FH
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 07.05.2005, 21:12    Titel: Antworten mit Zitat

Bei Klassen geht das nicht, da kommst Du nicht mit durch den StackCheck. Möglichkeit ist die Adresse auf einen Pointer:
CPP:
class CTest
{
public:
    inline void Func()
    {
        static unsigned int *temp =&Var;
        __asm mov eax,temp
        //[...]
    }

    static unsigned int Var;
};
Wie ich es in meiner Mathlib z.B. gemacht habe:
CPP:
inline basic_vector<float> basic_vector<float>::crossProduct (const basic_vector<float> &other) const
{
        // Static bringt speed
    static basic_vector<float> result;
    static float* p_result = (float*)&result;

        // Kreuzprodukt ziehen
    __asm { mov     ecx, this        };
    __asm { movups  xmm0, [ecx]      };
    __asm { mov     edx, other       };
    __asm { movaps  xmm2, xmm0       };
    __asm { shufps  xmm0, xmm0, 0xC9 }; // 11001001
    __asm { movups  xmm1, [edx]      };
    __asm { shufps  xmm1, xmm1, 0xD2 }; // Shuffle zu: 11010010
        //
    __asm { mulps   xmm0, xmm1       };
    __asm { shufps  xmm2, xmm2, 0xD2 }; // 11010010
    __asm { mov     eax, p_result    };
    __asm { shufps  xmm1, xmm1, 0xD2 }; // Shuffle zu: 11010010 (11001001)
        //
    __asm { mulps   xmm2, xmm1       };
        //
    __asm { subps   xmm0, xmm2       };
    __asm { movups  [ eax ], xmm0    };

        // W auf 1 setzen
    result.w = 1.0f;

    return (result);
}


static vor die Variable und gut ist Smile es wird beim 1. Funktionsaufruf initialisiert und die Speicherverknüpfung bleibt bis zum Ende des Programms aufrecht.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
FH
Super JLI'ler


Alter: 36
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 08.05.2005, 11:28    Titel: Antworten mit Zitat

Gute Idee!!! Danke!
Gruß

FH
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
FH
Super JLI'ler


Alter: 36
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 09.05.2005, 10:47    Titel: Antworten mit Zitat

Nochmal ne Frage:
CPP:
static unsigned int* temp=&Var;
__asm mov eax,temp

Wenn ich Var anreden will, dann kann ich doch nicht den Zeiger darauf verwenden, oder? Dann bewege ich doch die Adresse statt dem Inahlt am Ziel der Adresse in den eax, oder? Oder bin ich gerade total durcheinander?
Gruß

FH
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 09.05.2005, 11:53    Titel: Antworten mit Zitat

learning by doing Wink
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum