2011-05-10 20 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經過精心設計,因此對於排序的整數比較主要針對浮點數產生正確的結果。