ASM jbe не работает (fpu)

82
10

Я хочу сравнить float в стеке (st (0)) и значение в переменной temp. Почему jae работает хорошо (прыгает на @Next), но jbe не прыгает на @Next2?

mov     te, 254
fild te;
mov rax, 0;
mov temp, 0
fcom temp;
fstsw ax;
SAHF;
jae @Next
mov byte ptr [rcx], 0;
ret;

@Next:
mov rax, 0
mov temp, 255
fcom temp;
fstsw ax;
SAHF;
jbe @Next2
mov byte ptr [rcx], 255
ret;

@Next2:
fistp word ptr [rcx];

спросил(а) 2015-11-04T21:59:00+03:00 4 года, 11 месяцев назад
1
Решение
90

mov     temp, 255
fcom temp;

Это не сработает, потому что fcom ожидает fcom с плавающей запятой, и вы предоставляете ему целочисленный операнд. Для значения 0 это работает, потому что 0x00000000 и 0.0 имеют один и тот же шаблон бита.

Одним из способов решения этого было бы изменение fcom на ficom:

ficom word ptr [temp]  ; or dword ptr, depending on the size of temp

ответил(а) 2015-11-04T23:21:00+03:00 4 года, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема