2014-12-21 3 views
1

학교 프로젝트의 일환으로 이번 학기에 배운 모든 것을 보여주는 게임을 만들고 있습니다. 그래서 나는이 스마일 녀석 인이 게임을 만들었고, 미로의 시작으로 당신을 데려 오는 장애물이있는 미로 주위를 돌아 다니며, 일단 당신이 끝까지 도달하면 다음 단계로갑니다.Assembly in mouse 8086

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

답변

1

당신은 피연산자의 순서를 변경해야합니다! 레지스터가 소스입니다.

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

또한 마우스 드라이버의 기능 3은 화면이 640x200 인 것처럼 위치를 지정합니다. 이것을 보상해야합니다.

+0

.. 모드'03h'는 640x200과 8x8입니다 - 좌표가'int 33h'에 의해 주어진 것과 일치해야한다는 것을 의미하지 않습니까? –

+1

도와 줘서 고마워요! : http://pastebin.com/WWe7Sk9d –

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 서명 숫자입니다

텍스트 모드에서

, 모든 좌표는 일반적으로 8 × 16 또는 8 × 8 픽셀, 셀 크기의 배수로 지정 내가 비디오에서 오전 http://en.wikipedia.org/wiki/Text_mode

+0

텍스트 모드에서 모든 좌표는 셀 크기의 배수 (일반적으로 8x16 또는 8x8 픽셀)로 지정됩니다 http://en.wikipedia.org/wiki/Text_mode 640x200 및 8x8 인 비디오 모드 '03h'입니다. - 그 좌표가 'int 33h'에 의해 주어진 것과 일치합니까? –

+0

마우스 좌표는 640x200이지만 텍스트 화면은 80x25 행, 열로 나뉩니다. –

+0

아, 알겠습니다. 그래서 나는 X, Y를 그에 따라 곱해야 할 것인가? –