ASM打印已打印的值

时间:2009-01-07 00:26:56

标签: assembly x86 dos

我有一个显示日期(日,月,年)和时间(小时,分钟,秒)的ASM脚本。

这将在DOS框中打印当前日期时间。 事情是,它是静止的。我想做的是让它动态化,这意味着我必须在当前值在屏幕上的确切位置写入新值。你是如何在ASM中做到这一点的?

我根本没有任何线索,谷歌也不是我的朋友。

3 个答案:

答案 0 :(得分:2)

在打印字符串之前,使用ASM代码定位光标。例如:

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

答案 1 :(得分:0)

如果您的DOS框是COMMAND.COM,或Windows 2000之前的CMD.EXE(较新的CMD.EXE不提供ANSI支持),那么它将支持ANSI转义序列。在显示新时间之前,您可以使用各种cursor commands将光标定位在时钟的开头。

答案 2 :(得分:0)

这不是一个特定于语言的问题,而是一个特定于平台的问题。你说你在DOS盒子上运行,所以你可以使用以下之一:

  1. 如果您正在使用DOS打印例程(例如INT 21h,AH = 9),则可以打印回车符(ASCII 13),不带后续换行符(ASCII 10)将光标返回到当前行的开头。同样,如果这实际上是一个基于控制台的Windows应用程序,并且您正在使用WriteConsole,那么您应该达到同样的效果。
  2. 如果您真的使用DOS,可以使用BIOS以INT 10h,AH = 2更新当前光标位置。
  3. 如Sparr所述,您可以发送“ANSI”转义序列(如果加载了ansi.sys)来控制光标以及其他内容,例如颜色。将打印这些转义序列(例如,ala INT 21h,AH = 9),就像您的文本一样。

  4. 如果您要在DOS中进行大量的汇编编程,我会为one several interrupt references保留一个书签。