-1

多項式の値を計算するプロシージャをアセンブラで作成する必要があります。私は2つのファイルを持っています:

  • 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を使用しており、VisualStudio2012コンパイラを使用しています。コンパイルには、VS2012コマンドラインと次のbatファイルを使用します。

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

また:

3つ以上の引数を持つプロシージャを作成する方法はありますか?

4

1 に答える 1

0

FPUスタックに整数をロードする場合は、コマンドを使用できますfild。コマンドも見てくださいfimul。これを利用して、整数定数を直接乗算に使用できます。

実装のスタックに注意してください。簡単に行う1つの方法は

...
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 に答える