Инт 33 всегда показывает мне одни и те же данные - PullRequest
0 голосов
/ 13 февраля 2019

В моем коде я должен проверить, нажата ли кнопка мыши на моем изображении.Когда я отлаживаю код, я вижу, что прерывание снова и снова возвращает одну и ту же информацию. Mikoon является отправной точкой печати изображения (16 * 16)

proc checker
    xor bx, bx
    mov ax,05h  ; Return button press data
    int 33h 
    shr cx, 1
    mov ax, 0A000h
    sub [mikoom], ax
    shr [mikoom], 2
    jmp cont
check:
    mov ax,05h  ; Return button press data
    int 33h
    shr cx, 1
cont:
    cmp cx, [mikoom]
    jae odchaecker
    jmp check
odchaecker:
    mov ax, 16h
    add [mikoom], ax
    cmp cx, [mikoom]
    jbe caller
    mov ax, 16h
    sub [mikoom], ax
    jmp check
caller:
    call CleanScreen
    ret
endp
proc CleanScreen
    mov ah, 0
    int 10h
    ret
endp

1 Ответ

0 голосов
/ 16 февраля 2019

Всякий раз, когда ваша CleanScreen устанавливает режим видео, AL содержит значение (оставшееся) 16h, которое равно 22 в десятичном виде.Нет такого видеорежима!

Вы не упоминаете об этом, но я предполагаю, что вы используете видеорежим 13h (320x200).

xor bx, bx
mov ax,05h  ; Return button press data
int 33h 
shr cx, 1

Эта функция мыши возвращает x, y-координаты в CX и DX.
Ваша программа даже не использует y-координату!
И что с этим вычитанием0A000h?Видеопамять находится по адресу сегмента 0A000h, но это не имеет значения в этой программе.

Вам нужно сравнить CX с левыми и правыми боковыми координатами изображения и сравнить DXс координатами верхней и нижней сторон вашей фотографии.

  cmp cx, [LeftX]
  jb  outside
  cmp cx, [RightX]   ; RightX == LeftX + Width - 1
  ja  outside
  cmp dx, [TopY]
  jb  outside
  cmp dx, [BottomY]  ; BottomY == TopY + Height - 1
  ja  outside
  ;
  ; Here you're inside the picture
  ;
outside:
  ;
  ; Here you're outside the picture
  ;
...