質問
日付(日、月、年)と時刻(時間、分、秒)を表示する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印刷ルーチン(AH = 9のINT 21hなど)を使用している場合、後続の改行文字(ASCII 10)なしで キャリッジリターン文字(ASCII 13)を印刷できます。カーソルを現在の行の先頭に戻します。同様に、これが実際にコンソールベースのWindowsアプリであり、WriteConsoleを使用している場合、同じ効果を達成する必要があります。
- 本当にDOSを使用している場合、BIOSを使用してINT 10h、AH = 2で現在のカーソル位置を更新できます。
- Sparrが述べたように、「ANSI」を送信できます。エスケープシーケンス(ansi.sysが読み込まれている場合)は、カーソルや色などの他のことを制御します。これらのエスケープシーケンスは、テキストと同じように印刷されます(例:ala INT 21h、AH = 9)。
DOSで多くのアセンブリプログラミングを行う場合は、
所属していません StackOverflow