0

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

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

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

4

3 回答 3

2

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

        MOV     DX,1629H                ; (LINE 16H, COL 29H)
        MOV     AH,2                    ; Move cursor to DH,DL
        INT     10H
        ; now print your string
于 2009-01-07T02:39:42.037 回答
0

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

于 2009-01-07T02:36:07.223 回答
0

这实际上不是特定于语言的问题,而更多的是特定于平台的问题。你说你在 DOS 机器上运行,所以你可以使用以下之一:

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

如果您要在 DOS 中进行大量汇编编程,我会为几个中断引用之一保留一个书签。

于 2009-01-07T02:46:58.590 回答