kostenloser Webspace werbefrei: lima-city


Assembler: Register sichern vor Makro Aufruf

lima-cityForumProgrammiersprachenSonstige Programmiersprachen

  1. Autor dieses Themas

    ttobsen

    Kostenloser Webspace von ttobsen

    ttobsen hat kostenlosen Webspace.

    Hi

    Ich übe gerade ein wenig Assembler Programmieren und stoße hier auf eine Aufgabe in einem Buch.

    Es wird ein Makro definiert mit folgendem Code:

    TASTE_ECHO_AL    MACRO
                     PUSH BX
                     MOV BH, AH
                     MOV AH, 01h
                     INT 21h
                     MOV AH, BH
                     POP BX
                     ENDM


    Das Ziel soll sein, dass bevor man den Interupt 21h aufruft, das Register AH sichert. Es könnte ja sein das der Inhalt nach Aufruf des Makros wieder benötigt wird. Mittels der Zeile MOV AH, 01h wird der Inhalt aber überschrieben.

    Dazu wird nun also BX auf dem Stack gesichert, der BH Teil davon mit AH überschrieben um anschließend wieder BH in AH zu schrieben und BX wieder vom Stack zu holen.

    In meinen Augen ist das aber irgendwie doppel gemoppelt, wiesp kann man nicht einfach mittels PUSH AX sichern und dann mit POP AX wieder herholen, also:

    TASTE_ECHO_AL    MACRO
                     PUSH AX
                     MOV AH, 01h
                     INT 21h
                     POP AX
                     ENDM


    In meinen Programmbeispielen funktioniert dies tadellos, es könnte jedoch sein das bei komplizierteren Angelegenheiten, das ganze nichtmehr so funzt wie ich möchte, daher hoff ich jemand kann mir das etwas erläutern :)

    Vielen Dank!

    Gruß Tobi


    Beitrag geändert: 22.8.2008 21:12:16 von ttobsen
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Meiner Einschätzung nach ist deine Lösung richtig und besser.
    Was mich allerdings wundert, ist, dass hier mit halben Registern (also AH statt AX) gearbeitet wird. Soweit ich mich erinnern kann, wird für den Syscall immer das gesammte AX Register ausgelesen.

    Was steht denn im Buch, was das Makro machen soll? Vielleicht wird bei dem Syscall 0100h auch das BX Register als Parameter ausgelesen?
  4. Autor dieses Themas

    ttobsen

    Kostenloser Webspace von ttobsen

    ttobsen hat kostenlosen Webspace.

    bladehunter schrieb:
    Meiner Einschätzung nach ist deine Lösung richtig und besser.


    Das höre ich gerne! :)

    Ich kann mit dem Wort Syscall nicht viel anfangen (das taucht nicht einmal im Buch auf). Daher ist das folgende mal auf gut Glück und beantwortet die Frage.

    21h ist ein DOS Interrupt, siehe:

    http://www.datasource.de/programmierung/tab16_dosint20u21h.html

    Laut dem Buch muß nun in AH 01h stehen, damit der Befehl:

    "Warten auf Tastatureingabe und Anzeige auf Bildschirm"

    ausgeführt wird. Würde ich in AX 01h schreiben, dann wäre ja praktisch AH = 0 und AL = 01h (oder sind die beiden gerade vertauscht?).

    Das eingegebene Zeichen wird auch nicht in BX sondern in AL gespeichert. Ok jetzt könnte man sagen: AL soll nach Beendigung des Makros auch wirklich den Inhalt der Eingabe haben. Aber bei anderen Beispielen würde das Register AL dann wirklich nicht gebraucht und trotzdem die Sicherung so durchgeführt.

    Vielleicht ein Tipp für alle, weil das Buch kann ich im Allgemeinen auch nicht empfehlen. Auf der einen Seite wird der Pentium und die 80x86 Prozessoren sehr Oberflächlich behandelt, auf der anderen Seite werden dann wieder Fachbegriffe verwendet die zuvor nicht erklärt wurden. Es soll ein Einsteigerbuch sein, gibt aber dem unerfahrenen Leser fast 0 Chance (zum Glück hatte ich schonmal ein paar kleine Programme für den Atmega geschrieben).

    Das Buch: Wolfgang Link, "Assembler Programmierung", Franzis, 12. Auflage

    Für 20€ ist das doch etwas zu wenig.

    Gruß Tobi und vielen Dank! :)
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!