ASM печатать поверх уже напечатанных значений - PullRequest
0 голосов
/ 07 января 2009

У меня есть скрипт ASM, который отображает дату (день, месяц, год) и время (часы, минуты, секунды).

Печатает текущую дату и время на DOS-боксе. Дело в том, что это статично. То, что я хочу сделать, это сделать его динамичным, то есть мне нужно написать новое значение в том месте, где текущее значение стоит на экране. Как вы делаете это в ASM?

Я понятия не имею, и Google не был моим другом для этого.

Ответы [ 3 ]

2 голосов
/ 07 января 2009

Используйте код ASM для позиционирования курсора перед печатью вашей строки. Например:

        MOV     DX,1629H                ; (LINE 16H, COL 29H)
        MOV     AH,2                    ; Move cursor to DH,DL
        INT     10H
        ; now print your string
0 голосов
/ 07 января 2009

Это на самом деле не проблема для конкретного языка, а скорее для платформы. Вы сказали, что работаете в DOS-боксе, поэтому вы можете использовать один из следующих вариантов:

  1. Если вы используете процедуру печати DOS (например, INT 21h с AH = 9), вы можете напечатать символ возврата каретки (ASCII 13) без последующего символа новой строки (ASCII 10) для вернуть курсор в начало текущей строки. Аналогично, если это на самом деле приложение для Windows на основе консоли, и вы используете WriteConsole, вы должны добиться того же эффекта.
  2. Если вы действительно используете DOS, вы можете использовать BIOS для обновления текущей позиции курсора с INT 10h, AH = 2.
  3. Как уже упоминал Sparr, вы можете отправлять escape-последовательности "ANSI" (если загружен ansi.sys) для управления курсором, а также другие вещи, такие как цвет. Эти escape-последовательности будут напечатаны (например, ala INT 21h, AH = 9), как ваш текст.

Если вы собираетесь много программировать на ассемблере в DOS, я бы оставил закладку на один из нескольких прерываний ссылок .

0 голосов
/ 07 января 2009

Если ваш DOS-ящик - это COMMAND.COM или CMD.EXE до Windows 2000 (более новые CMD.EXE не поддерживают ANSI), то он будет поддерживать escape-последовательности ANSI. Вы можете использовать различные команды курсора , чтобы поместить курсор в начало ваших часов перед отображением нового времени.

...