View Single Post
Old 03-07-2016, 15:35   #55
||ElChE||88
Senior Member
 
Iscritto dal: Dec 2003
Messaggi: 4907
Quote:
Originariamente inviato da fano Guarda i messaggi
avevamo scritto:
fadd qword[__ulong2double_const4]
ma __ulong2double_const4 era in realtà un intero a 32 bit (un double word come piace chiamarlo ad Intel ) quindi NASM faceva un cast maldestro facendolo diventare:
00 00 00 00 5F 80 00 00
ma poi solo i primi 4 byte erano in qualche modo sommati? Quindi un'addizione con 0x00000?
Semplice: 0x5F800000 è la rappresentazione binaria di 18446744073709551616 in formato floating-point 32 bit, mentre 0x000000005F800000 non è la rappresentazione binaria di 18446744073709551616 in formato floating-point 64 bit.

Esempio:
Codice:
unsigned int val1 = 0x5F800000UL;
unsigned long long val2 = 0x000000005F800000ULL;
unsigned long long val3 = 0x43F0000000000000ULL;

printf("%f\n%f\n%f\n", *(float *)&val1, *(double *)&val2, *(double *)&val3);
Codice:
18446744073709551616.000000
0.000000
18446744073709551616.000000
||ElChE||88 è offline   Rispondi citando il messaggio o parte di esso