汇编仿真器不支持 int33h 函数 05

Assembly emulator doesn't support int33h function 05

现在我正在使用emu8086 为一门课程做一个装配项目。 我正在编写一个程序来记录鼠标按钮被点击了多少次,如果点击右键点击了三次,程序就会结束。这可以通过 8086 汇编中的函数 05 if INT33h 来完成;但是这个模拟器显然不支持这个。 你们有什么建议以其他方式做到这一点吗?

那部分代码是这样的:

 MOV   AX,05H                     ;GetS Button Press Information
    INT   33H               


    CMP   AX,2
    JE    COUNTRC
    ;MOV   RCCNT, 0 

COUNTRC:        
    ADD RCCNT, BX     ;  BX = number of button presses on specified button
                    ; CX = horizontal position at last press
                      ; DX = vertical   position at last press       
    CMP   RCCNT,3
    JE    EXIT

AX=5returns特定按键的状态,或者可以使用AX=3获取鼠标的状态,包括按下的按钮和 X、Y 位置。下一个代码在单击左键时显示一条消息,在单击右键时显示​​另一条消息,将其复制粘贴到 EMU 中并 运行 :

.model small
.stack 100h
.data

left  db 'LEFT BUTTON PRESSED',13,10,'$'
right db 'RIGHT BUTTON PRESSED',13,10,'$'

.code
  mov  ax, @data
  mov  ds, ax

  mov  ax, 0     ;◄■■ START MOUSE.
  int  33h

  mov  ax, 1     ;◄■■ DISPLAY MOUSE CURSOR.
  int  33h  

while:  ;◄■■ REPEAT UNTIL A KEY IS PRESSED.                   
;GET MOUSE STATE.
  mov  ax, 3
  int  33h    ;◄■■ STATE RETURNS IN BX.
;CHECK LEFT BUTTON STATE.
  mov  ax, bx  ;◄■■ PRESERVE BX.
  and  ax, 0000000000000001b ;◄■■ BIT 0 : LEFT BUTTON.
  jz   check_right  ;◄■■ IF BIT 0 == 0 : NO LEFT BUTTON.
  mov  ah, 9      ;◄■■ DISPLAY "LEFT BUTTON PRESSED"
  lea  dx, left
  int  21h
check_right:
;CHECK RIGHT BUTTON STATE.
  mov  ax, bx  ;◄■■ PRESERVE BX.
  and  ax, 0000000000000010b ;◄■■ BIT 1 : RIGHT BUTTON.
  jz   check_key  ;◄■■ IF BIT 1 == 0 : NO RIGHT BUTTON.
  mov  ah, 9      ;◄■■ DISPLAY "RIGHT BUTTON PRESSED"
  lea  dx, right
  int  21h
check_key:
;CHECK IF A KEY WAS PRESSED.
  mov  ah, 0bh
  int  21h                                     
  cmp  al, 0       ;◄■■ AL==0 : NO KEY.
  jz   while

  mov  ax, 4c00h   ;◄■■ FINISH PROGRAM.
  int  21h

您可以修改此代码以添加计数器来控制每个按钮被按下的次数。