Multiplikation per Inline-Assembler-Anweisung



  • Hi.

    Wie davie schon sagte, benoetigst du fuer eine Multiplikation von integer*integer (je 32Bit breit) die 32Bit-Register (eax und ebx statt ax und bx in deinem Code).
    Je nachdem, ob deine Variable signed/unsigned ist, solltest du die Instruktionen imul/mul verwenden.

    Fuer Multiplikation von reals/floats etc. muesstest du mit der FPU (FloatingPointUnit) arbeiten.

    Das koennte zB. so aussehen (keine Garantie - hab ich mir nur aus den Fingern gesaugt 😉 ) :

    finit ;initialisieren
    fwait ;warten
    fld faktor1 ;faktor 1 laden
    fmul faktor2 ;multiplizieren
    fstp produkt ;in variable speichern und aus fpu loeschen
    

    BTW: Sowohl Borland, als auch Microsoft bieten eigenstaendige Assembler an:
    Borland den TASM (<=wird AFAIK seit 1996/1997 nicht mehr aktualisiert, ist aber durchaus gut und brauchbar - KEINE Freeware) und Microsoft den MASM (<= taugt IMHO nichts).
    NASM ist ansonsten aktuell, freeware, open Source und einen Link zum Download gibt's auch in den FAQ. 🙂



  • Nobuo T schrieb:

    BTW: Sowohl Borland, als auch Microsoft bieten eigenstaendige Assembler an:
    Borland den TASM (<=wird AFAIK seit 1996/1997 nicht mehr aktualisiert, ist aber durchaus gut und brauchbar - KEINE Freeware)

    Das ist nicht richtig.
    Borland bietet seinen TASM Assembler schon seit einigen Jahren kostenlos
    als Geschenk an die Borland Community auf ihrer Webseite zum downloaden an:

    http://community.borland.com/article/0,1410,21751,00.html

    NASM ist ansonsten aktuell, freeware, open Source und einen Link zum Download gibt's auch in den FAQ. 🙂

    NASM ist keine freeware, sondern Free Software!
    Freeware und Free Software sind zwei ganz verschiedene Dinge.



  • @sdf: Bei deinem Link kommt man zur Seite von Turbo C++ 1.01. 😕



  • jkl schrieb:

    @sdf: Bei deinem Link kommt man zur Seite von Turbo C++ 1.01. 😕

    Oh je, was habe ich heute gegessen? 🙄

    Du hast recht, ich nehme alles zurück.



  • Nobuo T schrieb:

    und Microsoft den MASM (<= taugt IMHO nichts).

    wie kommst du da drauf?



  • asm-coder schrieb:

    Nobuo T schrieb:

    und Microsoft den MASM (<= taugt IMHO nichts).

    wie kommst du da drauf?

    Testen.
    Dieses Scriptsprachenaehnliche Gemurxe beim MASM finde ich nunmal... ...nicht schoen. 😉
    Genausowenig wie das sonstige Handling dieses Assemblers bzw. des Zubehoers.



  • Ich geb zu, dass die Makros nicht jedermanns Sache sind, aber deshalb ist doch nicht gleich der Assembler schlecht. Und wenn dir das Handling nicht gefällt, könntest du auch andere Tools benutzen (RadAsm, WinAsm Studio.... ) - oder meintest du etwas anderes mit 'Tools' außer QEdit?



  • as-coder schrieb:

    Ich geb zu, dass die Makros nicht jedermanns Sache sind, aber deshalb ist doch nicht gleich der Assembler schlecht.

    IMHO schon, denn die uebrige Syntax gefaellt mir persoenlich auch nicht. :p

    as-coder schrieb:

    Und wenn dir das Handling nicht gefällt, könntest du auch andere Tools benutzen (RadAsm, WinAsm Studio.... ) - oder meintest du etwas anderes mit 'Tools' außer QEdit?

    Noe, solche "IDEs" fuer einen Assembler halte ich sowieso grundsaetzlich schonmal fuer Unfug - ich meinte eher zB. den Debugger "CodeView".

    Kurz: Ich mag den MASM nunmal nicht und das schon eine ganze Weile (eigentlich seitdem ich mit dem Teil das erste Mal zu tun hatte 😃 ).
    Angesichts so schoener Alternativen wie dem NASM stehen die Chancen dann auch eher schlecht, dass du mich vom Gegenteil Ueberzeugen kannst. 😉



  • Das Ergebnis steht in dopelter breite in DX:AX (16-Bit-Multiplikation) bzw. EDX:EAX (32-Bit-Multiplikation)



  • sdf schrieb:

    NASM ist keine freeware, sondern Free Software!
    Freeware und Free Software sind zwei ganz verschiedene Dinge.

    Trotzdem schliesst das eine das andere nicht aus. NASM ist, wie die meiste andere freie Software, auch Freeware. Oder muss man fuer die Benutzung bezahlen?


Anmelden zum Antworten