-1

我需要在汇编程序中编写一个程序来计算多项式的值。我有两个文件:

  • C 源文件
  • ASM 源文件

C 文件:

#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;
}

ASM 文件:

.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) 的值。可能 mov 和 push 是问题的原因。

结果我得到-1.#IND00

我在 Windows 上,使用 Visual Studio 2012 编译器。对于编译,我使用 VS2012 命令行和以下 bat 文件:

del *.obj
cl -c poly.c
ml -c poly.asm
cl poly.obj poly.obj

还:

有什么方法可以创建一个具有 2 个以上参数的过程?

4

1 回答 1

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).

于 2012-10-26T00:07:54.037 回答