2011-05-10 54 views
1

i',完全是装配新手。 我想比较两个变量(float)并正确跳转到正确的函数; 它是一种傍游戏 它写在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 

但表的比较是做什么!我怎么能比较这些变量并正确跳转?

回答

1

我敢肯定你想JAE/JBE,不JLE/JGE,使用FCOMIP时比较EFLAGS(ZF,PF和CF)的浮动。

2

FCOM和公司(FCOMP,FCOMPP,FICOM,FICOMP)将结果放入主CPU标志寄存器中的浮点状态字而不是。您可以使用fstsw将浮点状态字存储在某处,并对其内容进行操作(例如,存储到AX,您使用FSTSW AX)。

请注意,这有点迂回。在某些情况下,您可能需要考虑将数字视为整数 - IEEE 754经过精心设计,因此对于排序的整数比较主要针对浮点数产生正确的结果。