鼠标在Assembly 8086中

时间:2014-12-21 22:20:11

标签: assembly mouse x86-16

作为学校项目的一部分,我正在制作一个游戏,展示我们本学期学到的所有东西。 所以我把这个游戏制作成了你这个笑脸的家伙,你在迷宫中跑来跑去,让你回到迷宫的起点,一旦你到达终点,就会进入下一个层次。

所以我想添加一个带有"按钮的标题屏幕" - 几乎是用文字绘制的标题屏幕,然后:

 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

但是鼠标位置的坐标被搞砸了。

编辑:Here's the pastebin for the entire thing

2 个答案:

答案 0 :(得分:1)

你必须改变操作数的顺序!寄存器是源。

mov  bx, mouseClick
mov  cx, mouseX
mov  dx, mouseY

此外,鼠标驱动程序的功能3给出的位置就像屏幕是640x200一样。你必须弥补这一点。

答案 1 :(得分:0)

; 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

为了检查无符号的nunbers,如果值高于或低于,我们可以使用说明:" ja,jna,jb,jnb"。说明:" jg,jng,jl,jnl用于签名号码。

在文本模式下,所有坐标都指定为单元格大小的倍数,通常为8x16或8x8像素。 http://en.wikipedia.org/wiki/Text_mode