MASM vs NASM



  • achso jetzt klappt es, danke.
    es klappt aber auch mit mov ah, 0 ? Also das mit der Eingabe.
    Und warum hat das Programm 2 ende ? Einmal ende und end start



  • in meinem Tutorial is das auch grade drangekommen:

    mov AH, 00h                ;Wenn wir ah = 1 setzen warten wir auf eine Tastatureingabe
      add AH, 01h                ;von 1 Zeichen. Das Zeichen steht nach dem INT 21h in al
      INT 21h                    ;aber das ist f?r uns hier unwichtig... ;)
    

    warum wird hier int 21h aufgerufen und das andere ist int 16h?



  • mario1981 schrieb:

    es klappt aber auch mit mov ah, 0 ? Also das mit der Eingabe.

    Funktionsnummern werden fuer die meisten DOS und BIOS Funktionen (wie diese hier) ueber das Register ah ausgewaehlt. Wird ax auf 0 gesetzt, wird ah als Teil von ax natuerlich auch 0.
    xor ax, ax ist klein und schnell, deshalb verwende ich es an dieser Stelle gern, statt ah einzeln auf 0 zu setzen.

    mario1981 schrieb:

    Und warum hat das Programm 2 ende ? Einmal ende und end start

    Hat es nicht. "ENDE:" ist einfach ein Label, das hier noch nicht einmal weiter verwendet wird. Der Name eines Labels ist weitgehend frei waehlbar und absolut willkuerlich.
    "END" kennzeichnet fuer TASM das Ende des Programms. Dahinter folgt der Name des Einstiegslabels, an dem das Programm startet.

    mario1981 schrieb:

    warum wird hier int 21h aufgerufen und das andere ist int 16h?

    Mit int 16h werden BIOS-Funktionen aufgerufen, int 21h sind Funktionen von DOS.
    Funktion 1 von int 21h tut wohl praktisch das gleiche wie Funktion 0 von int 16h. Welche von beiden du in DOS benutzt, ist in diesem Fall recht egal. Wird stdin, von dem Funktion 1 von int 21h AFAIR liest, nicht umgeleitet, wird hier intern moeglicherweise auch nur int 16h aufgerufen.


Anmelden zum Antworten