assembly 我可以比较两个浮点数而不将它们加载到x87堆栈中吗?

7z5jn7bk  于 2023-01-26  发布在  其他
关注(0)|答案(1)|浏览(114)

抱歉,问了这么简单的问题。
在汇编语言中,是否可以比较两个存储在不同(固定)内存位置的浮点数,而不将它们加载到堆栈中?除了CMP和JLE之外,我还需要使用其他方法吗?
例如,内存地址[A]当前等于95,内存地址[B]等于[90]。如果[A]小于或等于90,我想执行跳转。以下内容是否足够?

CMP DWORD PTR [A], CMP DWORD PTR [B]
JLE [Another address]
puruo6ea

puruo6ea1#

如果两个浮点数都为正,并且您不关心NAN这样的问题:

mov     eax,[a]
        cmp     eax,[b]
        jbe     ...

如果任一浮点数可以为负,但不能为负零(08000000h):

mov     eax,[a]
        cmp     eax,[b]
        mov     ecx,eax
        sar     ecx,31
        or      ecx,080000000h
        xor     eax,ecx
        mov     ecx,ebx
        sar     ecx,31
        or      ecx,080000000h
        xor     ebx,ecx
        cmp     eax,ebx
        jbe     ...

负0将以07fffffffh结束,小于正0(以08000000h结束)。如果这是一个问题,则需要修改代码。

相关问题