2009-01-07 90 views
0

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

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

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

+0

所以你想在屏幕上的某个地方放置一个驻留时钟,该时钟在后台运行,并显示当前时间? – 2009-01-07 02:24:27

+0

Kindof。我使用的是WinASM编辑器,创建了一个新的DOS项目,并使ASM代码显示所描述的时间,现在我想要的是看到秒钟已经消失,分钟到达下一个时间,几小时等等,一切都必须是正确和动态的。 – Vordreller 2009-01-07 07:45:31

回答

2

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

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

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

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),就像您的文本一样。

如果你打算做在DOS多汇编编程,我会保持一个书签的severalinterruptreferencesone