Frage zu MASM inkey



  • Hi, ich habe gerade mit MASM angefangen und habe direkt eine Frage zu inkey
    Mein Programm sieht im Moment so aus:

    INCLUDE \masm32\include\masm32rt.inc
    
    .386
    .MODEL flat,stdcall
    OPTION casemap :none
    
    .CODE
    start:
      call main
    
    main PROC
    
        inkey
        ret
    
    main ENDP
    
    END start
    

    Wenn ich inkey weglasse, schließt sich die Konsole sofort. Wenn ich inkey jedoch reinschreibe, bekomm ich zwei mal die Meldung, dass ich die eine Taste drücken soll. Wieso ist das so?



  • es verhält sich genauso wie du es programmiert hast ... wenn vielleicht auch nicht absichtlich 😉



  • Und wieso verhält es sich so? 😉



  • _D schrieb:

    Und wieso verhält es sich so? 😉

    gehe Es doch mal in einem Debugger durch 💡



  • Ein Assembler macht sich nichts aus impliziten Grenzen von Strukturen wie Prozeduren oder Datendeklarationen.
    Dh. der Assembler uebersetzt deine Quellcodes idR. wort-woertlich und baut auch keine DAU-Sicherungen ein. Die CPU selbst rennt dann solange gleichgueltig ueber alles drueber, sei es gueltiger Code, Daten oder einfach uninitialisierter RAM, bis sie durch Ausnahmefehler o.Ae. gestoppt wird.
    Aus diesem Grund ist das Anlegen von Variablen mitten zwischen Code in Hochsprachen vielleicht usus, in Assembler meist aber eine bloede Idee...

    Wenn du deinen Code im Debugger betrachtest, wirst du sehen, dass direkt nach "call main" der Code von main selbst steht - und der wird nach der Rueckkehr aus main dann eben nochmal ausgefuehrt. Das ret beendet dann dein Programm...


Anmelden zum Antworten