2017-04-18 5 views
2

私の目標は、ユーザーがエスケープキーを押すことを決定するまで、矢印キーを使用してプログラム内を上下に移動できるInt 16命令を使用することです。ループで次のコードを使用し、最後に終了条件を追加するか、私が紛失しているものがあるか、複数のキーを押して読み込みますか?キーボードを使用してプログラムをナビゲートするには、Int 16hをどのように実装しますか?

Mov ah,00 
int 16 
+1

[ "16,0をint型"](http://stanislavs.org/helppc/int_16-0.html)ブロックしています、それはキーを押すのを待つでしょう。 「メニューループ」ごとに一度だけ呼び出す必要があります。そのため、ユーザーからのすべてのキーをすべてのオプションと比較します。それはあなたが問題を見ているか、あなたが尋ねていることはあまり明確ではないが、これは "広すぎる"ということだ。紙面上に描いたスケッチをいくつかやってみると、入力側、出力側、何かを書いてから、デバッガで夜を過ごし、どこに行くのかを見てから、すべて投げ捨てて、もう一度やり直してください。シンプル。 – Ped7g

答えて

2
Mov ah,00 
int 16 

アセンブリ言語のプログラミングは、あなたが正確である必要があります。
BIOSキーボードの機能はint 16hにあります。つまり、書いたではなく、です。大したことではないかもしれませんが、それは成功と失敗の違いです。


MainLoop: 
    mov ah, 01h ;BIOS.TestKey 
    int 16h 
    jz StuffToDoRegardlessOfAnyKey 
    mov ah, 00h ;BIOS.GetKey 
    int 16h 
    cmp al, 27  ;Is it ESCAPE ? 
    jne ProcessOtherKey 
ProcessEscapeKey: 
    ... 
    ... 
ProcessOtherKey: 
    ... 
    ... 
    jmp MainLoop 
StuffToDoRegardlessOfAnyKey: 
    ... 
    ... 
    jmp MainLoop 

これは、キーボードを使用してナビゲートする問題を解決するために、スケルトンプログラムです。 MainLoopが繰り返されるたびに、保留中の鍵がある場合はBIOSキーボード機能01hで最初にテストされます。

  • もしそうでなければ、ユーザーの入力に関係なくすべての処理が必要です。ステータスバーの時計や情報の更新は、このカテゴリに該当します。
  • キーが待機している場合は、BIOSキーボード機能00hを使用してキーを取得します。 キーが利用可能であることがわかっているので、待機は必要ありません。
    • このキーはESCであれば、プログラムはあなたがクリーンアップとDOSへの出口か、この場合には必要なものは何でもすることができますProcessEscapeKeyにフォールスルー。
    • 他のキーについては、ProcessOtherKeyにジャンプします。ここでは、通常、扱うすべての異なるキーを区別する必要があります。 UPDOWNLEFTRIGHT ...
関連する問題