首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何比较汇编中的2个浮点数

如何比较汇编中的2个浮点数
EN

Stack Overflow用户
提问于 2011-05-10 09:15:09
回答 2查看 3.5K关注 0票数 1

我完全是汇编界的新手。我想要比较两个变量(浮点数)并正确地跳转到正确的函数;这是一个用FASM编写的Pong游戏

代码语言:javascript
复制
 ;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
...

我想要的是:如果球的位置与垫的位置相同或更多,那么反转速度。我的工作是:

代码语言:javascript
复制
;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

但是这个比较什么也没做!如何比较这些变量并正确跳转?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-10 11:00:31

FCOM和company (FCOMP、FCOMPP、FICOM、FICOMP)将结果放入浮点状态字,而不是主CPU标志寄存器。您可以使用fstsw将浮点状态字存储在您可以获取的位置并对其内容执行操作(例如,要存储到AX,您可以使用FSTSW AX)。

请注意,这有点拐弯抹角。在某些情况下,您可能需要考虑将数字视为整数-- IEEE754经过精心设计,以便用于排序的整数比较大多数情况下都会产生正确的浮点数结果。

票数 3
EN

Stack Overflow用户

发布于 2011-05-10 09:20:56

我非常确定在使用JAE与EFLAGS (ZF,PF和CF)比较浮点数时,您需要的是JBE/JBE,而不是JLE/JGE

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5944185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档