0
我想了解如何使用xmm寄存器比較兩個浮點數(32位)。 爲了測試我用C編寫的代碼(它調用了彙編代碼):xmm,cmp兩個32位浮點數
#include "stdio.h"
extern int compare();
int main()
{
printf("Result: %d\n", compare());
return 0;
}
這裏是國內組裝,我想測試。如果B <℃,在這種情況下,它確實 和代碼應該返回1,但它返回0:
section .data
a: dd 5.5555
b: dd 1.1111
c: dd 5.5555
section .text
global compare
compare:
; -------------------------------------------
; Entrace sequence
; -------------------------------------------
push ebp ; save base pointer
mov ebp, esp ; point to current stack frame
push ebx ; save general registers
push ecx
push edx
push esi
push edi
movss xmm0, [b]
movss xmm1, [c]
comiss xmm0, xmm1
jl change
mov eax, 0
jmp end
change:
mov eax, 1
end:
; ------------------------------------------
; Exit sequence
; ------------------------------------------
pop edi
pop esi
pop edx
pop ecx
pop ebx
mov esp, ebp
pop ebp
ret
如果我嘗試JG返回1使用,但我認爲它應該是相反的,XMM0小於XMM1。
如果我寫
movss xmm0, [b]
comiss xmm0, [b]
je change
它返回1,符合市場預期。 有人知道它爲什麼這樣表現嗎?也許我沒有使用正確的跳轉說明。
JE和JNE應該工作得過.. ..? – AR89
@ AR89是。 ZF標誌在相等時設置。 –