Konsolenausgabe (8086)



  • Als naechstes brauchst du erstmal Speicherplatz, in den du deinen String packst.
    Den kannst du auf verschiedenste Weise reservieren. zB. statisch in deinem Programm - da initialisiert (evtl. auch mitten in einem String) oder uninitialisiert. Die Syntax dazu ist Assemblerabhaengig.
    Zwar fuer so einen kleinen Speicherbereich unsinnig, prinzipiell aber moeglich, ist es das OS nach etwas Speicher zu fragen...

    Je nachdem kannst du diese Ziffern(Bytes) dann also der Reihe nach in den Speicher (String) packen und hinten zur Ausgabe in DOS zB. noch ein "$" anhaengen.

    Wenn du nun ueberhaupt keinen Plan hast, wie das im Detail zu realisieren ist, schlage ich vor, du arbeitest einfach erstmal das Buch weiter durch. Irgendwann solltest du dann in Etwa eine Idee bekommen.



  • Nobuo T schrieb:

    Als naechstes brauchst du erstmal Speicherplatz, in den du deinen String packst.
    Den kannst du auf verschiedenste Weise reservieren. zB. statisch in deinem Programm - da initialisiert (evtl. auch mitten in einem String) oder uninitialisiert. Die Syntax dazu ist Assemblerabhaengig.
    Zwar fuer so einen kleinen Speicherbereich zwar unsinnig, prinzipiell aber moeglich, ist es das OS nach etwas Speicher zu fragen...

    Je nachdem kannst du diese Ziffern dann also der Reihe nach in den String packen und hinten zur Ausgabe in DOS zB. noch ein "$" anhaengen.

    Wenn du nun ueberhaupt keinen Plan hast, wie das im Detail zu realisieren ist, schlage ich vor, du arbeitest einfach erstmal das Buch weiter durch. Irgendwann solltest du dann in Etwa eine Idee bekommen.

    Eine intuitive Vorstellung davon, wie das zu realisieren wäre, habe ich schon. Nur wird es sich wohl nicht lohnen, jetzt quer durchs Buch zu Blättern und Befehle nachzuschlagen.
    Aber reichlich demotivierend ist es doch, nach 150 Seiten noch nicht einmal dazu in der Lage zu sein, eine Ganzzahl auf den Bildschirm auszugeben, um zu überprüfen, ob sein Codestück überhaupt das getan hat, was es hätte tun sollen. 😞



  • Tja, so ist das halt leider mit Assembler. Bevor du damit praktische, dh. meist abstraktere Aufgaben wie zB. die Ausgabe einer Ganzzahl angehen kannst, brauchst du schon einen soliden Grundstock an Erfahrung bzw. Wissen.
    Hast du keinen Debugger, mit dem du dir "live" angucken kannst, was dein Code macht?



  • Nobuo T schrieb:

    Tja, so ist das halt leider mit Assembler. Bevor du damit praktische, dh. meist abstraktere Aufgaben wie zB. die Ausgabe einer Ganzzahl angehen kannst, brauchst du schon einen soliden Grundstock an Erfahrung bzw. Wissen.
    Hast du keinen Debugger, mit dem du dir "live" angucken kannst, was dein Code macht?

    Den Turbo-Debugger for DOS. Aber damit kann ich gerade garnichts anfangen. Wenn ich meine EXE aufmache, sagt er mir "Program has no symbol table".



  • Ja, der ist doch super fuer den Anfang. 🙂
    Ignoriere die Meldung einfach, er laedt dein Programm trotzdem.



  • Nobuo T schrieb:

    Ja, der ist doch super fuer den Anfang. 🙂
    Ignoriere die Meldung einfach, er laedt dein Programm trotzdem.

    OK. Jetzt kam gerade ein Bildschirm voller Smilies gefolgt vom lauten Piepsen.
    Aber gut zu wissen, dass mein Assembler sogar einen Dibugger hat. Danke. 🙂



  • Bzw. sehe ich das richtig? Ich kann nur einsehen, was sich im Code-Segment tut?



  • Hat sich erledigt. $ vergessen...

    Weißt du, ob man auch sehen kann, was sich im AH bzw AL befindet? Er zeigt mir lediglich den Inhalt von AX an.



  • movxz dx, al
    oder
    mov dx, word al



  • Wenn du ax betrachtest, siehst du damit ah und al sogar gleichzeitig auf einen Blick. 😉
    Lies mal "EAX ... AX" aus den FAQ. eax und die ganzen 32-Bit-Register kannst du dir im TD uebrigens auch anzeigen lassen.

    Und grundsaetzlich kannst du dir im RealMode wirklich alles im Speicher ansehen. Im TD oben eben in Code-Form unten in Datenform und rechts daneben unter den Registerinhalten noch den Stack.
    In allen diesen Bereichen kannst du an jede beliebige Speicheradresse springen, bist also nicht auf irgendein "Segment" beschraenkt.

    sicher schrieb:

    movxz dx, al
    oder
    mov dx, word al

    Zumindest das 2. waere im Grunde falsch - der Assembler, der das annimmt, waere IMHO zu grosszuegig.


Anmelden zum Antworten