Assembly 8086汇编中的鼠标
作为学校项目的一部分,我正在制作一个游戏,展示我们这学期学到的一切。 所以我做了一个游戏,你是一个微笑的人,你绕着一个迷宫跑,障碍物把你带回到迷宫的起点,一旦你到达终点,你就进入下一个关卡 所以我想添加一个带有“按钮”的标题屏幕——几乎是一个以文本绘制的标题屏幕,然后:Assembly 8086汇编中的鼠标,assembly,mouse,x86-16,Assembly,Mouse,X86 16,作为学校项目的一部分,我正在制作一个游戏,展示我们这学期学到的一切。 所以我做了一个游戏,你是一个微笑的人,你绕着一个迷宫跑,障碍物把你带回到迷宫的起点,一旦你到达终点,你就进入下一个关卡 所以我想添加一个带有“按钮”的标题屏幕——几乎是一个以文本绘制的标题屏幕,然后: mov ax, 3h int 33h mov mouseClick, bx mov mouseX, cx mov mouseY, dx call checkMClick cmp mousePos, 1h
mov ax, 3h
int 33h
mov mouseClick, bx
mov mouseX, cx
mov mouseY, dx
call checkMClick
cmp mousePos, 1h
je goodMPos
jne badMPos
goodMPos:
call firstLevel
call newMazePos
call output
;---------------------------------------;
checkMClick: cmp mouseclick, 1h
je checkMouseX
jne mouse
checkMouseX: cmp mouseX, 7h
jge afterStartX
jl mouse
afterStartX: cmp mouseX, 23h
jle goodXPos
jg badMPos
goodXPos: mov mousePos, 1h
jmp checkMouseY
checkMouseY: cmp mouseY, 7h
jge afterStartY
jl mouse
afterStartY: cmp mouseY, 11h
jge goodYPos
jl badMPos
goodYPos: mov mousePos, 1h
ret
badMPos: mov mousePos, 0h
jmp mouse
但是鼠标位置的坐标被搞砸了
编辑:您必须更改操作数的顺序!寄存器是源
mov bx, mouseClick
mov cx, mouseX
mov dx, mouseY
另外,鼠标驱动程序的功能3给出的位置就好像屏幕是640x200。你必须对此作出补偿
; DATA segment
mouseClick DW ?
mouseX DW ?
mouseY DW ?
mousePos DW ?
; CODE segment
mov ax, 3h
int 33h
mov [mouseClick], bx ; Write the value of BX to mouseClick
mov [mouseX], cx ; Write the value of CX to mouseX
mov [mouseY], dx ; Write the value of DX to mouseY
下面的说明需要指定要访问的字节数
cmp mouseclick, 1h
mov mousePos, 1h
cmp WORD[mouseclick], 1h ; for to compare two bytes
mov WORD[mousePos], 1h ; for to write two bytes
对于检查未签名的number,如果值大于或小于,我们可以使用说明:“ja,jna,jb,jnb”。说明:“jg、jng、jl、jnl代表有符号的数字
在文本模式下,所有坐标都指定为单元大小的倍数,通常为8x16或8x8像素。
在文本模式中,所有坐标都指定为单元格大小的倍数,通常为8x16或8x8像素。我处于视频模式
03h
,即640x200和8x8,这难道不意味着坐标应该与int 33h
给出的坐标匹配吗?鼠标坐标在640x200之间,但文本屏幕分为80x2005行,5列。哦,我明白了。所以我必须相应地乘以X,Y?我处于视频模式03h
,即640x200和8x8——这不意味着坐标应该与int 33h
给出的坐标匹配吗?