int 10h,在汇编中为0d的ah始终返回0作为像素的颜色。我该怎么办?

问题描述 投票:0回答:2

该代码允许播放器移动鼠标,当播放器按下左键时,他将按下的像素的颜色与红色进行比较。 int 10h,啊作为0d总是返回0作为像素的颜色,我该怎么办?

mov ax, 0
int 33h
mov ax,1h
int 33h
check:
    mov ax, 3
    int 33h
    cmp bx, 1
    jne check
mov ax, 4
int 33h
xor ax, ax
mov ah, 0Dh
mov bh, 0
int 10h
cmp al, 0100b
je print_white_screen
assembly x86 dos
2个回答
1
投票

我的猜测是该像素被报告为黑色,因为这就是鼠标指针的轮廓。 BIOS不会补偿鼠标指针下方显示的颜色。尝试隐藏鼠标指针(int 33h,ah = 02),读取像素,然后重新显示指针(int 33h,ah = 01)。


0
投票
  • 取决于视频模式,您可能正在探测错误的屏幕点。鼠标功能03h总是返回0-639范围内的X值和0-199范围内的Y值,与视频模式无关。但是视频功能0Dh确实期望屏幕依赖坐标。

  • 鼠标报告的坐标是鼠标光标的热点。确保它对应于鼠标蒙版中的ON像素。您可以使用鼠标功能09h自己定义这些功能。或者,偏移报告的坐标,以指向标准鼠标箭头的中间。这一点将处于启用状态。

  • cmp al, 0100b为什么期望颜色为红色?从鼠标功能00h获得的标准鼠标箭头将为white。最好使用cmp al, 15

  • 如果要从背景中测试像素,则应隐藏鼠标箭头(鼠标功能02h),然后要求BIOS读取该像素。您的代码当前对鼠标功能04h进行了冗余调用!

© www.soinside.com 2019 - 2024. All rights reserved.