Столкнулся с элементарной проблемой, не нахожу решения - хотел прямо в коде использовать float-константу, не обращаясь через DD, скажем: mov eax,0.1 Ведь какая, собственно, разница, каким образом записана константа, если это в конечном счете просто 32-битный immediate? Но тем не меннее masm32 ругается. Приходится так: ;где-то в начале const01 DD 0.1 .... ;где-то в середине mov eax,const01 Может как-нибудь хитро записывать надо? Пробовал в виде 0.1f, тоже ругается, может еще как-то по другому? Уж больно не хочется заводить DD, скакать по коду приходится лишний раз из середины в начало и обратно (код типа тестовый, постоянно все меняется).
Например http://babbage.cs.qc.edu/IEEE-754/Decimal.html masm не поддерживает подобный синтаксис для чисел с плавающей точкой. Разве что городить макросы друг на друга, но это уже другая история.
Dmitry_Milk, из констант, загружаемых напрямую: 0 (команда FLDZ или FSUB st,st), 1.0 (команда FLD1) log2(10)=3,32192809488736234780…=[math]\frac{\displaystyle 1}{\displaystyle 0,3010299956639811952202…}[/math]=[math]\frac{\displaystyle 1}{\displaystyle\lg 2}[/math] (команда FLDL2T) 2.0 (команда FLD1, а потом FADD st,st) log2(e)= 1,44269504088896340725…=[math]\frac{\displaystyle 1}{\displaystyle 0,6931471805599453094172…}[/math]=[math]\frac{\displaystyle 1}{\displaystyle\ln 2}[/math] (команда FLDL2E) π = 3,141593265358979323… (команда FLDPI) lg(2)=0,3010299956639811952202… (команда FLDLG2) ln(2)=0,6931471805599453094172… (команда FLDLN2)
UASM спокойно компилирует так mov eax, 0.123 mov Pi, 3.14159265359 Но и МАСМ тоже так может. Код (ASM): ; поместить непосредственное float значение в стек. pushflt MACRO const:req push 12345678h org $-4 dd const ENDM ; поместить непосредственное float значение в память или регистр, в том числе и xmm. movflt MACRO param:req, const:req IF @SearchStr(<param>,<xmm0,xmm1,xmm2,xmm3,xmm4,xmm5,xmm6,xmm7>) IF @SearchStr(<const>,<0.0,0.,0>) xorps param, param ELSE pushflt const movss param, dword ptr [esp] add esp, 4 ENDIF ELSE mov param, 12345678h org $-4 dd const ENDIF ENDM