C语言与汇编语言相互调用实现混合编程资料下载.pdf

上传人:wj 文档编号:5979391 上传时间:2023-05-05 格式:PDF 页数:3 大小:199.07KB
下载 相关 举报
C语言与汇编语言相互调用实现混合编程资料下载.pdf_第1页
第1页 / 共3页
C语言与汇编语言相互调用实现混合编程资料下载.pdf_第2页
第2页 / 共3页
C语言与汇编语言相互调用实现混合编程资料下载.pdf_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C语言与汇编语言相互调用实现混合编程资料下载.pdf

《C语言与汇编语言相互调用实现混合编程资料下载.pdf》由会员分享,可在线阅读,更多相关《C语言与汇编语言相互调用实现混合编程资料下载.pdf(3页珍藏版)》请在冰点文库上搜索。

C语言与汇编语言相互调用实现混合编程资料下载.pdf

但在对速度要求较高的场合,以及在访问计算机系统的硬件资源或接口地址的读写等方面,却显示出了明显的不足。

汇编语言作为一种符号语言,具有代码短,占用内存空间少,装载运行速度快,并能对硬件资源进行直接控制等优点,对位、字节和地址进行操作的功能,成为最受欢迎的编程语言之一。

但其编程工作量大,开发周期长,容易出错且不宜调试。

事实上没有一种编译程序所产生的目标代码能够像汇编程序那样高效和紧凑。

大多数情况下,这种小差别无关紧要,但在某些特殊情况下,对程序的空间和时问要求很高的场合,如浮点数计算软件包就是用汇编语言写的,因为它使用频繁,并且很大程度上影响着使用这些程序的执行速度。

所以有时需要使用汇编语言编写程序,来满足应用程序中局部的特殊要求。

使用c语言和汇编语言混合编程,两种语言的程序相互调用,进行参数传递,共享数据结构及数据信息,这样能充分发挥各语言的优势和特点,提高程序的运行速度和效率以及应用软件的效率。

基于上述情况,将两者有效结合,混合编程,扬长避短,是一种行之有效的程序设计开发方法。

2混合编程的调用规则

(1)参数传递的次序与它们出现的次序是相反的。

(2)传递完参数后,c语言还将保存(cs,IP)。

如果c语言是SMALL或cOMPACT存储模式下编译的(或者过程是本文收稿日期:

200911846一NEAR型的),那么只保存IP,而在MEDIuM、LARGE或HuGE模式下编译的(或者过程是FAR型的),那么cS和IP都会被压入堆栈,其顺序是cs在前,IP在后。

不过这个过程是C语言自动进行的而不需要干预。

(3)还有BP也必须保存在堆栈中,然后才可以通过BP和偏移地址来访问参数。

(4)最后一条指令应当是后面不带数字的RET,因为堆栈到原始位置的工作将由c程序重新获得控制权以后才会执行。

(5)任何与c语言共享的名称都必须在前面加下划线,而且C语言只识别前8个字符。

(6)对于普通的参数c语言传递的是参数值,而对于数组,传递的是指针(也就是数据的地址)。

(7)如果c语言是在MEDIuM、LARGE或HuGE模式下编译的,那么汇编语言过程应该设为FAR型;

C语言是SMALL或C0MPACT存储模式下编译的,那么汇编语言过程应该设为NEAR型。

不过在MAsM51或TASM10及更高的版本的情况下就不必担心偏移地址、在共享名称前加下划线并保存BP这些琐事,因为它们可以由编译器自动完成。

3汇编语言中调用C语言函数内嵌汇编不用单独编辑汇编语言文件,比较简洁,但是有诸多限制,当汇编语言的代码较多时一般放在单独的汇编文件中。

这时就需要在汇编语言和c语言之间进行一些数据的传递,最简便的办法就是使用全局变量。

在汇编语言中调用C语言的函数,需要在汇编中IMP0RT对应的C语言的函数名,然后将c语言的代码放在一个独立的C语言文件中进行编译,剩下的工作由连接器来处理。

SOFrWAREDEVEL0PMENTANDDESIGN软件开发与设计mingw编译系统在所有c语言符号前加了一个下划线前导符。

所以在汇编代码中要用extem指令进行特殊处理。

还是用实例来说明比较直观。

假设分别建了两个文件,一个是calcc,另一个是ca1lca1casm,两个文件中各有一个函数。

calcc中内容为:

Calcc,丰asimpleexamp1e:

串add()asaca1lee,ca11edbyCallCalcasmextemintadd(intx,inty);

intadd(intx,inty)retum(x+y);

callcalc-asm中的内容为:

CallCa1casm;

asimp1eexample:

EnP0int()asaca1ler,caUadd()inCalccsectiontext】extc帅一addEn时Point:

pushl;

paramypush2;

paramxca1ladd;

calladd()inCa1ccaddsp,2;

remOveparamsxandyretadd(1函数接受两个整型参数,相加后返回给调用者,返回值按照c语言调用约定存放在EAx寄存器中;

在汇编代码中要先要用extem关键字将一add声明为外部符号,然后才能在程序中使用。

这里只需要知道c的符号规则是要加一个前导下划线就可以了。

在调用的地方用的也是cal1_add。

4在C语言中调用汇编41汇编函数在c语言中调用汇编文件中的函数,要做的主要工作有两个,一是在c语言中声明函数原型,并加extem关键字;

二是在汇编中用ExPORT导出函数名,并用该函数名作为汇编代码段的标识;

最后用movpc,lr返回。

然后,就可以在c语言中使用该函数了。

从c语言的角度,并不知道该函数的实现是用C语言还是汇编。

更深的原因是因为C语言的函数名起到表明函数代码起始地址的左右,这个和汇编的lahel是一致的。

丰cfilec串inC,cal1,dnasmfunction,asLstrcpySep9,2o04|样inc1udeextemVoidasmstrcpy(constchar木src,char丰dest);

intmain()cOnstchar芈s=”seasOnsinthesun”:

chard【32】;

asmspy(s,d);

printf(”source:

s”,s);

p打ntf(”destination:

s”,d);

retum0:

)asmfunctiOnimplementatiOn;

AREAasm矗le,C0DEREAD0NLYEXP0RTasmLstrcpyasmstrcpylOopldrbr4,r0】,#1;

addressincrementafterreadcmpr4,#0beqOVersbr4,【rl】,样lbloopnVermOVpc,lrEND在这里,c语言和汇编语言之间的参数传递是通过ATPCs的规定来进行的。

简单地说就是如果函数有不多于4个参数,对应的用R0一R3来进行传递,多于4个时借助栈,函数的返回值通过R0来返回。

42汇编代码在C中调用汇编代码规则:

(1)内嵌的汇编语句可以用“;

”结束,也可以用换行符结束,一行中可以有多个汇编语句,相互问用“;

”分隔,但不能跨行书写。

(2)必须使用C语言的注释分隔符和“”。

(3)将masm-exe宏汇编程序拷贝到TubmC目录下,并重命名为Tasmexe。

(4)对内嵌汇编指令的c源程序进行编译、连接,格式为:

TCcBxxx文件名库文件名。

其中,xxx为库文件所在目录的路径,文件名是内嵌汇编指令的c源程序的文件名。

(5)在汇编语言中使用寄存器时,不区分大小写,且只能是8086提供的寄存器名,但在c程序中使用汇编语言的寄存器时,要用大写且前面加一个下划线。

假设有两个文件,一个是sjmpleRet_asm,一个是CaJlAsmc。

simpleRet_asm中的内容是:

,donomingJustretumaintegervalue;

,【sectiontext】【bits32】globaJRentRetInt:

movax1IletcallAsme中的内容是:

,丰asimDleca1lerwhichcal1asm木,(下转到5O页)一47电脑编程技巧与维护录协议传送的数据包括一个序列号,这样就可以检测消息的丢失、改动或重放。

如果协商好了压缩算法,那么ssL记录协议还可以执行压缩功能。

0penssL的记录层协议是为信息的交流提供通信和认证功能的,并且它的保护是建立在一个面向连接的可靠传输协议(例如TcMP)之上的。

理解了0penssL记录层的封装过程,则对于网络传输中数据的安全,采用专用的加密通信方式具有重大意义。

参考文献11郭铃,李伟生sSLVPN的设计与实现计算机技术与发展,2oo7,17f8):

149154【2NetworkSecuritywith0penss1PubIisher:

ReiUyAssociates20023】林雪云利用ssL为Tcpsocket通信加密电脑开发与应用,2008,l5

(2):

7679【4马淑文SsLVPN技术在校园网中的应用与研究计算机工程与设计,2o07,28(21):

51375143【5】RRosenCreatingVPNswifhIPsecandSS【,rLSnu】cJoumal,2008,(165):

62676RMmzSecureBlue:

anachitecturef0rascaJaMe,reliab1ehighvolumeSSLIntemetserverComputerSecurityAppljcationsCorIference,2oo1,10(14):

39l一398作者简介张艺博,男(1973一),讲师,硕士,研究方向:

计算机信息安全,软件工程和程序设计方向。

(上接第27页)图5帧扫描各信号波形5结语通过编程下载到xC95216芯片中,加上简单的外围电路,实现对AT056TN04的8种基本颜色的显示,适当调整就可以很方便地应用于其他的显示屏。

克服了单色液晶模块色彩单调,而颜色丰富的数字彩色屏价格贵的缺点,对颜色要求不高的工业仪器仪表中具有较好的应用价值。

参考文献1张蓬鹤,米德伟图形点阵式液晶显示器MsPG320240在高速处理器DsP中的应用国外电子元器件,20o4,2:

31332黄丽薇,喻强,王静基于cPLD的双屏结构液晶控制器的研究与设计微计算机信息,2006,22:

82833林振华用vHDL和有限状态机设计vRAM控制器电子技术,20o1,2:

7879作者简杨涛,处理。

杨扬,1t。

1tttttttttII1t1t1t1t(上接第47页)extemintRetInt(void);

intmajn(void)printf(”d、n”,RetInt();

retum(O);

运行结果将会打印1。

所有的要点就是c语言调用约定和global关键字以及extem关键字的使用,glo1)al将符号导出给链接器extem声明外部的符号。

5结语c语言与汇编语言混合编程,彼此相互调用,进行参数传递,共享数据结构及数据信息,是一种有效的编程方法,但在实际运用中要注意内存模式以及寄存器的分配给程序带来的影响,并且还应考虑到这样做可能会丧失源程序的可移植一50一介男(1982一),硕士研究生,主要研究方向:

通信信号硕士研究生。

性。

所以,在具体开发设计阶段,应该综合考量各语言的特点,权衡利弊,才能设计出优秀的程序。

参考文献1】谭浩强语言程序设计第二版【M】,北京:

清华大学出版社,1999【2】沈美明,温冬蝉编著IBMPc汇编语言程序设计【M】北京:

清华大学出版社,19943】孙振业,史宝慧编著c语言及应用电子科技大学出版社,19994张雪兰汇编语言程序设计M北京:

北京理工大学出版社,2001作者简介阿娜古丽阿布拉,女(1964一),高级讲师学士,主要研究方向:

程序设计和平面设计。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2