Je fais un espace envahisseurs dans l'Assemblée 8086, pour tester que j'utilise DOSBox. Laissez-moi vous montrer mon code:Comment lire la clé sans attendre, assemblage 8086
;--------------------
;Update hero
;--------------------
update:
call vsync
call update_hero ; method to read keyboard
call set_video
call clear_screen
call draw_hero
jmp update
Maintenant, la procédure est update_hero:
update_hero proc
mov ah, 01h
int 16h
cmp al, 97
je left_pressed
cmp al, 100
jne none_pressed
inc hero_x
left_pressed:
dec hero_x
none_pressed:
ret
update_hero endp
Comme vous pouvez le voir, je suis en train de lire « un » ou « d » pour le mouvement, mais , ça ne marche pas, pouvez-vous m'aider à comprendre pourquoi? Ce que j'essaye de faire est de lire du clavier sans l'attendre, c'est pourquoi j'utilise la sous-fonction ah, 01h
.
Cheers.
Modifier
J'ai vérifié pour les interruptions here, modifié le code, et maintenant ça fonctionne:
update_hero proc
mov ah, 01h ; checks if a key is pressed
int 16h
jz end_pressed ; zero = no pressed
mov ah, 00h ; get the keystroke
int 16h
begin_pressed:
cmp al, 65
je left_pressed
cmp al, 97
je left_pressed
cmp al, 68
je right_pressed
cmp al, 100
je right_pressed
cmp al, 81
je quit_pressed
cmp al, 113
je quit_pressed
jmp end_pressed
left_pressed:
sub hero_x, 2
jmp end_pressed
right_pressed:
add hero_x, 2
jmp end_pressed
quit_pressed:
jmp exit
end_pressed:
ret
update_hero endp
Merci, j'ai édité ma question et ajouté le code de travail. –