Code: Select all
Dim m As UInteger
m=&hffffffff
Print m
m=4.2e9
Print m
Code: Select all
4294967295 <----OK!
2147483648 <----Very wrong!!
Code: Select all
Dim m As UInteger
m=&hffffffff
Print m
m=4.2e9
Print m
Code: Select all
4294967295 <----OK!
2147483648 <----Very wrong!!
Code: Select all
? 2^32
? 2^31 ' minus one bit for the sign
dim m as uinteger = &HFFFFFFFF
dim f as single
asm fild dword ptr [m]
asm fstp dword ptr [f]
? m,f
f=4.2e9
asm fld dword ptr [f]
asm fistd dword ptr [m]
? m,f
sleep
Code: Select all
dim m as uinteger, d as double
d = 4.2e9
print d
m = d '' << correctly assigns 420000000 to m
print m
Apparently GAS allows suffixes on the opcode mnemonic even in INTEL syntax mode. e.g. incb [eax] / incw [eax] / incd [eax] are all valid. But I could not find any GNU docs that actually say 'd' is a supported suffix.D.J.Peters wrote: it must be fistp (integer store and pop) but freebasic or as accept fistd (integer store and dop) :-)
is it legal code?
Code: Select all
print cuint( 4200000000# )
const d as double = 4200000000#
print cuint( d )
dim e as double
e = 4200000000#
print cuint( e )
Code: Select all
dim m as uinteger
asm AAAAAAAAAAAAAAAAAAAAAA:
m=4.2e9
asm BBBBBBBBBBBBBBBBBBBBBB:
print m
sleep
0.15b
AAAAAAAAAAAAAAAAAAAAAA:
fld qword ptr [Lt_0003]
sub esp, 8
fistp qword ptr [esp]
pop dword ptr [_M]
add esp, 4
BBBBBBBBBBBBBBBBBBBBBB:
0.16b
AAAAAAAAAAAAAAAAAAAAAA:
fld qword ptr [_Lt_0003]
sub esp, 8
fistp qword ptr [esp]
pop dword ptr [ebp-8]
add esp, 4
BBBBBBBBBBBBBBBBBBBBBB:
0.18b
AAAAAAAAAAAAAAAAAAAAAA:
mov dword ptr [ebp-8], -2147483648
BBBBBBBBBBBBBBBBBBBBBB: