Assembler Consolenausgaben



  • Hallo,

    ich habe gerade etwas mit Assembler (FASM) angefangen zu programmieren und möchte nun ein paar Werte auf der Konsole ausgeben (Register). Doch alle Beispiele bei FASM arbeiten mit richtigen GUI's und keinen Konsolen. Könnt ihr mir helfen? 🙂 🙂

    Mfg Alpha_Coder



  • Entweder du nimmst vorgefertigte Libs oder du machst es mittels Interrupts.

    Lg freeG



  • Danke für die Antwort, aber könntest du etwas konkreter werden? 🙂

    Mfg Alpha_Coder



  • Welches Betriebssystem? Windows->WinAPI->Read/WriteConsoleA/W
    (Im übrigen gibt es ganz bestimmt massig fasm-Beispiele für Konsolen I/O)



  • Man muss auf die entsprechenden Header in Text achten, für das Ausgabeformat.

    Hier ist ein kleines Beispiel für eine Konsolenausgabe mit fasm:
    (Das Programm gibt nur die Zahlen oder Hexwerte im Bx-Register als binär in der Konsole aus)

    format MZ ;unser "Header" 
    xor cx,cx ;cx=0, falls doch noch was drinsteht
    mov ah,02 ;einzelnes zeichen ausgeben mit int 21h
    mov ebx,81794532h ;der testwert
    mov cl,20h ; 32 rotationen
    again:
    xor dl,dl ;dl=0
    rcl ebx,1 ;ebx nach links rotieren, rausfallende einsen bitte im carryflag "speichern"
    adc dl,30h ;den Carryflagwert ausgeben, 30h = codierte 0 31  = codierte 1
    int 21h    ;ausgabe
    loop again ;loop wiederholt solange was in cx/ecx steht, zählt cx um 1 runter
    mov ah,4ch ;Hexwert für programmende mit Interrupt
    int 21h    ;Programmende
    


  • DOS ist tot!



  • masm schrieb:

    DOS ist tot!

    Hast du einen Biosbefreiten Windows-PC, oder wie?



  • gk schrieb:

    Hast du einen Biosbefreiten Windows-PC, oder wie?

    MS DOS u.ä. sind tot! - des wegen macht es auch kein Sinn dies 'API' zu verwenden. Zumal solche Programme oft nur noch auf einem Emulator zum Laufen zu bringen sind.

    Der Themenersteller mein sicher die Windowskonsole, als er von 'Konsole' redete. Dies kann man nicht mit Interrupts programmieren 😉



  • ... und im übrigen hat der int 0x21 nichts mit dem BIOS zu tun: dieser wird vom OS installiert.



  • masm schrieb:

    Der Themenersteller mein sicher die Windowskonsole, als er von 'Konsole' redete. Dies kann man nicht mit Interrupts programmieren 😉

    TE will ganz bestimmt Lowlevel-/Betriebsystemcoding erlernen, da kann man nicht viel - zumindest nicht am Anfang - mit Winapiincludes anfangen, im Gegensatz zu Emulatoren und Grundtechniken 😉
    Wenn Dos wirklich tot wäre, könnte man es wohl kaum noch als System laden. Auch zum Thema Sicherheitsfragen sollte man sich nicht vor den Grundlagen des Geschehens drücken, z.B. http://www.nvlabs.in/uploads/projects/vbootkit2/vbootkit2.0-AttackingWindows7viaBootSectors.odp



  • Entschuldigung, aber wie kommst du auf die Idee zu behaupten DOS sei nicht tot? - wer benutzt das den noch ernsthaft?
    Und wie schon gesagt wurde, ist der INT21 auch nur belegt, wenn auch ein entsprechendes Betriebssystem läuft.

    [die Verknüpfung der Frage mit dem Thema Sicherheit kann ich hier überhaupt nicht nachvollziehen]



  • na, wenn dos für dich tot zu sein hat, dann schreib doch einfach eine Beschwerde an den Admin dieser Seite, dass er sich den Unsinn erlaubt, dieses Unter-Forum noch nicht umbenannt oder gelöscht zu haben:
    http://www.c-plusplus.net/forum/f13

    Ob du die Ausgabe nun mit einem Biosinterrupt oder Dosinterrupt machst (oder einer C-Funktion o.ä), ist für die Ausgangsfrage eher unerheblich, würde ich sagen. Tatsächlich helfen fundiertere Assemblergrundlagenkenntnisse bei der Vermeidung von Fehlern, und helfen, Oberflächlichkeiten abzubauen. Dos Interrupts beißen nicht, die bellen nur und wollen nur ein wenig spielen 😉


Log in to reply