首页 > 文章中心 > c语言函数

c语言函数

c语言函数

c语言函数范文第1篇

关键词:模块化程序设计;函数调用;嵌套;递归

0 引言

程序调用是指当前正在执行的程序(又称调用程序)中出现了调用其它程序的语句,使得程序的执行转移到另一个程序段(又称为被调用程序)中,同时保存必要的信息,以便在被调用程序执行结束后恢复执行调用程序的过程。在C/C++语言中,称程序调用为函数调用。当在一个函数中出现了函数名时,就发生了函数调用。在C/C++语言中,有以下两种函数调用方式:

(1)函数调用以一个语句的形式出现,这时被调用函数可以没有返回值(函数类型可以设置为void类型);

(2)以表达式中的一个项的形式出现,被调用函数必须有一个明确的返回值。

按照函数调用的性质的不同,函数调用又分为两类:函数嵌套调用和函数递归调用。以下就嵌套调用与递归调用概念进行一些说明。

1 存在问题和解决办法

C语言函数的定义都是独立的,互不包含。换句话来说,一个函数内不能包含对另一个函数的定义。

嵌套调用。C语言不能嵌套定义函数,但可以嵌套调用(nested calling)函数。嵌套调用过程如图1所示。

图1 C语言函数嵌套调用过程

递归调用。在调用一个函数的过程中出现了直接或间接地调用该函数本身,称为函数的递归调用。换句话说,当一个程序调用它自身时就发生了递归(recursive calling)。C/C++语言的特点之一就在于允许函数的递归调用,如图2所示。

递归算法的实质是将原来的问题分解为新的问题,而对新的问题又用到了原有问题的解法。按照这一原则分解下去,每次出现的新问题是原有问题的简化子集,而最终分解出来的问题,是一个已知解的问题(即调用至满足调用终止条件,得到一个可用的基础值),这便是有限的递归调用。只有有限的递归调用才是有意义的;无限的递归调用永远得不到解,没有实际意义。

图2 函数的递归调用过程

递归的过程有两个阶段:

第一阶段,递推。将原有的问题不断分解为新的子问题,逐渐从未知向已知推进,直到推进至满足调用终止条件,得到一个可用的基础值。

第二阶段,回归。从基础值出发,按照递推的逆过程,逐一求值回归,最后到达递推的开始处,结束递归调用。

2 函数嵌套调用与递归调用实例分析

现各举一个嵌套调用和递归调用的小程序,以说明上面的理解(为了表明C++也支持嵌套调用和递归调用,以下程序用C++语言编写)。

例1:输入两个整数,求它们和的平方。

分析:为了说明函数的嵌套调用,针对该问题可以设计两个函数,求平方的函数SQU及求另一个整数平方和的函数SUM。由主函数调用SQU,SQU又调用SUM(见图3)。

图3 函数的嵌套调用和递归调用

假设求平方的函数为为a,求整数平方和的函数为b,程序

如下(Source Code):

//

//nestf.cpp

//The C++program illustrates nested functiOn calling.

//CaIculation of the quadratic sum of two Integers.

//

#incIude<iOstream.h>

Vo|d math(void)

{int m,n;

int a(int x,inl y);//function prolotype

COUl<<"pIease enter two jntegers:"<<endI;

cin>>m>>n;

COUt<<“the quadratic sum of m and n is"<<a(m,n)<<endl;

//calIing function

}

int a(int x,int y) //function decIaration

{int b(int m);//function prototype

return(b(x)+b(y));

//calling nested functiOn and function retum

}

int b(int k)//function declaration

{reIum(k*k);)//funclion return

例2:求n!

分析:根据

程序流程:

图4 程序流程

以下以6 1为例:

我们可以进行以下分析:

6!=6*5!5!=5*4!4!=4*3!3!=3*2!2!=2*1!1!=1*0!0!=1

未知――――――(递推)――――――――――已知

6!=6*5!=7205=5*4!=1204!=4×3!=243!=3*2!=62!=21!=1*0!=10!=1

未知――――――(回归)―――――――――已知

Source Code:

//

//factof.cpp

//A C++program illustrating recursiVe functiOn caIIs.

//CaIcuIating the factorial of a number.

//ExamDIe:6!=6*5*4*3*2*1=720

//

#incIude<iOstream.h>

long flactof(int n)//funclion declaration

{long a;

if(n<0)

count<<"The integer(n)which you entered must be

greater than or equal to zero!"<<endI;

eIse if(n==0)a=1;//the basic condition to terminale

eIse a=facfof(n-1)*n;//iterating

retum(a);

}

void main()

{long faclof(inI n);//funclion procotype

int b=6;

long y;

y=factof(b);//recursiVe calling

COUl<<"6!="<<y<<endl;

}

3 结束语

嵌套调用是将功能独立的函数有机地结合起来,完成一项任务。采用嵌套调用,提高了程序的可读性、可维护性和可扩充性。而采用递归调用允许某些算法用简单的小例程来实现,但不能保证速度或效率。递归使用不当会导致程序在执行过程中耗尽空间(因为在递归调用时必然要一次次生成新的同名局部变量,并动态地为其分配存储单元),从而引起程序(有时是整个系统)崩溃。

c语言函数范文第2篇

(山东理工大学计算机科学与技术学院,山东 淄博 255049)

【摘 要】C语言程序设计是理工科专业的一门重要公共基础课,根据实际教学经验通过类比法对函数定义和函数调用中参数的多样性进行分析,提高学生对C语言学习的兴趣和积极性,加强知识点的综合掌握和应用。

关键词 C语言;函数;参数;类比法

基金项目:山东理工大学计算机科学与技术学院院级教学研究课题“网络教学平台下C语言分组教学研究与实践”。

作者简介:陈波(1981—),女,山东淄博人,硕士,山东理工大学计算机学院基础教学部,讲师。

巨同升(1965—),男,山东潍坊人,硕士,山东理工大学计算机学院基础教学部,副教授。

0 引言

函数是构成C程序的基本单位,也是实现模块化程序设计的重要手段[1]。函数可以和C语言的其它知识点综合起来,实现对C语言知识点地综合理解和应用。但是学生在对函数的学习过程中存在诸多问题,笔者认为首先从宏观上理解函数,再从微观上学习函数。

1 函数的宏观理解

C函数有四要素:函数名、参数、函数体、返回值,函数就像一台机器(函数名),对输入的数据(参数)进行加工(函数体)并输出加工得到结果(返回值)。如图所示。具体函数的输入、功能及输出是什么取决于函数的定义。

2 函数的定义

函数的定义是制造一台实现某一功能的机器,函数定义的基本格式为[2]:

返回值类型 函数名(形式参数列表)

{

声明语句序列

可执行语句序列

}

返回值类型即机器加工输出数据的类型,函数的返回值最多有一个通过return语句实现,若没有返回值用void来定义。函数名是这台机器的唯一标识,用于说明其功能。形式参数列表来说明机器需要的输入原材料的个数及类型,如果不需要输入需用void代替函数形参列表中的内容,声明语句序列来说明函数内部的变量,可执行语句序列实现对原材料的加工处理,实现函数的功能。例如:

bigger这台机器需要两个整形的输入,对其进行大小比较并把较大值放在局部整形变量max中返回回来。

3 函数的调用

函数调用就如用已经制造好的机器生产产品一样,实际放入的原材料称为实参。函数调用的一般形式:

函数名(实参列表);

在函数的调用过程中就产生了实参向形参的数据传递,并且只能由实参传递给形参,而不能有形参传递给实参[3]。函数的参数可以有多种形式:简单变量、指针变量、数组名。下面通过“借书”为例对其进行分析。

3.1 简单变量作为函数的参数

实参传递给形参的是值,即“单向值传递”。例如A来向B借一本书, B复印了一本给A,他们手中的书虽然相同但是不是同一本,A在拿到的书中作标记不会对B的书产生影响。

3.2 指针变量作为函数的参数

由于指针变量存储的是一个地址,所以实参传递给形参是地址,即“地址传递”。例如A来向B借一本书, B把放书的位置告诉了A,A通过位置信息找到书并在上面作标记,B再来看这本书时就是A做了标记的书了。

但并不是B把放书的位置或一套书的起始位置告诉了A,书的内容就会发生改变,如下面代码,A只是看了看书并且改变了放书的位置,书的内容没有发生改变。

3.3 数组名作为函数的参数

数组是相同类型数据的有序集合,采用连续顺序存取的方式,数组名标识数组的首地址,如果要传递批量数据用普通变量作为函数的参数实现起来非常麻烦,就可以把数据先存放在数组中,把存放的首地址传递给函数即可。如B有一套书(10分册)按照分册号整齐的摆放在书橱中,A来向B借这套书,B就把第一分册在书橱中的位置告诉A,A就可以找到这套书了,进而可以进行标记了。B再来看这套书时就是A做了标记的书了。

void Aborrow(int book[10]){ int i;

同样B把一套书的起始位置告诉了A,书的内容就会发生改变, 可能A只是看了看书并且改变了放这套书的位置,但是没有在书中作任何标记。

4 结束语

本文以学生经常进行的“借书”活动为例,通过类比法对函数定义、函数调用进行分析,可以看出函数参数的传递只能是实参的值传递给形参。指针变量作为函数的参数可以产生双向的影响,数组名作为函数的参数可以实现批量数据的处理。加强学生了对局部变量、指针、数组的理解及综合应用,提高了学生的学习积极性。

参考文献

[1]谭浩强.C程序设计[M].北京:清华大学出版社,2005.

[2]苏小红,王宇颖,孙志岗,等.C语言程序设计[M].北京:高等教育出版社,2011.

c语言函数范文第3篇

函数部分的学习被安排在三大程序控制结构之后,有利于学生对函数知识点的系统学习,也能够使学生深刻理解结构化程序设计的全局思想,在大学期间开设《C语言程序设计》课程的主要目的是培养学生充分利用信息时代的优势,通过编程解决实际问题的能力。实际上C程序的基本组成单位是函数,课程所有知识点的学习最终都将落实到编写各种函数来进行验证和实现。因此,学生只有灵活掌握函数的运用,才能为后续学习奠定坚实基础。

二、传统函数教学存在的问题

传统函数教学流程如下:其一,函数定义及其形式;其二,函数形参,return语句,函数返回值;其三,函数声明,格式,位置;其四,函数调用,函数实参等。这种传统的教学流程过于强调函数语法知识,概念和规则的讲解,这样导致学生似懂非懂,与教学理念相违背,为了适应教学要求,突出以学生为主,教员为辅的教学理念,主要探讨函数的教学设计及实践[1]。

三、新的函数教学设计及方法

函数教学主要以发现问题、分析问题、解决问题为思路开展教学,以启发、引导、对比和总结为辅帮助学生分析问题解决提出的问题。不仅可以让学生带着兴趣学习,也会加深学生对知识点的深刻理解及灵活应用。本堂课的教学流程是:交代任务;提出问题、发现问题、解决问题;巩固练习[2]。第一,提出问题、分析问题、解决问题。学生只学过在main函数中编写简单程序,于是向学生抛出问题:复杂程序应如何进行组织和设计?在此,给学生一些时间利用main函数来解决给定任务,解决完毕和同学生一起验证结果,然后引导学生分析这种解决方式在实际中存在的问题,并启发学生思考解决此问题的最佳方法,从而引出学习的内容——函数法。接着再次引导学生用函数法重新解决给定的任务,最后将解决该任务的两种方法进行对比,让学生讨论、体会并总结出复杂程序的设计方法。第二,巩固练习。在这个环节,笔者设计了带有陷阱的小例子:通过编写swap函数来实现主函数中两个整数的交换,给学生一些时间讨论、验证结果,引导学生分析其中的问题,同时引出函数调用流程这一知识点,并通过动画演示的方式帮助学生分析函数调用流程。

四、函数教学实践

第一,利用结构化程序设计原则设计复杂程序。在main函数中编程解决问题的基础上引导学生独立解决给定任务,发现大部分学生都能很好地编写出程序,让学生观察上述代码,联系实际启发引导学生讨论并总结出如下问题:其一,代码冗余;其二,不易维护;其三,可靠性差;其四,可读性差。在此基础上启发学生剖析问题并让学生给出解决方案,即main函数没有能力独自解决整个任务,这样很自然引出复杂C程序组织和设计的原则:自顶向下,逐步细化,模块化设计,结构化编码。在这一原则的指导下,人们可以将任意复杂任务分解若干子任务。程序设计时每个子任务看成独立模块,每个程序设计人员分别完成一个或多个模块。人们称这样的程序设计方法为“模块法”,在编写代码时每个模块对应编写一个函数。最后选择一种结构化语言对各个函数进行编码,然后在机器上反复调试修改验证。函数定义形式函数首部函数体含义作用及功能功能具体实现对应知识点函数名,函数形参,返回值如:longfact(intm)声明语句,执行语句第二,函数定义及调用。其一,函数定义形式;其二,函数调用。通过知识迁移将以前学过的使用库函数的语句引导学生总结出函数调用的形式:①无返回值;②带返回值。在此,详细讲解实参与形参的区别及联系,接着给学生一些时间利用函数调用的方法改写程序并将两种解决问题的方法进行对比,让学生观察总结出程序模块化的优点。第三,进阶练习。布置小任务:编写swap函数来实现main函数中两个整数交换。在学生编写时,教员应根据每位学生的情况进行适当指导提示,并及时纠正学生们共性的错误。提示学生思考计算机本身是如何执行程序中的main和swap函数的,引导学生回答并指正。通过画图这种直观的方式,让学生理解函数调用的执行流程,同时也加深了学生对函数模块独立性的深刻理解,将抽象的知识变得通俗易懂。

五、结束语

综上所述,C语言中函数涉及的知识杂而多样,在教学中采用启发、引导、对比等多种教学方法,不拘泥于知识点的讲解,而是从程序设计全局角度出发,以分工合作思想为切入点,探讨了现实中复杂程序编写多个函数来实现的必要性,发现问题,解决问题,让学生主动学习的思路展开,实践证明该思路符合学生接受知识的思维习惯,这不仅很好地调动学生学习的积极性,从而培养了学生独立思考解决问题的能力。

作者:徐海鸥 胡凌美 祁薇 单位:海军大连舰艇学院

参考文献:

c语言函数范文第4篇

【关键词】递归函数 执行过程 求解方法

递归调用是在函数内部直接或间接的调用该函数自身,可以把复杂问题转换为较简单的问题,使得程序结构简单、可读性好,同时体现了C语言的严谨性和逻辑性,是该学科非常重要的一个知识点。而C语言递归函数的执行和求解往往是新学者的一个难点,本文就递归函数的执行过程和求解方法进行研究与分析。

1 递归函数

C语言的特点之一就在于允许函数的递归调用,即允许在函数内部直接或间接的调用函数自身,被调用的函数被称为递归函数。递归调用有直接递归调用和间接递归调用两种形式,递归函数常用于解决那些需要分多次求解且每次求解过程都基本类似的问题。构造递归函数的关键在于寻找递归算法和终结条件。递归算法就是解决问题所采取的方法和步骤,一般只要对问题的若干次求解过程进行分析和归纳,找出每一次求解过程之间的规律性,就可归纳出递归算法,终结条件是为了终结函数的递归调用而设置的一个条件或规则。递归调用的一般形式为:

函数类型 函数名(参数列表)

{

,,,,,

函数名(参数列表)

…..

}

2 递归条件

使用递归调用编写程序时,要注意以下几点:

(1)可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式,只是所处理的对象具有一定的规律性。也就是说解决问题的方法相同,调用函数的参数有规律的递增或递减。

(2)递归函数必须有一个终止处理条件,即必须有一个明确的结束条件,必须在适当的时候能够结束递归调用,否则会使程序陷入死循环,导致系统崩溃。

(3)有些使用递归算法求解的问题也可使用普通循环算法来实现,相较于循环程序,递归程序结构简单,逻辑清晰,但运行效率低,故在有其他算法可以代替的情况下,要尽量避免使用递归算法编写程序。

3 递归实例

例:使用递归方法求n!。

在数学上n!=1×2×3×…×n-1×n,我们可以写成以下形式

1 当n=0或n=1时

n!=

(n-1)!×n 当n>1时

根据以上形式,可以写出如下递归调用程序:

int f(n)

{

if(n==1||n==0)

return 1;

else

return f(n-1)*n;

}

int main()

{

int n;

scanf(“%d”,&n);

if(n

printf(“data error!”);

else

printf(“%d”,f(n));

return 0;

}

4 递归函数执行过程

递归调用之所以能够实现,是因为函数在每一次执行过程中,都会把自己所有形参变量和局部变量复制一个副本,压入栈中,这些副本分别位于栈中不同的内存空间,和函数的其他执行过程毫不相干,这种机制使得递归调用成为可能。一个递归函数的执行过程类似于调用函数和被调用函数是同一个函数的多层嵌套调用,因此,和递归函数的执行过程密切相关的一个重要概念就是递归函数运行的层次。假设调用该递归函数的主函数为第0层,则从主函数调用递归函数则进入第一层;从第n层调用本函数则进入“下一层”,即第n+1层。反之,退出第n层递归调用应返回至“上一层”,即第n-1层。

在递归函数的执行过程中,另一个非常重要的概念是“递归工作栈”的使用,当一个函数(调用者)调用另外一个函数(被调用者)时,系统会把调用者的所有实在参数,被调用者的形式参数、局部变量,以及调用者的返回地址等信息全部压入“递归工作栈”暂存,当被调用者执行完毕时,系统会从栈中弹出被调用者的形式参数和局部变量,释放被调用者所占用的数据区,接着被调用者返回,然后系统从栈中弹出调用者的返回地址,和实在参数等信息,此时调用者函数可以继续执行下去。

5 求解方法

我们通过举例来说具体说明递归函数的求解,比如在主函数中输入n的值为5,即求5!,则函数的求解过程可以用图1-1表示:

以上问题的具体求解过程描述如下:①调用函数f(5),n=5,函数f(5)的返回结果是f(4)*5,系统暂存f(5)的形参和中间计算结果,然后转去调用函数f(4)。②执行函数f(4),n=4,函数f(4)的返回结果是f(3)*4,系统暂存f(4)的形参和中间计算结果,然后转去调用函数f(3)。③执行函数f(3),n=3,函数f(3)的返回结果是f(2)*3,系统暂存f(3)的形参和中间计算结果,然后转去调用函数f(2)。④执行函数f(2),n=2,函数f(2)的返回结果是f(1)*2,系统暂存f(2)的形参和中间计算结果,然后转去调用函数f(1)。⑤执行函数f(1),n=1,函数f(1)返回结果1,f(1)执行完毕,系统释放f(1)的形参和中间变量所占的数据区,然后返回到调用函数f(1)处。⑥函数f(2)返回结果f(1)*2=1*2=2,f(2)执行完毕,系统释放f(2)的形参和中间变量所占的数据区,然后返回到调用函数f(2)处。⑦函数f(3)返回结果f(2)*3=2*3=6,f(3)执行完毕,系统释放f(3)的形参和中间变量所占的数据区,然后返回到调用函数f(3)处。⑧函数f(4)的返回结果f(3)*4=6*4=24,f(4)执行完毕,系统释放f(4)的形参和中间变量所占的数据区,然后返回到调用函数f(4)处。⑨函数f(5)返回结果f(4)*5=24*5=120,f(5)执行完毕,系统释放f(5)的形参和中间变量所占的数据区,然后返回到调用函数f(5)处,即main函数,此问题求解结束。

6 结束语

函数的递归调用,可以把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归算法只需用少量的程序就可描述出解题过程所需要的多次重复计算,大大减少了程序的代码量并增强了程序的可读性。但在求解过程中容易出错和混淆,了解递归函数的执行过程,并借助于图示化的方法、,即可正确、快速求解递归函数。

参考文献

[1]严蔚敏,吴伟民.数据结构[M].北京:清华大学出版社,1997:55-56.

作者简介

常艳(1984-),女,籍贯河南林州。工学硕士,研究方向为计算机教育教学。

c语言函数范文第5篇

李娜娜(1981-),女,商丘市人,本科,助理实验师,研究方向:计算机教学与研究。

摘要:C语言和汇编语言原本各自独立,在单片机程序设计中各具优势。为减轻程序开发难度,并提高程序的效率,将两种设计语言混合是最好的方式。主要对混合编程机理以及函数的混合调用进行了分析。

关键词:C语言;汇编语言;混合编0.引言

当前的单片机系统程序设计多依靠两种设计语言完成,一是C语言,它具有良好的可读性和较强的可移植性,不足之处在于难以精确控制程序的运行时间,而且编码效率较低;二是汇编语言,其编码效率高,但是可读性并不理想,且数据运算处理函数设计极为复杂。在提高运行效率的同时,为了能降低开发难度,将C语言和汇编语言混合使用成了研究重点。

1.原理

设计人员在利用纯汇编语言设计程序时,常会出现代码重叠的情况,这就要求综合代码长度、代码段的起始地址等因素加以考虑;设计中断服务函数时,需保证代码定位的准确性;使用数据段时,需合理分配寄存器空间,为提高对空间的利用率,通常还会涉及数据生存期等问题。如果使用纯C语言进行编程,则无需考虑这些问题,可将其交由编译器和连接器完成。基于C语言的程序最终经编译器转换,会形成包含有代码段定位、寄存器使用状况等信息的汇编语言文件。因此,在今后可以此汇编文件规范进行汇编程序的编写工作,从而使得编译器和连接器将C语言代码和汇编代码相结合。

2.函数的混合调用机制

2.1 函数特征及命名规则

在编写函数时通常要考虑很多因素,如有无参数传递、有无返回值、是否是公共函数等。只有这些条件成立,才能成为函数。函数都有名称,如在A51中 利用ACALL、LCALL两个指令调用函数,就以指令的操作函数作为函数名称,在程序体内具有唯一性。汇编时调用C函数,如果C函数无需依靠寄存器传递函数,则ACALL的参数就是C函数的名称;反之,ACALL的参数需要在C函数名称前面加一个下划线“_”。在编写汇编函数时,需在利用寄存器传递参数的汇编函数名称以下划线开始。

2.2 参数传递方式

通常依靠以下两种方式传递函数参数:

①工作寄存器

对参数数量有限制,如果参数过多,则尽量选择另一种方式。Keil编译环境将工作寄存器作为默认的传递方式,若不能传递所有参数,剩余的参数需要借助数据缓冲区完成。是否使用工作寄存器传递函数参数,可通过编译器人为地控制,如#pragma noregparms为禁止使用,#pragma regparms则表示开启。指令与C函数的名称也有关,因为不使用这种方式,那么就无需在C函数前面加下划线。

虽然51单片机安装有4个工作寄存器组,但一次只能使用一组。在C语言中常借助using n(n=0,1,2,…,n)来表示参与参数传递的寄存器组,n是其序号。应注意的是,若两个参与参数传递的函数使用的寄存器组不是同一个,那么函数参数就无法正确地传递。这意味着在函数调用时尽量不要改变寄存器组。这4个寄存器组中有一个8字节的,最多只能传递3个参数。函数中传递参数最多的数量为4个。

②数据缓冲

在C函数中调用汇编函数,因为全部细节在汇编函数内部都进行了处理,所以采用两种方式的操作具有一致性。在汇编中处理C函数参数表的难度较大,尤其是访问参数寄存器时。利用寄存器传递参数时,寄存器的地质具有固定性,可以直接访问。然而采用数据缓冲的传递方式时,参数地址是由编译器和连接器自动分配的,需采用偏移地址的方法才能确定参数具置。其实在这两种传递方式中,参数都归为函数的局部变量,但只有对数据缓冲区的参数才能通过偏移地址的方法访问。

利用偏移地址访问C函数的参数时,需在汇编中将调用的数据段首地址?fuc_name?BYTE通过extrn data(?func_name?BYTE)加以说明,然后通过MOV?func_name?BYTE+n,A等赋值指令进行访问。

2.3 函数的声明与定位

C语言程序中函数体的声明为:void c_func(void)。这是一个名称为c_func且没有参数传递及返回值的函数。可按照以下方式实现函数体的定义:

Void c_func(void)

{

/*c_func()函数体*/

}

汇编语言包括有传递参数及无传递参数的两种函数,一般汇编程序设计时无需区分,但混合编程需要给编译器一个函数是否有参数传递的标志,即函数名称之前是否有下划线。若有说明有参数传递,反之则没有参数传递。

为提高程序的可移植性,需要对中断项量表精确定位,其它函数则完全有连接器进行定位。不过这种情况并不绝对,比如需要给程序加密时应将某段代码精确定位于一个固定的地址,此时便需要绝对定位。设计时可利用ORG、AT任意一个关键词对代码段进行定位,但若是数据段定位,只能选择后者。

3.混合编程的应用分析

某类测量仪器主要用于检测物体表面的污染程度,主控制器使用的是uPSD芯片psd3224,具有控制外设及处理数据等功能。在开发时需要对时间和时序进行严格控制,这就对汇编语言提出了较高的要求。另外,有大量数据需要处理,汇编语言难以完成,此时应选择C语言编写。最后将这两种设计语言混合使用,既有利于提高代码使用效率,又能够起到简化系统设计的作用。

因篇幅有限,在此只给出了部分程序,程序包含main.asm和file_c.c两个文件。前者为汇编程序文件,里面包括主程序main和一个有参数传入和传出的控制函数char control(char);后者为C语言文件,包括一个8b与8b乘法的处理函数int process(char)。

ACALL_PROCESS

MOV A,R7;处理process()函数的返回值的低位

MOV B,R6;处理process()函数的返回值的高位

AJMP MAIN

;char control(char i);

PUBLIC_CONTROL;声明control()为public型

?PR?_CONTROL;FILE_ASM SEGMENT CODE AT 0100H;control()函数的代码段声明

RSEG?PR?_CONTROL?FILE_ASM;control()函数代码段的开始

{

int result;

result=i*100;

i=control(i);//调用汇编控制程序

Return result;

}

4.结束语

该仪器在程序设计时采用C语言和汇编语言混合的方法,使得程序设计更加简单,开发周期有所缩短。测试结果表明,系统性能稳定可靠,验证了函数混合调用的安全性。可见,C语言和汇编语言混合编程能取得更好的效果,值得推荐应用。(作者单位:商丘职业技术学院)

参考文献:

[1]张开便.C语言与汇编混合编程机理探析与应用[J].电脑开发与应用,2010,22(4):109-110

[2]袁静萍.C与汇编混合编程技术及其应用实例[J].江苏技术师范学院学报,2012,24(2):143-145

相关期刊更多

CT理论与应用研究

统计源期刊 审核时间1-3个月

中国地震局

忻州师范学院学报

省级期刊 审核时间1个月内

忻州师范学院

徐州师范大学学报

省级期刊 审核时间1个月内

江苏省教育厅