抱歉,问了这么简单的问题。在汇编语言中,是否可以比较两个存储在不同(固定)内存位置的浮点数,而不将它们加载到堆栈中?除了CMP和JLE之外,我还需要使用其他方法吗?例如,内存地址[A]当前等于95,内存地址[B]等于[90]。如果[A]小于或等于90,我想执行跳转。以下内容是否足够?
CMP DWORD PTR [A], CMP DWORD PTR [B] JLE [Another address]
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结束)。如果这是一个问题,则需要修改代码。
1条答案
按热度按时间puruo6ea1#
如果两个浮点数都为正,并且您不关心NAN这样的问题:
如果任一浮点数可以为负,但不能为负零(08000000h):
负0将以07fffffffh结束,小于正0(以08000000h结束)。如果这是一个问题,则需要修改代码。