0

矢印キーを使用してアセンブリ言語で形状を指示したいのですが、コードは次のようになります。

call getkey
cmp al, ...
je direct

ユーザーがどの矢印キーを押したかを診断するには、後で何を入力すればよいですか?

4

5 に答える 5

5

これは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 からの読み取りを試すことができます。

于 2013-06-05T12:52:47.750 に答える
1

al にキー値が含まれていることを考慮して、キー値と必要な矢印の ascii 値を比較します。次のASCII値を試してください 37(左矢印) 38(上矢印) 39(右矢印) 40(下矢印)

于 2013-06-05T12:06:39.747 に答える
0

getkey 関数でキー検出のために何をするかによって異なります。ほとんどの場合、ハードウェアに直接アクセスすると、キーはスキャン コードで返されます。スキャンコード表を探す必要があります

于 2013-06-05T12:08:59.263 に答える