Assembly 汇编仿真器不';t支持int33h功能05
现在我正在使用emu8086为一门课程做一个装配项目。 我正在写一个程序来记录鼠标按钮被点击的次数,如果鼠标右键被点击了三次,程序就会结束。如果INT33h在8086组件中,这可以通过功能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
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时,你必须加载一个鼠标驱动程序来获得这些中断。