INT 16h (AH=01)
キーボードステータス読み込み。
これは、読み込みと違い、ブロックしません。
また、入力があった場合、入力値を破棄しません。
入力が無い場合は、ゼロフラグが立ちます。
つまり、入力の有無を調べる為に使えるわけです。
そういうわけで、読み込みサービスとうまく組み合わせれば、
ちょっとだけ、環境に優しい処理が出来そうです。
やってみましょう。
readloop: ; キーボードステータス読み込み MOV AX, 0100h INT 16h JNZ readkey ; 入力文字があれば、読み込む HLT ; ちょっと休憩 JMP readloop ; 繰り返し readkey: ; キーボード一文字読み込み MOV AX, 0000h INT 16h CALL putscancode ; 戻り値を出力 CALL putchar ; 文字出力 CMP AL, 1Bh ; ESCコード JNZ readloop fin: MOV SI, shutdownmsg CALL puts finloop: HLT ; 何かあるまでCPUを停止させる JMP finloop ; 無限ループ
キーボードから一文字読み込む前に、入力があるかどうか、確認します。
無ければ、少し休憩です。
HLTは、完全に停止するわけではなく、何らかの割り込み等があれば、ちゃんと起きてくれます。
入力があるのを確認してから、読み込みを行っているので、
前回のように、CPUがぶん回るような事は、どうやら避けられたようです。
いや〜、めでたし、めでたし。