Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly ASM在所有就绪打印值上打印_Assembly_X86_Dos - Fatal编程技术网

Assembly ASM在所有就绪打印值上打印

Assembly ASM在所有就绪打印值上打印,assembly,x86,dos,Assembly,X86,Dos,我有一个显示日期(天、月、年)和时间(小时、分钟、秒)的ASM脚本 这将在DOS框上打印当前日期时间。 问题是,它是静态的。我想做的是使其动态化,这意味着我必须在屏幕上当前值所在的位置写入新值。在ASM中如何做到这一点 我一点线索也没有,谷歌也不是我的朋友。如果你的DOS框是COMMAND.COM或Windows 2000之前的CMD.EXE(较新的CMD.EXE不支持ANSI),那么它将支持ANSI转义序列。在显示新时间之前,您可以使用各种方法将光标定位在时钟的开头。在打印字符串之前,使用AS

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

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


我一点线索也没有,谷歌也不是我的朋友。

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

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

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

这实际上不是一个特定于语言的问题,而是一个特定于平台的问题。您说您正在DOS盒上运行,因此可以使用以下选项之一:

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


  • 如果你打算在DOS下进行大量汇编编程,我会保留一个书签。

    所以你想在屏幕上的某个地方放置一个常驻时钟,它在后台运行并显示当前时间?有点像。我正在使用WinASM编辑器,创建了一个新的DOS项目,并制作了ASM代码来显示所描述的时间,现在我想看到的是秒在滴答滴答地流逝,几分钟到下一个,几小时都是一样的,等等,一切都必须是正确的和动态的。别忘了将页码(几乎总是0)加载到BH中。