0

日付(日、月、年)と時刻(時、分、秒)を表示するASMスクリプトがあります。

これにより、現在の日時がDOSボックスに出力されます。物事は、それは静的です。私がやりたいのは、動的にすることです。つまり、現在の値が画面上にある正確な場所に新しい値を書き込む必要があります。ASMでこれをどのように行いますか?

私にはまったく手がかりがなく、グーグルはこれについての私の友達ではありませんでした。

4

3 に答える 3

2

文字列を出力する前に、ASM コードを使用してカーソルを配置します。例えば:

        MOV     DX,1629H                ; (LINE 16H, COL 29H)
        MOV     AH,2                    ; Move cursor to DH,DL
        INT     10H
        ; now print your string
于 2009-01-07T02:39:42.037 に答える
0

DOS ボックスが COMMAND.COM、または Windows 2000 より前の CMD.EXE (新しい CMD.EXE は ANSI サポートを提供していません) の場合、ANSI エスケープ シーケンスをサポートします。さまざまなカーソル コマンドを使用して、新しい時刻を表示する前にカーソルを時計の先頭に配置できます。

于 2009-01-07T02:36:07.223 に答える
0

これは実際には言語固有の問題ではなく、プラットフォーム固有の問題です。DOSボックスで実行しているとのことでしたので、次のいずれかを使用できます。

  1. DOS 印刷ルーチン (AH=9 を指定した INT 21h など) を使用している場合、改行文字 (ASCII 10) を付けにキャリッジ リターン文字 (ASCII 13) を印刷して、カーソルを現在の先頭に戻すことができます。ライン。同様に、これが実際にコンソール ベースの Windows アプリで、WriteConsole を使用している場合は、同じ効果が得られるはずです。
  2. 本当に DOS を使用している場合は、BIOS を使用して現在のカーソル位置を INT 10h、AH=2 で更新できます。
  3. Sparr が述べたように、"ANSI" エスケープ シーケンス (ansi.sys が読み込まれている場合) を送信して、カーソルや色などの他のものを制御できます。これらのエスケープ シーケンスは、テキストと同様に出力されます (例: ala INT 21h、AH=9)。

DOS で多くのアセンブリ プログラミングを行う場合は、いくつかの割り込み参照の1 つにブックマークを付けておきます。

于 2009-01-07T02:46:58.590 に答える