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

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

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

有帮助吗?

解决方案

在打印字符串之前,使用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,或Windows 2000之前的CMD.EXE(较新的CMD.EXE不提供ANSI支持),那么它将支持ANSI转义序列。您可以使用各种光标命令来定位光标在显示新时间之前的时钟开始。

这不是一个特定于语言的问题,而是一个特定于平台的问题。你说你在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中进行大量的汇编编程,我会将书签保存到一个几个 中断 references

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top