Turbo C 2.01 und Inline ASM



  • Hallo,
    Wenn ich in TurboC 2.01(tcc.exe) Inline Assembler benutze bekomme ich dauernd die Fehlermeldung Inline-Assembly not allowed in function test (main, wo ich´s halt benutze).
    z.B.:

    void Test1()
    {
        asm xor ax,ax
    }
    
    int main()
    {
        Test1;
        return(0);
    }
    

    Fehler: Inline Assembly not allowed in function Test1
    Weshalb kommt diese Fehlermeldung, hab ich was übersehen?

    Wenn ich das mit tc.exe -noname.c compiliere gehts.
    Wie kann ich Inline Assembler nutzen ohne jedes mal asm davor schreiben zu müssen, gibts sowas wie __asm{mov sub add und was es nicht alles gibt}

    thx im Voraus
    Noob

    [ Dieser Beitrag wurde am 29.07.2002 um 06:26 Uhr von noob editiert. ]



  • Das Keywort hießt einfach asm! Ist halt bei jedem Compiler anders. 😞

    Aber - damit kannst du bei Turbo C nur Assembler-Code in den C-Code einfügen, nicht assemblieren. TC hat nämlich keinen eigenen Inline-Assembler, sondern ruft zur Übersetzung des Inline-ASM-Code den Turbo Assembler auf. Du mußt also TASM installiert haben und einen PATH zu ihm gelegt haben, damit TC ihn finden und aufrufen kann.

    Es gibt aber freie C Compiler für DOS, du einen Inline Assembler haben.



  • Das mit Tasm weiss ich, die tasm.exe liegt bei mir im selben Verzeichnis wie tcc.exe und tc.exe, damit gibts kein Problem.
    Das Prob is nur: Fehler: Inline Assembly not allowed in function Test1
    und dass ich jedes mal asm davor schreiben muss, asm{} währe super oder sowas ähnliches halt

    mfg
    Noob



  • Zunächst einmal haben wir uns ein bißchen mißverstanden. Mein Hinweis asm bezog sich auf deinen letzten Satz, in dem du nach __asm { ... } oder so was fragtest. Bei TC heißt das eben asm { ... } (das meinte ich), womit diese beiden Formen möglich sind:

    void Test1()
    {
        asm xor ax,ax
    }
    

    oder

    void Test1()
    {
        asm {
           xor ax,ax
        }
    }
    

    ------------

    Warum dein Compiler inline-assembling verweigert, ist mir allerdings schleierhaft. Ich benutze TC ++ 1.0, also den Nachfolger von TC 2.01, und da wird dein Code anstandslos übersetzt.

    Vielleicht probierst du es mal mit dem TC ++ 1.0? Vlleicht klappts ja mit dem? Besser ist der sowieso (z. B. kanst du bei der IDE die Maus benutzen). TC ++ 1.0 gibts kostenlos bei Borland (2 MB Download).



  • grosses thx und sorry für´s Misstverständnis.
    genau nach diesem
    asm
    {
    blabla
    }

    habe ich gesucht. Ich werde mal den TC++1.0 runterladen.

    thx und mfg
    Noob



  • Der TC++ 1.0 funktioniert super, aber anfangs hatte ich das gleiche Problem. Allerdings habe ich meinen Fehler gefunden.

    void Test1()
    {
        asm
        {
            xor ax,ax
            mov bx,0009H
        }
    }
    

    Dieser Code ging nicht, hingegen folgender sich fehlerfrei compilieren lässt:

    void Test1()
    {
        asm{
            xor ax,ax
            mov bx,0009H
        }
    }
    

    ich wusste einfach nicht dass man die Klammer direkt danach schreiben muss. Ich war´s von VC++ immer mit __asm gewohnt, nochmals thx jetzt funktioniert alles.

    mfg
    Noob


Anmelden zum Antworten