ASM печатать поверх уже напечатанных значений

StackOverflow https://stackoverflow.com/questions/418749

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

Используйте код ASM, чтобы поместить курсор перед печатью строки. Например:

        MOV     DX,1629H                ; (LINE 16H, COL 29H)
        MOV     AH,2                    ; Move cursor to DH,DL
        INT     10H
        ; now print your string

Другие советы

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

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top