;--- sample how to use FPU and CRT math functions. ;--- Win32 binary: ;--- assemble: jwasm -coff Math1.asm crtexe.asm ;--- link: link Math1.obj crtexe.obj msvcrt.lib ;--- Linux binary: ;--- assemble: jwasm -elf -D?CRT=0 -zcw Math1.asm ;--- link: gcc -o Math1 Math1.o -lm .386 .model FLAT, stdcall option casemap:none pow proto c :real8, :real8 sqrt proto c :real8 atof proto c :ptr byte printf proto c :ptr byte, :VARARG ;--- CStr(): macro to define a text constant CStr macro text:VARARG local x .const x db text,0 .code exitm <offset x> endm ;--- CDbl(): macro to define a double constant CDbl macro value local x .const x real8 value .code exitm <x> endm .code main proc c local result:real8 fld CDbl(1.25) fadd CDbl(3.75) fstp result invoke printf, CStr("1.25 + 3.75 = %f",10), result fld CDbl(3.1) fsub CDbl(3.2) fstp result invoke printf, CStr("3.1 - 3.2 = %f",10), result fld CDbl(4.5) fmul CDbl(3.0) fstp result invoke printf, CStr("4.5 * 3 = %f",10), result fld CDbl(4.2) fdiv CDbl(3.0) fstp result invoke printf, CStr("4.2 / 3 = %f",10), result ;--- for CRT math functions, the result is returned in ST(0) invoke pow, CDbl(2.0), CDbl(3.0) fstp result invoke printf, CStr("2 ^ 3 = %f",10), result invoke sqrt, CDbl(2.0) fstp result invoke printf, CStr("sqrt(2) = %f",10), result invoke atof, CStr("3.567") ; convert a string into a double fstp result invoke printf, CStr('atof("3.567")=%f',10), result xor eax,eax ret main endp end |