У меня есть этот код в masm для работы с FPU, и он отлично работает
в этом коде я получаю число из двух разных текстовых полей, затем делю их, а затем вывожу результаты в другое текстовое поле.
это локальные данные
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
Я пытаюсь преобразовать код в fasm
это то, что у меня есть до сих пор, но оно не работает, текстовое поле3 просто говорит 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
поэтому мой вопрос: может ли кто-нибудь показать мне, как читать число из двух разных текстовых полей, а затем разделять их и возвращать результат в другое текстовое поле, используя код fasm.
благодарю вас
%u
в вашем преобразовании. Начните с этого и посмотрите, поможет ли это... - person Frank Kotler   schedule 04.09.2013rq 1
для неинициализированного числа с двойной точностью (одно из отличий от синтаксиса Nasm) и%f
для scanf, printf и им подобных. Printf определенно всегда требует двойной точности, хотя мы говорим%f
. Я менее уверен в scanf. - person Frank Kotler   schedule 05.09.2013mov [v1]. 5.0
— десятичная точка указывает на плавающую запятую. Подозреваемый Фасм такой же(?). Где Джон Фаунд, когда он нам нужен? :) - person Frank Kotler   schedule 05.09.2013mov [v1], 5.0
не будет работать, потому что вы не можете хранить непосредственные константы размером более 32 бит.mov dword [v1], 5.0
работает нормально. В 64-битном контекстеmov rax, 5.0 | mov [v1], rax
тоже работает. - person johnfound   schedule 05.09.2013