alle Probleme mit diesem Code stammen aus der Tatsache, dass sowohl die BIOS-Funktion 02h (SetCursor) und der DOS-Funktion 02h (WriteCharacter) die DL
Register als Parameter verwenden. Unglücklicherweise für Sie ist die Bedeutung in diesen Fällen anders. Mehrere Lösungen existieren. Die Verwendung des freien Registers BL
, um einen separaten Zeichencode beizubehalten, wurde von Ped7g vorgeschlagen.
Eine einfache Lösung, die ich vorstelle, benutzt die DOS-Ausgabefunktion überhaupt nicht und schreibt auf das Display mit der BIOS-Funktion 0Eh (TeletypeCharacter). Diese Funktion ist nicht auf DL
als Parameter angewiesen. Es verwendet eher das AL
Register.
.model small
.stack
.code
start:
mov al, "A" <<<First character
mov bh, 0 <<<Display page 0
mov cx, 25 <<<Iteration count
mov dl, 0 <<<Start at column 0
mov dh, 0 <<<Start at row 0
again:
mov ah, 02h <<<BIOS function SetCursor
int 10h
mov ah, 0Eh <<<BIOS function TeleType
int 10h
inc dl <<<Next column
inc dh <<<Next row
inc al <<<Next character
loop again
mov ah, 4Ch
int 21h
end start
Bei der Arbeit am Standardtextscreen gibt es 80 Spalten und 25 Zeilen. Sie sollten den Cursor nicht außerhalb des Bildschirms positionieren! Die meisten Iterationen, die Ihr Programm ausführen sollte, sind daher 25.
Klicken Sie auf den Bildschirm mit dem Programmausgang, um die Ausgabe des Codes zu sehen. – Rhye
'int 10h/ah = 02h' verwendet' dl' als horizontale Cursorposition. – Michael
Welche Änderungen sollte ich machen? – Rhye