矢印キーを使用してアセンブリ言語で形状を指示したいのですが、コードは次のようになります。
call getkey
cmp al, ...
je direct
ユーザーがどの矢印キーを押したかを診断するには、後で何を入力すればよいですか?
これはDOSでうまく動作します(DOSBoxでテスト済み):
[org 0x100]
repeat:
; Get keystroke
mov ah,0
int 0x16
; AH = BIOS scan code
cmp ah,0x48
je up
cmp ah,0x4B
je left
cmp ah,0x4D
je right
cmp ah,0x50
je down
cmp ah,1
jne repeat ; loop until Esc is pressed
mov ah,0x4c
int 0x21
up:
mov dx,upstring
mov ah,9
int 0x21
jmp repeat
down:
mov dx,downstring
mov ah,9
int 0x21
jmp repeat
left:
mov dx,leftstring
mov ah,9
int 0x21
jmp repeat
right:
mov dx,rightstring
mov ah,9
int 0x21
jmp repeat
upstring db "Up pressed",13,10,'$'
downstring db "Down pressed",13,10,'$'
leftstring db "Left pressed",13,10,'$'
rightstring db "Right pressed",13,10,'$'
使用できない/使用したくない場合int 0x16
(たとえば、読み取りを非ブロックにする必要があるため) は、代わりにポート 0x60 からの読み取りを試すことができます。
al にキー値が含まれていることを考慮して、キー値と必要な矢印の ascii 値を比較します。次のASCII値を試してください 37(左矢印) 38(上矢印) 39(右矢印) 40(下矢印)
getkey 関数でキー検出のために何をするかによって異なります。ほとんどの場合、ハードウェアに直接アクセスすると、キーはスキャン コードで返されます。スキャンコード表を探す必要があります