采用汇编语言对c语言函数调用的方法求平均数 汇编实验报告,汇编语言调用C语言求平均数.doc...
#include;C语言库函数文件
extern void Input(void);
;用extern声明,这是C语言对汇编语言的Input函数的调用,对整数的输入
extern void Display(char *sting,int length);
;用extern声明,这是C语言对汇编语言Display函数的调用,显示最终的平均数
void Bverage (void);
;汇编语言对C语言的调用,Bverage函数的功能是求所有输入的数字的平均数
int Total=0; ;全局变量,用于计算存储所有数字的和
int in=0; ;全局变量,用于存储输入的总数字的个数
double average; ;全局变量,用于参数传递,存储计算的平均数
int main(void) ;C中的主函数
{
char *string=0; ;字符串用于存储平均数转化的字符串
int length; ;字符串的长度
printf("How many numbers:\n");
scanf("%d",&in);
Input(); ;调用Input()函数进行每一个数字的输入
string=gcvt(average,10,string); ;库函数将平均数转化成字符串存在以string开始的内存空间中
length=strlen(string); ;求字符串的长度
Display(string,length); ;对字符串的显示函数
return 1;
}
void Bverage(void) ;汇编语言调用的求平均数的函数
{
double average;
Total=(double)Total;
average=Total/in;
}
ZUIHOU1.ASM
extrn _Bverage:far ;求平均数的函数的属性far,采用汇编语言对C的调用
extrn _in:word,_Total:word ;全局变量in存放输入的总数字的个数,Total存放所有的数字的和
.model small
.code
public _Input ;Input函数调用
_Input proc
push bp
mov bp,sp ;对bp寄存器压入堆栈
xor ax,ax
xor cx,cx
mov cx,_in ;将数字的总的个数存放在CX寄存器中,用在循环
lop:
xor ax,ax
mov ah,01h ;调用02h系统中断,输入字符串
int 21h
sub al,30h ;将字符串转换成响应的ASCII码
add ax,_Total
mov _Total,ax ;将结果累加到Total变量中
loop lop
call _Bverage ;调用Bverage函数求平均数
mov ah,4ch
int 21h
ret
_Input endp ;子函数结束
End
ZUIHOU2.ASM代码:
.model small
.code
public _Display ;Display函数用于显示平均数结果
_Display proc
push bp ;将bp寄存器压入堆栈
mov bp,sp
xor cx,cx
xor si,si
mov si,[bp+4] ;将字符串的基地址赋给si
mov cx,[bp+6] ;将字符串的长度赋值给CX寄存器
lop1:
mov dl,[si] ;调用02h系统中断屏幕显示字符
mov ah,02h
int 21h
inc si
loop lop1 ;用循环对每一个字符处理
mov ah,4ch
int 21h
ret
_Display endp ;函数结束
End
3.汇编函数的流程图
ZUIHOU1.ASM的流程图:(Input函数)
STAERT
Push bp
CX=in
CX=0?
YES
Call Bverage求平均数
Mov ah,0ah,
int 21h
NO
END
输入字符串
DEC CX
Total=Total+ax
循环将字符串转化成ASCII码
ZUIHOU2.ASM的流程图:(Display函数)
START
Si=[bp+4]
Cx=[bp+6]
CX=0?
YES
NO
END
Mov ah,02h
Int 21h
DL=[si]
DEC CX
四:程序运行结果截图。
五:结论和启示
结论:
本次实验的目的是采用汇编语言对C语言函数的调用求输入的数字的平均数,通过本次试验,学习到了汇编程序对C语言程序的调用的方式,以及公共变量的声明,在汇编函数中应该对所调用的C语言的函数用extrn声明,同时对全局变量用extrn声明。在C语言中对汇编函数的调用也应该用extern进行声明,并且采用的是值传递的方式,对于数组采用地址传递的方式,同时也可以使用C语言和汇编语言的混合调用实现相应的功能。
启示:
本次试验是最后一个实验,通过本次实验的学习,在很大程度上学会了C语言和汇编语言的相互调用,体会到在汇编语言的学习中,应该更加的认真,仔细,对于每一条指令应该熟悉的掌握。汇编语言和C语言之间的相互调用也是学习的重点。
更多推荐


所有评论(0)