Новая строка на 8086 языке ассемблера: мой текст печатает ступенчато - PullRequest
6 голосов
/ 04 декабря 2011

Я получаю вывод по ступенькам, как этот enter image description here

Моя программа работает правильно, за исключением того, что когда я печатаю новую строку, а затем что-то печатаю в текущей строке, она отображается на следующейстрока, но с пробелом перед ней.


Программа выглядит так: (выведите таблицу из нескольких чисел от 0 до 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

Ответы [ 5 ]

9 голосов
/ 04 декабря 2011

Вам необходимо напечатать новую строку и возврат каретки.

5 голосов
/ 15 декабря 2013

если вы используете emu80x86, этот код должен это сделать

mov dx,13
  mov ah,2
  int 21h  
  mov dx,10
  mov ah,2
  int 21h
3 голосов
/ 21 марта 2014

Это напечатало бы новую строку:

1) Добавить в сегмент данных:

linefeed db 13, 10, "$"

2) И затем используйте это везде, где вам нужна новая строка:

; new line
mov ah, 09
mov dx, offset linefeed
int 21h
3 голосов
/ 04 декабря 2011

Как сказал Энтони, исходя из вашего ассемблера, вам нужно сделать возврат каретки и перевод строки, чтобы перейти к следующей строке и установить курсор в начале строки.Для MASM вы можете использовать Call crlf или вывести значения 0dh и 0ah соответственно.

0 голосов
/ 04 декабря 2011

попробуйте поставить полосы для возврата строки

mov ax, 4c00h ; return to ms-dos
int 21h
...