带有常量的x86汇编程序

时间:2012-10-25 22:19:38

标签: assembly x86

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

  • 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文件:

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

ALSO:

有没有办法创建一个包含2个以上参数的过程?

1 个答案:

答案 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)