2009-01-07 125 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