ASM jbe not working (fpu)



我想比较堆栈上的浮点值(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];
mov     temp, 255
fcom    temp;

这将不起作用,因为fcom需要浮点操作数,而您为其提供的是整数操作数。对于值0,这恰好起作用,因为0x000000000.0具有相同的位模式。

解决此问题的一种方法是将fcom更改为ficom:

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

相关内容

  • 没有找到相关文章

最新更新