在c语言中条用汇编子程序给看看这样行吗
这是一个求双精度浮点数开方的子程序
c程序文件
#include <stdio.h>
#include <stdlib.h>
estern double* d_sqrt(double a);打算返回一个指向结果的地址,应为好像汇编程序的返回值是在寄存器ax返回的,存不了64位的浮点数int main(int argc, char *argv[])
{
double i;
double result;
printf("Please input a nonegativ float number:\n");
scanf("%lf",&i);
result=(double *)d_sqrt(i);
printf("The result is %lf\n",result));
system("pause");
return 0;
}
这是汇编子程序,大家看看这样写行么?.8087
.model small,c
public d_sqrt
.data
a dw 4 dup(?);保存传入的参数
b dq 0.5
cc dq ?;保存结果x
d dq 0.0000000001
fla dw ?
.code
d_sqrt proc near
push bp
mov bp,sp
finit
;提取64bit传入参数
mov ax,[bp+4]
mov a,ax
mov ax,[bp+6]
mov a,ax
mov ax,[bp+8]
mov a,ax
mov ax,[bp+0ah]
mov a,ax
;a
fld b
fld qword ptr a
xor ax,ax
fmul
NEWTON:
fst cc
fld st(0)
fld a
fdivr
fsub
fmul b
fabs
fld d
fcompp
fstsw fla
mov ax,fla
sahf
jnb exit
;否则
fld cc
fld qword ptr a
fdivr
fadd
fld b
fmul
jmp newton
exit:
mov ax, ;这里想把cc的地址存入ax中,如何实现,mov ax,cc 好像不是,请教如何把cc的地址存入ax中
pop bp
ret
d_sqrt endp
end
帮忙看看,改改我是在dev下建一个工程文件,包含上面两个文件,这样行么?