Assembly 汇编仿真器不';t支持int33h功能05

Assembly 汇编仿真器不';t支持int33h功能05,assembly,x86-16,emu8086,Assembly,X86 16,Emu8086,现在我正在使用emu8086为一门课程做一个装配项目。 我正在写一个程序来记录鼠标按钮被点击的次数,如果鼠标右键被点击了三次,程序就会结束。如果INT33h在8086组件中,这可以通过功能05完成;但是这个模拟器显然不支持这个。 你们有没有别的建议 代码的这一部分是: MOV AX,05H ;GetS Button Press Information INT 33H CMP AX,2

现在我正在使用emu8086为一门课程做一个装配项目。 我正在写一个程序来记录鼠标按钮被点击的次数,如果鼠标右键被点击了三次,程序就会结束。如果INT33h在8086组件中,这可以通过功能05完成;但是这个模拟器显然不支持这个。 你们有没有别的建议

代码的这一部分是:

 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=5
返回特定按钮的状态,或者您可以使用
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

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

AX=5
返回特定按钮的状态,或者您可以使用
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

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

从您发布的代码来看,似乎您不知道如何在汇编中编写代码,而应该归咎于emu8086。邮递(即,获取工作代码,删除所有不相关的内容,验证其是否可以编译、执行并演示问题,然后在此处发布该简短示例的完整源代码)。@Ped7g:Int 33h/AX=5在emu8086中不受支持,当使用时,模拟器中将弹出一个框,说Int 33h/AX=0005h-还不受支持…@MichaelPetch ok,但这两种代码都不起作用。在过去,当运行真正的DOS时,您必须加载鼠标驱动程序才能获得这些中断。从您发布的代码来看,这更像是您不知道如何在汇编中编写代码,而是责怪emu8086。邮递(即,获取工作代码,删除所有不相关的内容,验证其是否可以编译、执行并演示问题,然后在此处发布该简短示例的完整源代码)。@Ped7g:Int 33h/AX=5在emu8086中不受支持,当使用时,模拟器中将弹出一个框,说Int 33h/AX=0005h-还不受支持…@MichaelPetch ok,在过去,当运行真正的DOS时,你必须加载一个鼠标驱动程序来获得这些中断。