题
我有一个显示日期(日,月,年)和时间(小时,分钟,秒)的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盒子上运行,所以你可以使用以下之一:
- 如果您正在使用DOS打印例程(例如INT 21h,AH = 9),则可以打印回车符(ASCII 13),不带后续换行符(ASCII 10)将光标返回到当前行的开头。同样,如果这实际上是一个基于控制台的Windows应用程序,并且您正在使用WriteConsole,那么您应该达到同样的效果。
- 如果您真的使用DOS,可以使用BIOS以INT 10h,AH = 2更新当前光标位置。
- 如Sparr所述,您可以发送“ANSI”。转义序列(如果加载了ansi.sys)来控制光标以及其他内容,例如颜色。将打印这些转义序列(例如,ala INT 21h,AH = 9),就像您的文本一样。 醇>
如果您要在DOS中进行大量的汇编编程,我会将书签保存到一个几个 中断 references 。
不隶属于 StackOverflow