Сап, програмач!Приспичило тут научится в асмблерНужно:вычислить значение функции и вывести типа точки (x, y)вот.Что не выходит:После успешных вычислений функции на фпу результат нужно вывести. вот. я ожидал что fst dword * загрузит из st0 в виде флоат и printf сможет его напечатать..но этого не происходит.Вот упрощенный кусок кода push 0 finit fld1 fstp dword [esp] pop eax cinvoke printf, formatstr, eax ... formatstr db '%f', 0ah, 0Как здесь сделать чтоб напечаталась единичка?Ах да: компилю фасмом на вин32
лучше всего сделать это на Visual Basic
>>886362 (OP)Сишные конвенции, по-моему, ожидают флоаты в фпу. Ещё можешь wsprintf попробовать, она, по-моему, должна прямо так работать.
>>886362 (OP)Во-первых, FPU на помойку, используй SIMD. Во-вторых, скомпилируй нужный код на си и посмотри в дизассемблере как оно должно быть. У тебя там какая-то хуйня вообще. Кто тебя так учил писать?
>>886362 (OP)Дело в том, что из-за особенностей языка си нельзя передать float в функцию с переменным числом аргументов. Так как Си не знает, какого типа должен быть параметр, он кастит все целые меньше int к int, а float кастится в double. Соответственно, %f в printf хочет дабл. И ты должен сделать:push 0push 0fld1fstp qword[esp]; тут можно сделать; push formatstr; call [printf]; и потом компенсировать стек; add esp,8+4; или дрочить, как у тебя:; взять кусочкиpop eaxpop edx; и затолкать их обратноcinvoke printf,formatstr,eax,edx