IF Schleife mit NASM



  • Hallo Gemeinde,

    hier erstmal der Code für NASM:

    mov ebx, 44d
    
            %if ebx != 44d
            		mov dx, meldung1
            		call prints
            %else
            		mov dx, meldung2
            		call prints
            %endif
    

    Er zeigt mir immer meldung1 auf dem Schirm, obwohl ebx gleich 44d ist.
    In MASM klappt das etwas besser.

    mov ebx, 44d
    
            .if ebx != 44d
            		mov dx, offset meldung1
            		call prints
            .else
            		mov dx, offset meldung2
            		call prints
            .endif
    

    Hier wird meldung2 ausgegeben. Worauf muss ich bei NASM achten, bzw. was hab ich vergessen?

    Nicky



  • Ich weiss zwar nicht, was eine IF-Schleife sein soll, aber fuer bedingte Ausfuehrung von Codebloecken gibt es in x86-Assembler Kombinationen von Befehlen zum Testen von Bedingungen (test, cmp, usw.) und bedingte Spruenge (jxy).

    Assembler bringen idR. auch eine Art Praeprozessor (vgl. C) zum Verarbeiten einfacher Macros mit.
    MASM (Macro Assembler) baut diese Funktionen aus und bietet so von Haus aus Moeglichkeiten, in einer Art wirrer Mische aus Assembler und einer Script-/Hochsprache zu programmieren. Standard ist das aber nicht. NASM trennt z.B. strikt zwischen Praeprozessor und Assembler und kann so auch nicht wissen, was ein Register ist oder was du in deinem ASM-Code irgendwann mal dort rein geschrieben hast.
    Evtl. hat jemand Macros fabriziert, die dir ein Aehnliches Gefrickel wie mit MASM erlauben, mit Bordmitteln geht das AFAIK aber so nicht.



  • Ja, finde diese If Statements und andere Hochsprachenelemente (außer Funktionsaufrufe, libs)) auch ziemlich überflüssig bei Assembler, als obs schwere wäre, mit cmp x,y ...kann sich wohl wieder einer die jumps nicht richtig merken...;)

    cmp ebx,44dh
    jz woanders hin...
    lea edx, meldung1
    Ausgabe
    Ende Gelände
    
    woanders:
    lea edx, meldung2
    Ausgabe
    Ende Gelände
    

    Ich hätte mir das Problem oben einfach mal im Debugger angesehen. Man weiß ja hier nicht genau, was sonst noch drumherumsteht.



  • Hallo,

    die Jumps kann ich mir merken... Ich nutze diese Vereinfachung jedoch um einzelne Schleifen vor Übernahme in das Programm zu testen.

    z.B um irgendwo im Quelltext den Wert eine Variablen abzufragen. Das geht damit wesentlich einfacher und ist übersichtlicher.

    Im "Endprodunkt" stelle ich die Bedingungen auf CMP um.

    Nicky



  • supernicky schrieb:

    Hallo,

    die Jumps kann ich mir merken... Ich nutze diese Vereinfachung jedoch um einzelne Schleifen vor Übernahme in das Programm zu testen.

    z.B um irgendwo im Quelltext den Wert eine Variablen abzufragen. Das geht damit wesentlich einfacher und ist übersichtlicher.

    Im "Endprodunkt" stelle ich die Bedingungen auf CMP um.

    Nicky

    Ich sehe jetzt aber irgendwie keine Vereinfachung, oder verstehe sie nicht, vor allem, wenn ich den Quellcode hinterher auch nochmal umschreiben muß. Wie wäre es mit strukturierterem und pointierterem kommentierten Quellcode? Den braucht man übrigens auch, um zu Lernen, effizienter und fehlerfreier Assembler zu programmieren. Dies sei aber nur als Warnung gesagt, ich will niemandem aufzwingen, wie er sich die Dinge für sich selbst einfacher zu gestalten hat.



  • [quote="nachtfeuer"]

    supernicky schrieb:

    Wie wäre es mit strukturierterem und pointierterem kommentierten Quellcode?

    Was das den sein 😕



  • OMFG schrieb:

    nachtfeuer schrieb:

    Wie wäre es mit strukturierterem und pointierterem kommentierten Quellcode?

    Was das den sein 😕

    na, z.B. sowas, wie dass man ein Zitat mit [/quote] abschließt, und dabei den richtigen Autor des Textes zitiert.


Log in to reply