ASM in unmanaged C++ Klasse als Teil eines /clr Projektes



  • Hallo Community,
    ich möchte gerne eine FFT , die spezielle FPU Kommandos verwendet als x86 asm Routine in einer unmanaged C++ Klasse verwenden, die dann Bestandteil eines managed Projektes ist (/clr in VS2008). Mit den hier und da im Netz vorhandenen Informationen bin ich schon mal soweit gekommen, dass überhaupt erstmal Zugriffe von und zu Klassenmember Variablen aus dem asm block mit mov Befehlen möglich ist. Allerdings scheint das Ganze bei dem asm Befehl „fld“ nicht so einfach zu funktionieren. Hier mal meine Try and Errors:

    class DoSomething {
    float VAR;
    
    void Crash1() {
      __asm{
        fld [this].VAR
    }
    void Crash2(void * thisPointer) {
      __asm{
        fld [thisPointer].VAR
      }
    }
    void Geht1() {
    __asm {
       mov ecx, [this]
       fld [ecx].VAR
      }
    }
    void Geht2(void * thisPointer) {
    __asm {
       mov ecx, [thisPointer]
       fld [ecx].VAR
       }
    }
    void Naja() {
     float locVAR;
     locVAR = VAR
     __asm{
       fld locVAR
     }
    }
    
    DoSomething() {
      VAR = 1.0;
      Crash1();
      Crash2(this);
      Geht1();
      Geht2(this);
      Naja();
     }
    };
    
    

    Crashen tut es immer aufgrund einer Memory Accessviolation - vermutlich weil nicht die richtige Addresse übergeben wird. Da leider alle Register in der FFT Routine verwendet werden kann ich die Variante "Geht" nicht verwenden (bzw. müsste dann erhebliche Änderungen am eigentlich sehr schnellen FFT Code vornehmen). Die Variante "Naja" will ich mal aus Performancegründen ausklammern. Da meine beschränkten Kenntnisse aus dem Mikrokontrollerkosmos mir hier nicht mehr weiterhelfen würde ich mich über hilfreiche Kommentare von Euch sehr freuen.


Anmelden zum Antworten