我需要在汇编程序中编写一个程序,用于计算多项式的值。 我有两个文件:
#include <stdio.h>
#include <stdlib.h>
double func(double,double);
int main()
{
double x=3;
double y=2;
printf("%f\n",func(x,y) );
return 0;
}
0.386 .model flat,c .stack 100h
.DATA
var DW 27
.code
func PROC a:QWORD, b:QWORD
finit
fld b
fld b
fmul
fld b
fmul
fld a
fld a
fmul
fld a
fmul
mov ax, [var]
push ax
fmul
fdiv
fwait
RET
func ENDP
end
我想在这个阶段实现的是(b ^ 3)/(27 * a ^ 3)的值。 可能是移动和推动是问题的原因。
结果我得到-1.#IND00
我在Windows上,并使用Visual Studio 2012编译器。 对于编译,我使用VS2012命令行和以下bat文件:
del *.obj
cl -c poly.c
ml -c poly.asm
cl poly.obj poly.obj
有没有办法创建一个包含2个以上参数的过程?
答案 0 :(得分:0)
如果要将整数加载到FPU堆栈,可以使用fild
命令。另请查看fimul
命令,借助此功能,您可以直接使用整数常量进行乘法。
请在实施中注意堆栈。一种方法就是
...
fld qword ptr [b]
fmul qword ptr [b]
fmul qword ptr [b]
fild dword ptr [var]
fmul qword ptr [a]
fmul qword ptr [a]
fmul qword ptr [a]
fdivp st(1),st
...
代码完成后,结果将显示在st(0)
。