Newline in 8086 Assembler: mein text druckt Treppen-trat

Ich bin immer stair-step eine Ausgabe wie diese
Newline in 8086 Assembler: mein text druckt Treppen-trat

Mein Programm funktioniert richtig, außer dass, wenn ich drucken Sie eine neue Zeile ein, und drucken Sie dann etwas in der aktuellen Zeile, Sie zeigt auf die nächste Zeile, aber mit einigen Leerzeichen vor dem.


Das Programm ist dieses: (drucken Sie eine Tabelle mehrere zahlen von 0 bis 9):

data_seg segment
    I DB 0D
    J DB 0D
    R DB ?
    DIVER DB 10D
    data_seg ends

stack_seg segment
    stack_seg ends

code_seg segment
    MAIN proc far
        assume cs:code_seg, ds:data_seg, ss:stack_seg
        MOV AX,data_seg
        MOV DS,AX

        FOR1:
            MOV J,0D
            FOR2:
            MOV AX,0H
            MOV AL,I
            MUL J
            DIV DIVER 
            MOV R,AH
            ADD AL,48D
            MOV AH,0EH
            INT 10H
            MOV AL,R
            ADD AX,48D
            MOV AH,0EH
            INT 10H

            MOV AX,32D
            MOV AH,0EH
            INT 10H
            INC J 
            MOV AX,0
            MOV AL,J
            SUB AX,10D
            JNZ FOR2
         INC I
         MOV AX,10D
         MOV AH,0EH
         INT 10H
         MOV AX,0
         MOV AL,I
         SUB AX,10D
         JNZ FOR1

        MOV AX,4CH
        INT 21H
        MAIN endp
    code_seg ends
end MAIN
  • dies ist nicht [windows] code, es ist DOS (für die int 21h), und mit int 10h BIOS-Aufrufe sonst aus irgendeinem Grund.
  • Keine Microsoft-tag; verwendet, Windows-Markierung zeigt an der Plattform.
  • Die [dos] tag ist angebracht, hier. Siehe mein edit. Nichts an diesem code nichts zu tun hat mit Windows, andere als die Tatsache, dass einige 32-bit-Versionen von Windows mit einem virtuellen DOS-Maschine. Das ist, warum es einen separaten tag für DOS.
  • Die dollar-Zeichen terminator sagt mir, es ist Microsoft-Technologien. MASM verwendet es für die string-Terminierung. Zweifelhaft ist es DOS, 2011; 15 Jahre zu spät.
  • nicht alles, was Microsoft gemacht hat, ist Windows. DOS existierte zuerst und getrennt ist. Und $ terminatoren angefangen mit CP/M kopiert von DOS, aber nicht unter Windows. (Windows verwendet 0-terminierte C-strings im low-level-WinAPI-Funktionen wie für Dateinamen). Auch die Frage keine DOS-string-Funktionen, die nur in einer der Antworten, so könnte es nicht sogar hilfreich sein, wenn die DOS-exit call ist nur da, um zu testen bootloader code unter DOS. Jedenfalls, wenn es kein DOS-Tags Bearbeiten könnte gerechtfertigt gewesen (aber das erstellen einer DOS-tag wäre besser gewesen). Aber es ist eindeutig falsch.
  • Lol... DOS ist tot. Aber halten Sie den glauben Leute verwenden es, wenn es Sie glücklich macht.
  • DOS ist immer noch verwendet, um test neu entwickelten motherboards, und für einige insane Grund einiger Schulen (viele in Indien) lehren assembly-Sprache, die mit 16-bit-DOS. Viele von Ihnen mit emu8086. (Etwas wie MARS/SPIM GUI-editor+debugger+simulator, aber für den 8086, einschließlich DOS). Ich Wünsche DOS war tot, aber es ist nicht. Es ist embedded OS, die aus dem Weg bekommt, kann ich den use-case. freedos.org ist immer noch gepflegt werden, für die Verwendung in embedded-Zeug scheinbar. Ich habe null Interesse in DOS, aber du eindeutig noch nicht viel Zeit mit der Suche im [x86] tag, wenn Sie denken, DOS ist tot.
  • Buchstäblich alle DOS-Fragen, die ich gesehen habe, auf, SO sind von Anfängern, die stecken geblieben sind, mit ihm für die Schule, oder aus irgendeinem Grund nahm es für sich selbst-Lehre (obwohl Autodidakt sind in der Regel "schriftlich Ihre eigenen OS" als legacy-BIOS-MBR-bootloader, so dass x86-16, aber nicht DOS-BIOS-aufrufen). Aber es gibt eine beträchtliche Menge solcher Fragen. Die Menschen, die Sie tatsächlich verwenden DOS für Prüfung-engineering-sample-mobos oder andere use-cases brauchen nicht zu bitten, noch ein weiteres Duplikat zum Lesen / drucken von multi-stellige zahlen oder wie div funktioniert auf ALSO.
  • noch wichtiger ist, Sie können nicht führen Sie diesen code auf einem modernen 64-bit-Windows-system ohne einen emulator wie DOSBOX oder BOCHs.

Schreibe einen Kommentar