在c语言中条用汇编子程序给看看这样行吗

bupo_007 2009-05-11 03:36:07
这是一个求双精度浮点数开方的子程序

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下建一个工程文件,包含上面两个文件,这样行么?
...全文
109 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuyang8889 2009-06-01
  • 打赏
  • 举报
回复
加油
Michael_g 2009-06-01
  • 打赏
  • 举报
回复
你想在C里调用外部函数用三种方法
1. 将外部函数编译成DLL
2. 将外部函数编译居obj 文件,然后在编译成EXE里在合并
3. 将汇编代码插入到C文件中。

我从你给的代码来看,不能用第三种方法的,因为c不支持汇编中的伪指令的,所以你只能考滤用第一 或第二种
goodider 2009-05-11
  • 打赏
  • 举报
回复
基本上就是这样了。
nanlingcg 2009-05-11
  • 打赏
  • 举报
回复
看帖回帖。。。
cnzdgs 2009-05-11
  • 打赏
  • 举报
回复
estern拼写错了,是extern。
把cc地址存入ax可以这样写:
lea ax, cc

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧