我完全是汇编界的新手。我想要比较两个变量(浮点数)并正确地跳转到正确的函数;这是一个用FASM编写的Pong游戏
;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但是这个比较什么也没做!如何比较这些变量并正确跳转?
发布于 2011-05-10 11:00:31
FCOM和company (FCOMP、FCOMPP、FICOM、FICOMP)将结果放入浮点状态字,而不是主CPU标志寄存器。您可以使用fstsw将浮点状态字存储在您可以获取的位置并对其内容执行操作(例如,要存储到AX,您可以使用FSTSW AX)。
请注意,这有点拐弯抹角。在某些情况下,您可能需要考虑将数字视为整数-- IEEE754经过精心设计,以便用于排序的整数比较大多数情况下都会产生正确的浮点数结果。
发布于 2011-05-10 09:20:56
我非常确定在使用JAE与EFLAGS (ZF,PF和CF)比较浮点数时,您需要的是JBE/JBE,而不是JLE/JGE。
https://stackoverflow.com/questions/5944185
复制相似问题