汇编仿真器不支持 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=5
returns特定按键的状态,或者可以使用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 为一门课程做一个装配项目。 我正在编写一个程序来记录鼠标按钮被点击了多少次,如果点击右键点击了三次,程序就会结束。这可以通过 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=5
returns特定按键的状态,或者可以使用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
您可以修改此代码以添加计数器来控制每个按钮被按下的次数。