Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 8086汇编中的鼠标_Assembly_Mouse_X86 16 - Fatal编程技术网

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
给出的坐标匹配吗?