MASM Code assembliert nicht



  • hi 🙂
    in meinem ASM Buch "Assembly Language for Intel Based Computers Fourth Edition" ist dieses hier das erste Beispiel:

    TITLE Add and Subtract (first.asm)
    
    ; this program adds and subtracts integers
    
    INCLUDE Irvine.inc
    
    .code
    main PROC
    
        mov eax, 10000h
        add eax, 40000h
        sub eax, 20000h
        call DumpRegs
    
        exit
    
    main ENDP
    END main
    

    das kann ich aber leider nicht assemblieren, da es den END Punkt nicht findet, aber er ist doch da? Wie kann der Code aus dem Buch falsch sein? Ich benutze
    den aktuellsten MASM und arbeite mit der Mitgeliferten IDE MASM32 Editor



  • hat sich erledigt



  • neues Problem: ich will in mein Programm einbaun, das die Console nicht sofort zugeht mit interrupt 16h:

    TITLE Add and Subtract (first.asm)
    
    ; this program adds and subtracts integers
    
    INCLUDE Irvine32.inc
    includelib "irvine32.lib"
    
    ExitProcess PROTO,dwExitCode:DWORD
    DumpRegs PROTO
    
    .code
    main PROC
    
        mov eax, 10000h
        add eax, 40000h
        sub eax, 20000h
        call DumpRegs
    
        xor ax, ax   ; ax = 0
        int 16h     ; -> Interrupt 0x16, Funktion 0
    
        exit
    
    main ENDP
    END main
    

    Leider crashed das programm jetzt. Woran liegt das?



  • *MagischeKristallkugelBeschwoer* ... 😮
    Ich sehe: Du versuchst ein Programm fuer Windows zu schreiben, in dem du diesen BIOS-Interrupt-Aufruf verwendest. Das BIOS ist aus Windows heraus im Grossen und Ganzen nicht mehr erreichbar. Der Versuch es aufzurufen (besonders ueber RealMode-Interrupts) crasht dein Programm.
    In Windows-Programmen musst du mit der WinAPI arbeiten.



  • es ist ein console Projekt. Wie mache ich sowas unter windows?



  • Ich denke die einfachste Loesung waere, dein Programm in der Console aufzurufen, statt durch Doppelklick.
    Sehr wahrscheinlich wird der Autor in seinem Buch spaeter noch auf den Umgang mit der WinAPI eingehen - ich schlage vor, du liest es dann dort nach.



  • ok danke, mache ich. Noch was anderes:
    Warum läuft der Code hier:

    TITLE first program (firstasm.asm)
    
    INCLUDE Irvine32.inc
    .code
    main PROC
    
    	mov eax, 10h
    
    main ENDP
    END main
    

    ohne das INCLUDE Irvine32.inc nicht? Ich will mich ja nicht auf irgendwelche includedateien spezialisieren. wenn ich das INCLUDE weglasse, bekomme ich seltsame fehler. (MASM)



  • hab mittlerweile herausgefunden, dass ich noch .386 .model etc brauche


Anmelden zum Antworten