Newline in 8086 Assembler: mein text druckt Treppen-trat
Ich bin immer stair-step eine Ausgabe wie diese
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 dieint 21h
), und mitint 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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Sie ausdrucken müssen neue Zeile und carriage return.
wenn Ihr mit emu80x86 diesem code sollte es tun,
ALS anthony sagte, Basierend auf den assembler, die Sie tun müssen, um ein carriage-return und line-feed gehe zur nächsten Zeile und stellen Sie den cursor an den Anfang der Zeile. Für MASM, die Sie verwenden können Call crlf oder drucken Sie die Werte 0dh und 0ah bzw.
Diese drucken würde eine neue Zeile ein:
1) Fügen Sie in das Daten-segment:
2) Und verwenden Sie es überall Sie brauchen eine neue Zeile ein:
versuchen, Bahnen für die Linie zurück