Aufbau von Assembler-Programmen



  • Hallo,

    muß ich das so schreiben?

    SEG   SEGMENT
          ASSUME CS :SEG ,DS:SEG
          mov ax,SEG
          mov ds,ax
    

    Wenn ich die zwei mov Anweisungen weglasse erhalte ich keine Fehlermeldung. In den Beispielprogrammen ist das aber immer so programmiert.

    Sollte ich jedes Assemblerprogramm mit folgenden Anweisungen beenden?

    mov ah,4Ch
    int 21h
    

    Ich habe gelernt, dass diese Befehlsfolgen die Kontrolle wieder an das Betriebssystem zurückgeben. Das Fehlen der Zeilen meckert mein Assembler aber nicht an.

    Vielen Dank für Eure Hinweise.

    Gruß



  • Hallo,

    das Semikolon im ersten Listing habe ich nicht geschrieben. Ich kann mir nicht erklären wie es in den Code-Ausschnitt gekommen ist. 😮

    Gruß



  • Hi.

    Asus schrieb:

    muß ich das so schreiben?

    "muessen" tust du gar nichts. Je nachdem, wie dein Programm aufgebaut ist, waere es aber sinnvoll, die Segmentregister beim Eintritt in ein neues Segment ebenfalls neu zu setzen.

    Asus schrieb:

    Sollte ich jedes Assemblerprogramm mit folgenden Anweisungen beenden?

    Nein. Wenn du das zB. in einem Linux- oder Win32-Programm versuchst, gibt's Chaos. Hier muss eine Funktion aus der entsprechenden API verwendet werden.

    DOS .exe-Dateien sollten - wenn sie nicht im Speicher resident bleiben sollen o.ae. - mit diesen von dir genannten Anweisungen beendet werden. Um einen Fehlercode an DOS zurueckzugeben, kann hier das al-Register verwendet werden.
    Wenn der Fehlercode nicht wichtig ist, gibt es noch andere Moeglichkeiten, ein DOS-Programm zu beenden.

    [edit:]Zu den Semikola im Code: Ist ein Fehler in der Forumssoftware. Wird wohl irgendwann noch gefixt... :D[/edit]



  • Nobuo T schrieb:

    [edit:]Zu den Semikola im Code: Ist ein Fehler in der Forumssoftware. Wird wohl irgendwann noch gefixt... :D[/edit]

    Surf in der dev-Version. 🙂



  • Nobuo T schrieb:

    [...]wenn sie nicht im Speicher resident bleiben solle[...]

    Wenn ich das richtig verstehe bedeutet das also, dass ein Programm, das (unter DOS) nicht wie beschrieben beendet wird, im Speicher bleibt und dieser Platz nicht mehr genutzt werden kann? Das bedeutet dann aber doch, dass man damit einfach den Speicher mit Datenmüll vollhauen kann...



  • Hi.

    Du hast da das nicht unbedeutende Anhaengsel "o.ae." uebersehen. Steht fuer "oder aehnliches" 😉 => sollte nur ein Beispiel fuer moegliche Umstaende bei der Beendung von Programmen sein.
    Normalerweise gibt DOS den Speicher eines Programms nach dessen Ende zum Abschuss frei - es sei denn, man benutzt eine bestimmte DOS-Funktion um das Programm erstmal zu beenden, jedoch den Speicher weiter reserviert zu lassen. (z.B. machen das DOS Treiber so)

    Speicher mit Datenmuell zupappen geht unter DOS aber auch so hervorragend - hier gibt es schliesslich keine Schutzmechanismen. 😃


Log in to reply