У меня возникли проблемы с выяснением того, как реализовать прерывание клавиатуры и мыши для моей матричной программы, чтобы моя бесконечная матричная программа завершалась после нажатия любой клавиши на клавиатуре и/или при перемещении мыши, а также при любом кнопки мыши нажаты.
Вот мой матричный код:
title lab9 (lab9.asm)
.model small
.stack 100h
.data
seed dw 1234h
.code
main proc
mov ax, @data
mov ds, ax
mov ax, 0B800h
mov es, ax
mov bx, 0
mov ax, 0
Loo1:
add bx, 120
call row
call busyWait
mov si, 0
jmp Loo1
loop Loo1
mov ax,4C00h
int 21h
main endp
row proc
push cx
mov cx, 10
R:
call printMsg
add bx, 160
loop R
pop cx
ret
row endp
printMsg proc
call randomCh
mov ah, [si]
mov es:[bx], ax
inc si
ret
printMsg endp
randomCh proc
mov ax, 343Fh
mul seed
xor dx, dx
add ax, 269h
mov seed, ax
ret
randomCh endp
busyWait proc
push cx
mov cx, 100h
L1:
loop L1
pop cx
ret
busyWait endp
My_int proc
mov ax, 4C00h
int 21h
iret
My_int endp
end
Вот код прерывания клавиатуры, который мне дал мой профессор:
mov ax, @data
mov ds, ax
;Install interrupt handler
push ds
mov ax, @code
mov ds, ax
mov ah, 25h
mov al, 9
mov dx, offset My_Int
int 21h
pop ds
Loop2;
;MATRIX CODE GOES HERE
jmp Loop2
;mov ax, 4c00h
;Int 21h
main endp
My_int proc
mov ax, 4c00h
int 21h
iret
My_Int endp
end main
Вот Код прерывания мыши, который также дал мне мой профессор:
.model smal
.stack 100h
.data
oX dw 0
oY dw 0
.code
main proc
mov ax, @data
mov ds, ax
moov ax, 3
int 33h
mov oX, CX
mov oY, DX
L1:
cmp oX ,CX ; (While oX == cx, && oY == dx && button == 0) <-- I believe the "button variable is
; the BX register
jne exit
cmp oY, DX
jne exit
cmp bx, 0
jne exit
;Matrix code goes here probably with the "Loop2: ;Matrix goes here loop Loop2 section from the
;keyboard interrupt section
mov ax, 3
int 33h
jmp L1
exit:
mov ax, 4C00H
int 21h
main endp
end main
Таким образом, я в основном должен объединить код прерывания клавиатуры и мыши в один, чтобы, когда любой, кто запускает мою программу, мог завершить ее, нажав клавишу на клавиатуре, переместив мышь или щелкнув кнопки мыши (щелчок левой кнопкой мыши, правой кнопкой мыши). нажмите и среднюю кнопку).
Что касается части завершения работы с клавиатурой, мой профессор сказал нам, что нам просто нужно вставить наш код в раздел кода «Loop2: ;Матричный код идет здесь loop Loop2», но я почти уверен, что просто ослышался. Я полагаю, он хотел сказать, что мы должны вставить наш код в этот цикл И проверить ввод с клавиатуры, но я знаю, что это не так, как я знаю, как проверять ввод (mov ah 7h/1h, int 21h), поэтому я запутался в той части.
Что касается части прерывания мыши, кажется, что мой профессор дал мне все, что мне нужно, и мне просто нужно вставить свой код в разделы «;Код матрицы идет здесь» моего кода прерывания мыши. Если это неверно, пожалуйста, дайте мне знать и, если возможно, объясните мне и, если возможно, с примерами, что мне нужно, чтобы прерывание мыши работало.