Как сравнить 2 поплавка в сборке - PullRequest
1 голос
/ 10 мая 2011

я, совершенно новичок в сборке.Я хочу сравнить две переменные (float) и правильно перейти к нужной функции;Это игра в понг. Она написана на FASM

 ;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

Но сравнение ничего не делает!Как я могу сравнить эти переменные и правильно прыгнуть?

Ответы [ 2 ]

2 голосов
/ 10 мая 2011

FCOM и компания (FCOMP, FCOMPP, FICOM, FICOMP) помещает результаты в слово состояния с плавающей запятой, not в регистр основных флагов ЦП.Вы можете использовать fstsw для хранения слова состояния с плавающей запятой там, где вы можете получить его, и воздействовать на его содержимое (например, для сохранения в AX вы используете FSTSW AX).

Обратите внимание, что это несколькокруговое движение.В некоторых случаях вы можете рассмотреть возможность обработки чисел так, как если бы они были целыми числами - IEEE 754 был тщательно спроектирован так, чтобы целочисленные сравнения для упорядочения в большинстве случаев давали правильные результаты для чисел с плавающей запятой.

1 голос
/ 10 мая 2011

Я почти уверен, что вы хотите JAE / JBE, а не JLE / JGE, при использовании FCOMIP для сравнения чисел с плавающей запятой (ZF, PF и CF).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...