NASM in das Visual Studio 2005 einbinden ??



  • PS Wenn Du fak_rekam von C++ aufrufen willst muss dort

    extern "C" void  fak_rekam();
    

    stehen!



  • freak11 schrieb:

    PS Wenn Du fak_rekam von C++ aufrufen willst muss dort

    extern "C" void  fak_rekam();
    

    stehen!

    Na in C++ muss eine Funktion die einen Parameter übernimmt und einen zurückliefert dann doch wohl so aussehen:

    extern "C" int  fak_rekasm(int);
    

    😉



  • danke für eure antworten,
    ich habs mal ausprobiert, bekomme aber leider immer die gleichen fehler beim compilieren. vlt liegt es an der version, die ich nutze: Visual Studio pro 2005
    jetzt meckert er halt nicht mehr über die asm-file, sondern eher über:
    fatal error C1010: Unerwartetes Dateiende während der Suche nach dem vorkompilierten Header. Haben Sie möglicherweise vergessen, im Quellcode "#include "stdafx.h"" einzufügen?
    wenn ich jetzt aber die stdafx.h einbinde bekomme ich folgenden fehler:
    fatal error C1853: Die vorkompilierte Header-Datei "Debug\ASS.pch" stammt von einer früheren Version des Compilers, oder der vorkompilierte Header stammt von C++, und Sie verwenden Ihn von C (oder umgekehrt)
    weiß einer von euch, was man dagegen tun kann?
    die c-file sieht wie folgt aus:

    #include <stdio.h>
    #include "stdafx.h"
    
    extern "C" int fak_rekasm(int);
    
    int main(void){
    
      int n = 4;
      int erg1 = fak_rekasm(n);
    
      printf("\nAufruf von fak_rekasm(%d) = %d\n", n, erg1);
    
      return 0;
    
    }
    

    heimschmiede



  • stdafx.h muss als erstes in der Datei stehen, stdio.h wird in stdafx.h eigendlich bereits eingebunden.



  • Wenn das ne *.c File sein soll hat extern "C" da nichts zu suchen, das ist C++ - in C bloss extern int func(int) schreien und stdafx.h in 'ner c-datei hab ich noch nie gesehen.



  • moinsen,
    ich habs jetzt mal ausprobiert ohne das "C", aber ich bekomm immer die gleichen Fehler.
    ich meine, mein Programm ist ja nur ein Bsp-Proggl. Könnt ihr mir einfach mal die Quelltexte eines ganz einfachen Beispiels senden, in dem man eine in ner asm-file (MASM) definierten Funktion in C einbindet ?
    die beispiele der msdn sind irgendwie anders gebaut. Dort wird ständig mit dem Schlüsselwort PROC rumgebastelt.
    das programm muss ja nix wesentliches tun. einfach nur nen integer übergeben bekommen und inkrementiert zurückgeben oder so.
    Das wäre sehr cool!

    heimshcmiede



  • Deine rekursive Fakultätsfunktion in Assembler fak_rekasm: ist in Ordnung proc muss man da nicht schreiben.
    Hab ich selbst getestet - sie funktioniert, lässt sich aus C++ (extern "C")und C (extern) aufrufen.
    Du machst irgendwo was falsch.
    Du musst die Fehler posten die du erhältst - damit man dir helfen kann!
    Deine Funktion mal als proc :

    .586               ; Prozessor .586 
    .model flat, c     ; Kompatibel zu Sprache C   in C++ Dateien mit extern "C" fak_rekasm   deklarieren! 
    
    .code              ; Codesegment  es gibt noch .data, data? und .const 
    
    ;****************************************************** 
    ; Rekursive Berechnung der Fakultaet 
    ;****************************************************** 
    
    ; Aufrufparameter in eax ablegen und fak_rek aufrufen 
    
                    public fak_rekasm 
    
    option prologue:none 
    option epilogue:none 
    
    fak_rekasm proc para:dword
    
        push ebp 
        mov ebp, esp 
        mov eax, para 
    
        call fak_rekursive 
    
        pop ebp 
        ret 
    
    ; Eigentlich Funktion 
    
    fak_rekursive: 
        cmp eax, 1 
        jg groesser_1 
        mov eax, 1 
        ret 
    
    groesser_1: 
        push eax 
        dec eax 
        call fak_rekursive 
        pop ecx 
        mul ecx 
        ret 
    
    fak_rekasm endp
    
        end
    

    mfg



  • bei mir klappt es leider nicht. ich hab irgendwie das gefühl, dass irgendeine einstellung im vs2005 nicht korrekt läuft. ich bekomme immer die gleichen fehlermeldungen:

    Heimschmiede schrieb:

    jetzt meckert er halt nicht mehr über die asm-file, sondern eher über:
    fatal error C1010: Unerwartetes Dateiende während der Suche nach dem vorkompilierten Header. Haben Sie möglicherweise vergessen, im Quellcode "#include "stdafx.h"" einzufügen?
    wenn ich jetzt aber die stdafx.h einbinde bekomme ich folgenden fehler:
    fatal error C1853: Die vorkompilierte Header-Datei "Debug\ASS.pch" stammt von einer früheren Version des Compilers, oder der vorkompilierte Header stammt von C++, und Sie verwenden Ihn von C (oder umgekehrt)

    diese beiden fehler bekomm ich leider immernoch.
    was ich aber komisch finde ist, dass die bsp-asm-projekte aus der msdn alle funktionieren. ich habe aber keine anders eingestellte eigenschaften gefunden.
    @freak11: leider funktionniert der von dir geändertem Quelltext auch nicht.

    heimschmiede



  • ahhh! ich habs hinbekommen !
    im projekt musste ich die eigenschaft "vorkompilierten Header verwenden" ausschalten.
    und wenn man tatsächlich den vorkompilierten header nutzen will und in c++ schreibt muss tatsächlich die stdafx als aller erstes eingebubunden werden! (dank an tip)
    naja, war wohl eher ein VS-problem, anstelle eines assembler-problems. Danke nochmal an euch alle und die Mühe !
    ich werde später noch einen neuen thread aufmachen zur syntax vom masm 🙂

    heimschmiede



  • Hallo,

    versuche mich auch mit asm in Visual Studio. werde aber extern auf der CommandoZeile kompilieren müssen. Ist für mich auch Ok.

    Aber ich brauche Syntax Coloring. Bekommt ihr das hin? Wenn ja wie?

    Grüßle


Anmelden zum Antworten