J'apprends le langage d'assemblage dans masm. Je l'ai lu sur les interruptions et ont développé le code suivant pour la pratique:Le programme cesse de fonctionner en utilisant des interruptions
INCLUDE IRVINE32.INC
.data
plate byte "_"
counter dword 0
ppos byte 60
p byte 15
.code
main PROC
call clrscr
mov ecx,1000
mov al, plate
mov dl, 60
mov dh, 15
call gotoxy
call writechar
L1:
mov dh, 0
mov dl, 0
call gotoxy
inc counter
mov eax, counter
call writeint
mov dl, ppos
mov dh, p
call gotoxy
call updateplate
call writeplate
mov eax, 2000
call delay
loop L1
exit
main endp
writeplate PROC
mov al, plate
call writechar
ret
writeplate ENDP
updateplate proc
mov ah, 01h
int 16h
jz quit
mov ah, 00h
int 16h
pressed:
cmp al, 65
je left
cmp al, 97
je left
cmp al, 68
je right
cmp al, 100
je right
left:
dec ppos
jmp quit
right:
inc ppos
jmp quit
quit:
ret
updateplate endp
end main
Mais le problème est à chaque fois que je lance le code de l'invite de commande indique que le programme a cessé de fonctionner avant que je puisse vérifier si les interruptions fonctionnent correctement . Quelqu'un peut-il aider s'il vous plaît?
Quelle est la dernière instruction exécutée avant sa fermeture? – Jason
Avez-vous un programme Windows 32 bits ("INCLUDE IRVINE32.INC") ou un programme BIOS 16 bits ("int 16h")? Vous ne pouvez pas mélanger les deux! Je suppose que vous utilisez un Windows 64 bits qui n'exécutent pas un programme 16 bits ou ne permettent pas un accès d'interruption ("int 16"). – rkhb
La dernière instruction est int 16h à partir de la procédure updateplate –