2013-09-04 1 views
2

У меня есть этот код в MASM, чтобы иметь дело с FPU и он прекрасно работаетMASM FPU в ФАПО FPU не может переводить и он не работает

в этом коде я получаю номер из 2-х различных текстовых полей, а затем разделить их и затем выводить результаты в другом текстовом поле

это данные, которые локально

LOCAL variable1 :QWORD 
LOCAL variable2 :QWORD 
LOCAL variable3 :QWORD 

LOCAL string1[20]:BYTE 
LOCAL string2[20]:BYTE 
LOCAL string3[20]:BYTE 

это код

invoke GetDlgItemText,hWin,textbox1,addr string1,9 
invoke StrToFloat,addr string1,addr variable1 

invoke GetDlgItemText,hWin,textbox2,addr string2,9 
invoke StrToFloat,addr string2,addr variable2 

finit 
fld variable1 
fld variable2 
fdiv 
fstp variable3 

invoke FloatToStr,variable3,addr string3 
invoke SetDlgItemText,hWin,textbox3,addr string3 

Я пытаюсь преобразовать код в ФАПО

это то, что я до сих пор, но она не работает ли textbox3 просто говорит 0

это данные (это не локальные данные, потому что у меня есть не узнали, как сделать это в FASM еще)

v1 dq ? 
v2 dq ? 
v3 dd ? 
v4 rb 20 

это код

invoke GetDlgItemTextA,[hWin],textbox1,addr v1,100 
invoke GetDlgItemTextA,[hWin],textbox2,addr v2,100 

finit 
fld qword [v1] 
fld qword [v2] 
fdivp 
fstp qword [v3] 

cinvoke wsprintfA,addr v4,"%u",[v3] 
invoke SetDlgItemTextA,[hWin],textbox3,addr v4 

Я знаю, что этот код не сразу потому что я не преобразования текста плавать в начале, но я не знаю, как

Я также попытался более простую версию, и она не работает, либо

mov [v1],5.3 
mov [v2],7.1 

finit 
fld [v1] 
fld [v2] 
fdivp 
fstp [v3] 

cinvoke wsprintfA,addr v4,"%u",[v3] 
invoke SetDlgItemTextA,[hWin],maximumoutputpowertext,addr v4 

поэтому мой вопрос может кто-то пожалуйста, покажите мне, как читать номер из 2-х различных текстовых полей, а затем разделить их и результат возврата к другому текстовому полю используя FASM код

спасибо

+0

Я не знаком ни с ОС Windows или ФАПО, но переход на DWord для переменной 3 выглядит не так, и не '% u' в вашей конверсии , Начните с этого и посмотрите, помогает ли это ... –

+0

Я не думаю, что это потому, что я использовал эти 2 строки кода для преобразования необработанных чисел в читаемые тексты в другие проекты. –

+0

Подойдите сами. Как это «не работает»? Я уверен, что Fasm хочет «rq 1» для неинициализированной двойной точности float (одно из отличий от синтаксиса Nasm) и '% f' для scanf, printf и друзей. Printf определенно всегда требует двойной точности, хотя мы говорим '% f'. Я менее уверен в scanf. –

ответ

0

есть несколько проблем в демонстрируемой коде.

Во-первых, неясно, какая процедура StrToFloat есть? Является ли она импортирована из некоторой библиотеки DLL или является частью кода или какой-либо другой библиотеки?

Если эта процедура импортирована, она также должна быть импортирована в программу FASM. Иначе это может быть написано с нуля или перенесено в исходную форму из программы MASM.

Непосредственный выставочный стоп здесь mov [v1], FLOAT_CONSTANT инструкция. Причина в том, что v1 - переменная qword, но mov может перемещать только мгновенные значения dword (даже в среде 64 бит).

mov dword [v1], 5.0 отлично работает, но, конечно, это не то, что требуется OP. Плавающие константы QWORD могут быть определены непосредственно во время компиляции, а также: v1 dq 3.2

Если мы действительно хотим, чтобы установить некоторые QWORD плавающей постоянной во время выполнения, мы должны сделать это в двух команд следующим образом:

a = 5.3 

    mov dword [var], (a and $ffffffff) 
    mov dword [var+4], (a shr 32) 

    var dq ? 

Исходный код FPU в синтаксисе FASM будет:

finit 
    fld [variable1] 
    fdiv [variable2] 
    fstp [variable3] 
+0

Duh! Спасибо, Джон! –

+0

вопрос в том, как я могу прочитать один номер из одного текстового поля, другой номер из другого текстового поля, умножить их на использование FPU, а затем показать результаты в третьем текстовом поле. –

+0

strtofloat - это особая секретная вещь. в основном мне нужна помощь с 2 частями. первая часть читает текст из текстового поля и преобразует его в float для отправки в FPU. вторая часть использует FPU для умножения. У меня уже есть третья часть кода, которая предназначена для преобразования float в текст. спасибо –