You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

汇编代码ciclo循环无法退出,疑似鼠标输入读取异常

汇编代码中ciclo循环无法退出及鼠标输入读取问题

以下是你的代码中导致ciclo循环无法退出、鼠标输入未正确响应的核心问题及修复方案:

核心问题分析

  1. 鼠标点击未处理按键释放:当前代码仅检测左键按下状态(bx=01h),但没有等待按键释放,导致一旦左键按下,程序会无限触发clique分支,甚至因为重复进入判断逻辑陷入死循环。
  2. 坐标判断逻辑顺序错误:Jogo标签下的坐标判断逻辑颠倒,导致点击"JOGAR"区域时条件永远不满足,无法跳转到vamos_jogar。
  3. 冗余的DOS调用:opcoes_iniciais中的mov ah,7; int21h是无回显读键盘调用,会卡住程序等待键盘输入,直接阻断鼠标逻辑执行,必须移除。

修复后的关键代码片段

1. 修复鼠标检测逻辑(添加按键释放等待)

ciclo:
   mov ax, 03h ; 获取鼠标位置及按键状态
   int 33h
   
   cmp bx, 01h ; 检测左键是否按下
   je clique
   jmp ciclo

clique:
   ; 等待左键释放,避免重复触发
wait_release:
   mov ax, 03h
   int 33h
   cmp bx, 01h
   je wait_release

Jogo:
   ; 正确的坐标范围判断:y在20-35之间,x在120-175之间
   cmp dx, 20
   jb ciclo
   cmp dx, 35
   ja ciclo
   cmp cx, 120
   jb ciclo
   cmp cx, 175
   ja ciclo
   
   jmp vamos_jogar

2. 移除冗余的DOS调用

在opcoes_iniciais中删除以下两行:

mov ah, 7 ; deixar letra grande
int 21h             

(注:AH=7是DOS的无回显读字符功能,和设置字体大小无关,此处属于错误调用)

3. 补充其他菜单选项的判断逻辑(可选)

如果需要支持"TOP 5"、"CREDITOS"、"SAIR"的点击检测,可在Jogo分支后添加类似的坐标判断:

Top5:
   cmp dx, 42
   jb ciclo
   cmp dx, 57
   ja ciclo
   cmp cx, 120
   jb ciclo
   cmp cx, 175
   ja ciclo
   ; 此处添加TOP5分支逻辑
   jmp ciclo

Creditos:
   cmp dx, 67
   jb ciclo
   cmp dx, 82
   ja ciclo
   cmp cx, 120
   jb ciclo
   cmp cx, 195
   ja ciclo
   ; 此处添加CREDITOS分支逻辑
   jmp ciclo

Sair:
   cmp dx, 90
   jb ciclo
   cmp dx, 105
   ja ciclo
   cmp cx, 120
   jb ciclo
   cmp cx, 175
   ja ciclo
   mov ax, 4c00h ; 退出程序
   int 21h

修复说明

  • 新增wait_release循环,确保只有在左键按下并释放后才处理点击事件,避免重复触发。
  • 调整坐标判断顺序,先判断y坐标是否在目标区域范围内,再判断x坐标,确保逻辑正确。
  • 移除错误的DOS调用,让鼠标初始化和检测逻辑正常执行。

内容的提问来源于stack exchange,提问作者Just do it

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 10:54:57