2011-05-10 3 views
1

i ', 조립시 완전히 초보자입니다. 두 변수 (부동 소수점)를 비교하고 올바른 함수로 올바르게 점프하고 싶습니다. 볼 위치는 패드의 위치 다음 같은 이상이있는 경우, 다음 속도를 반전 : FASM조립시 2 플로트를 비교하는 방법

;The right pad 
    P0x dd 0.9 ; 
    P0y dd 0.05 ; 
    P1x dd 0.95 ; 
    P1y dd -0.25 ; 

;The left pad 
    P0x2 dd -0.9 
    P0y2 dd 0.05 
    P1x2 dd -0.95 
    P1y2 dd - 0.25 

B0x GLfloat 0.01 ; Its the ball coordinate 
... 
BvelX GLfloat 0.02 ;Its the velocity that the ball move in x 
... 

작성 그것의 탁구 게임 그 나는 것을 원한다.

;right 
fld [B0x] 
fld [P0x] 
fcomip st1 
jge .changexEsq 

;left 
fld [B0x] 
fld [P0x2] 
fcomip st1 
jle .changexDir 

;Up 
fld [B0y] 
fld [TelaComecoY] 
fcomip st1 
jge .changeyBaixo 

;Down 
fld [B0y] 
fld [TelaFimY] 
fcomip st1 
jge .changeyBaixo 

    .... 
.changexEsq: 
mov edi,-0.02 
mov [BvelX],edi 
jmp .main 
    ret 

.changexDir: 
mov edi, 0.02 
mov [BvelX],edi 
jmp .main 
    ret 

.changeyBaixo: 
mov edi,-0.02 
mov [BvelY],edi 
jmp .main 
    ret 

.changeyCima: 
mov edi,-0.02 
mov [BvelY],edi 
jmp .main 
    ret 

그러나 comparation는 아무것도하지 않고있다 : 내가 무엇을! 어떻게 그 변수를 비교하고 올바르게 점프 할 수 있습니까?

답변

1

나는 EFLAGS (ZF, PF와 CF)와 함께 수레를 비교하는 FCOMIP를 사용할 때, JAE/JBE하지 JLE/JGE을 원하는 확신 해요.

2

FCOM과 회사 (FCOMP, FCOMPP, FICOM, FICOMP)는 메인 CPU 플래그 레지스터, 부동 소수점 상태 워드에 하지을 결과를 넣어. fstsw을 사용하면 부동 소수점 상태 어휘를 저장할 수있는 곳에서 부동 소수점 상태 어를 저장할 수 있습니다 (예 : AX에 저장하려면 FSTSW AX 사용).

다소 로터리입니다. 경우에 따라서는 숫자를 정수로 취급하는 것이 좋습니다. IEEE 754는 순서 지정을위한 정수 비교가 대부분 부동 소수점 숫자에 대한 올바른 결과를 산출하도록 신중하게 설계되었습니다.

관련 문제