我想比较堆栈上的浮点值(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,这恰好起作用,因为0x00000000
和0.0
具有相同的位模式。
解决此问题的一种方法是将fcom
更改为ficom
:
ficom word ptr [temp] ; or dword ptr, depending on the size of temp