汇编语言鼠标位置获取及绘图代码无效果问题求助
汇编中获取鼠标位置并绘制像素的问题解决
你的代码无绘图效果主要有两个核心问题,下面逐个说明并给出修正方案:
1. 未初始化鼠标驱动
int 33h的鼠标功能调用必须先执行初始化操作(ax=0h),否则鼠标驱动未激活,ax=3h获取的坐标值完全无效。
2. 16色视频模式下的绘图参数遗漏
在int 10h/ah=0Ch的绘图调用中,16色模式(如你使用的12h模式)需要显式设置bx=0(指定视频页码,单页显示场景下固定为0),虽然部分环境默认bx为0,但显式设置能避免兼容性问题。
修正后的完整代码
; 先设置视频模式为12h(640x480 16色) mov ah, 0h mov al, 12h int 10h ; 初始化鼠标驱动 mov ax, 0h int 33h ; 检查初始化是否成功(ax返回FFFFh表示成功) cmp ax, 0FFFFh jne mouse_init_fail ; 可添加初始化失败的处理逻辑 ; 获取当前鼠标位置 mov ax, 3h int 33h ; cx=x坐标(0-639),dx=y坐标(0-479) ; 在鼠标位置绘制像素 mov ah, 0Ch mov al, 5 ; 紫色(16色模式下0-15为有效颜色值) mov bx, 0 ; 视频页码,单页模式设为0 ; cx和dx已保存鼠标的x、y坐标,无需重新赋值 int 10h mouse_init_fail: ; 这里可添加初始化失败后的提示或退出逻辑
额外注意事项
- 鼠标坐标范围:12h模式下x为0-639,y为0-479,
int33h/ax=3h返回的坐标会自动适配当前视频模式,无需手动转换。 - 若要持续跟踪鼠标位置并绘制,需加入循环,每次循环调用
ax=3h获取最新坐标后再执行绘图操作,同时可添加键盘退出逻辑(比如检测ESC键输入)。
内容的提问来源于stack exchange,提问作者plsHelpMe
相关产品推荐
相关产品推荐

