ImageVerifierCode 换一换
格式:PDF , 页数:3 ,大小:199.07KB ,
资源ID:3436790      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-3436790.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言与汇编语言相互调用实现混合编程.pdf)为本站会员(wj)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

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

1、电脑编程技巧与维护 C语言与汇编语言相互调用实现混合编程 阿娜古丽 阿布拉(新疆阿克苏职业技术学院,阿克苏 8 4 3 0 0 0)摘要:讲解了c语言与汇编语言相互调用的基本技术,二者结合实现混合编程的方法和在相互调用过程中需注意 的一些问题,并给出了应用实例。两者相互调用有效结合,扬长避短,是一种行之有效的程序设计及开发方法。关键词:C:汇编语言:调 用 T h e M u t u a l T r ms f e r R e a】j z e s t l l e Mi】【P r 0 咖n i n g 0 f C a n d A s s e I n b l y L a n g u a g e A

2、b l a A n a g I l l j (Ak e s u V o c a【i 0 n T e c h n o l o g y C o l l e g e,A k e s u 8 4 3 0 0 0)Ab s t r a c t:T h i s a r t i c l e ma i n l y i n t md u c e d t h e t r a n s f e r mu t u a l 1 y b a s i c s t r 0 k e s 0 f C a n d t h e a s s e mb l y l a n g u a g e,t h e me t h o d o f r

3、e a z i n g t h e mi x p m a mmi n g a s we l l a s s 0 me q u e s t i 0 n s w h i c h t h e t w o u n i o n mu s t p a y a t t e n t i o n mu t u a l l y i n t h e c a 1 l i n g p r o c e s s,t h e n i t p I _0 V i d e s t h e i r p r o c e s s o f e x a mp l e s B o t h t r _a n s f le r t h e e f

4、 lf e c t i V e u n i o n mu t u a l l y,i t e n h a n c e s s t r D n g p o i n t s a n d a V o i d s w e a k n e s s e s,i t i s o n e e f c t i v e p r 0 g r a mmi n g me t h o d 0 f e x p l o i t a t i o n Ke y w0 r d s:C;As s e mb l y L a n g u a g e;T r a n s f e r l 引言 c语言是一种介于高级与低级之间的中级语言,以其

5、数据 类型丰富、语句精炼灵活、效率高,表达力强以及可移植性 好等诸多优点,成为目前倍受欢迎的一种编程语言。它有丰 富的库函数,也可以使用 B 1 0 s和 D 0 s的中断功能调用,完成 许多由汇编语言完成的工作。但在对速度要求较高的场合,以及在访问计算机系统的硬件资源或接口地址的读写等方面,却显示出了明显的不足。汇编语言作为一种符号语言,具有 代码短,占用内存空间少,装载运行速度快,并能对硬件资 源进行直接控制等优点,对位、字节和地址进行操作的功能,成为最受欢迎的编程语言之一。但其编程工作量大,开发周 期长,容易出错且不宜调试。事实上没有一种编译程序所产 生的目标代码能够像汇编程序那样高效和

6、紧凑。大多数情况 下,这种小差别无关紧要,但在某些特殊情况下,对程序的 空间和时问要求很高的场合,如浮点数计算软件包就是用汇 编语言写的,因为它使用频繁,并且很大程度上影响着使用 这些程序的执行速度。所以有时需要使用汇编语言编写程序,来满足应用程序中局部的特殊要求。使用 c语言和汇编语言 混合编程,两种语言的程序相互调用,进行参数传递,共享 数据结构及数据信息,这样能充分发挥各语言的优势和特点,提高程序的运行速度和效率以及应用软件的效率。基于上述 情况,将两者有效结合,混合编程,扬长避短,是一种行之 有效的程序设计开发方法。2 混合编程的调用规则(1)参数传递 的次序与它们 出现的次序是相反

7、的。(2)传递完参数后,c语言还将保存(c s,I P)。如果 c 语言是 S MA L L或 c O MP A C T存储模式下编译的(或者过程是 本文收稿 日 期:2 0 0 9 1 1 8 4 6一 N E A R型的),那么只保存 I P,而在 ME D I u M、L A R G E或 H u G E模式下编译的(或者过程是 F A R型的),那么 c S和 I P 都会被压入堆栈,其顺序是 c s在前,I P在后。不过这个过程 是 C语 言 自动进行的而不需要干预。(3)还有 B P也必须保存在堆栈中,然后才可以通过 B P 和偏移地址来访问参数。(4)最后一条指令应当是后面不带数

8、字的 R E T,因为堆 栈到原始位置的工作将由 c程序重新获得控制权以后才会执 行。(5)任何与 c语言共享的名称都必须在前面加下划线,而且 C语言 只识别前 8个字符。(6)对于普通的参数 c语言传递的是参数值,而对于数 组,传递的是指针(也就是数据的地址)。(7)如果 c语言是在 M E D I u M、L A R G E或 H u G E模式下 编译 的,那么汇编语 言过程应该设为 F A R型;C语言是 S M A L L或 C 0 MP A C T存储模式下编译的,那么汇编语言过程 应该设为 N E A R型。不过在 MA s M5 1 或 T A S M1 0及更高的版本的情况下

9、就不 必担心偏移地址、在共享名称前加下划线并保存 B P这些琐 事,因为它们可以由编译器自动完成。3 汇编语言中调用 C语言函数 内嵌汇编不用单独编辑汇编语言文件,比较简洁,但是 有诸多限制,当汇编语言的代码较多时一般放在单独的汇编 文件中。这时就需要在汇编语言和 c语言之间进行一些数据 的传递,最简便的办法就是使用全局变量。在汇编语言中调 用 C语言的函数,需要在 汇编 中 I MP 0 R T对应 的 C语言 的函 数名,然后将 c语言的代码放在一个独立的 C语言文件中进 行编译,剩下的工作由连接器来处理。S O F r W A R E D E V E L 0 P M E N T A N

10、D D E S I G N 软件开发与设计 mi n g w编译系统在所有 c语言符号前加了一个下划线前导 符。所以在汇编代码中要用 e x t e m指令进行特殊处理。还是用 实例来说明比较直观。假设分别建 了两个文件,一个是 c a l c c,另一个是 c a 1 l c a 1 c a s m,两个文件中各有一个函数。c a l c c中内容为:Ca l cc ,丰a s i mpl e e xa mp1 e:串 a d d()a s a c a 1 l e e,c a 1 1 e d b y Ca l l Ca l c a s m e x t e m i n t a d d(i n

11、t x,i n t y);i n t a d d(i n t x,i n t y)r e t u m(x+y);c a l l c a l c-a s m中的内容为:Ca l l Ca 1 cas m;a s i mp 1 e e x a mp l e:;En P 0 i n t()a s a c a 1 l e r,c a U a d d()i n C a l c c s e c t i o n t e x t】e x t c 帅一a dd E n 时 P o i n t:pus h l;pa r a m y pus h 2;p a r a m x c a 1 la d d;c a l l

12、a d d()i n Ca 1 c c a dd s p,2;r e mOv e p a r a ms x a n d y r et a d d(1函数接受两个整型参数,相加后返回给调用者,返回值按照 c语言调用约定存放在 E A x寄存器中;在汇编代 码中要先要用 e x t e m关键字将 一 a d d 声明为外部符号,然后才 能在程序中使用。这里只需要知道 c的符号规则是要加一个 前导下划线就可以了。在调用的地方用的也是 c a l 1 _ a d d。4 在 C语言中调用汇编 4 1汇编 函数 在 c语言中调用汇编文件中的函数,要做的主要工作有 两个,一是在 c语言中声明函数原型,并

13、加 e x t e m关键字;二是在汇编中用 E x P O R T导出函数名,并用该函数名作为汇 编代码段的标识;最后用 m o v p c,l r 返回。然后,就可以在 c 语言中使用该函数了。从 c语言的角度,并不知道该函数的 实现是用 C语 言还是汇编。更 深的原 因是因 为 C语 言 的函数 名起到表明函数代码起始地址的左右,这个和汇编的 l a h e l 是 一致 的。丰cf i l ec 串i n C,c a l 1,d n a s m f un ct i on,a s Ls t r c p y Se p 9,2 o0 4|样i nc 1 ud e e xt e m V oi

14、d a s ms t r c p y(c o n s t c h a r木 s r c,c h a r丰 d e s t);i n t ma i n()c On s t c h a r芈 s=”s e a s O ns i n t he s u n”:c h a r d【3 2】;as ms p y(s,d);p r i n t f(”s o u r c e:s”,s);p 打 n t f(”d e s t i n a t i o n:s”,d);r e t u m 0:)a s m f u n c t i On i mpl eme nt a t i On;AR EA a s m矗l e,C0

15、DE READ0NLY EXP0RT a s mLs t r c py as ms t r c p y l O o p l d r b r 4,r 0】,#1;a d d r e s s i n c r e me n t a f t e r r e a d c mp r 4,#0 be q OV e r s b r 4,【r l】,样 l b l oo p nV er mO V p c,l r END 在这里,c语言和汇编语言之间的参数传递是通过 A T P C s的规定来进行的。简单地说就是如果函数有不多于4个参 数,对应的用 R 0 一 R 3来进行传递,多于 4个时借助栈,函数 的返 回

16、值通过 R 0来返回。4 2 汇编代码 在 C中调用汇编代码规则:(1)内嵌的汇编语句可以用“;”结束,也可以用换行符 结束,一行中可以有多个汇编语句,相互问用“;”分隔,但 不能跨行书写。(2)必须使用 C语言的注释分隔符 和“”。(3)将 m a s m-e x e 宏 汇编程序拷贝到 T u b mC目录下,并重 命 名为 T a s m e x e。(4)对内嵌汇编指令的 c源程序进行编译、连接,格式 为:T C c B x x x文件名 库文件名。其中,x x x为库文件所在 目录的路径,文件名是内嵌汇 编指令的 c源程序的文件名。(5)在汇编语言中使用寄存器时,不区分大小写,且只

17、能是 8 0 8 6提供的寄存器名,但在 c程序中使用汇编语言的寄 存器时,要用大写且前面加一个下划线。假 设 有 两 个 文 件,一 个 是 s j m p l e R e t _a s m,一 个 是 Ca J l As m c。s i mp l e R e t _ a s m中的内容是:,d o n o mi n g J u s t r e t u m a i n t e g e r v a l u e;,【s e c t i o n t e x t】【b i t s 3 2】g l o ba JRe n t Re t I nt:mo v a x 1 I let c a l l A s

18、m e中的内容是:,丰a s i mD l e c a 1 l e r whi c h c a l 1 a s m 木,(下转到 5 O页)一4 7 电脑 编程技巧与维护 录协议传送的数据包括一个序列号,这样就可以检测消息的 丢失、改动或重放。如果协商好了压缩算法,那么 s s L记录 协议还可以执行压缩功能。0 p e n s s L的记录层协议是为信息的交流提供通信和认证功 能的,并且它的保护是建立在一个面向连接的可靠传输协议(例如 T c MP)之上的。理解了 0 p e n s s L记录层的封装过程,则对于网络传输中数据的安全,采用专用的加密通信方式具 有重大意义。参考文献 1 1郭

19、铃,李伟生s S L V P N的设计与实现计算机技术与发 展,2 o o 7,1 7 f 8):1 4 9 1 5 4 【2 N e t w o r k S e c u r i t y w i t h 0 p e n s s 1 P u b I i s h e r:R e i U y A s s o c i a t e s 2 00 2 3】林雪云利用 s s L 为 T c p s o c k e t 通信加密电脑开发与应 用,2 0 0 8,l 5(2):7 6 7 9 【4 马淑文S s L V P N技术在校园网中的应用与研究计算机 工程与设计,2 o 0 7,2 8(2 1):5

20、1 3 7 5 1 4 3 【5】RR o s e n C r e a t i n g V P N s w i f h I P s e c a n d S S【,r L S n u】c J o u ma l,2 0 0 8,(1 6 5):6 2 6 7 6 R Mmz S e c u r e B l u e:a n a c h i t e c t u r e f 0 r a s c a J a Me,r e l i a b 1 e h i g h v o l u me S S L I n t e me t s e r v e r C o mp u t e r S e c u r i t y

21、Ap p l j c a t i o n s C o r I f e r e n c e,2 o o 1,1 0(1 4):3 9 l 一 3 9 8 作者简介 张艺博,男(1 9 7 3 一),讲师,硕士,研究方向:计算机信息 安全,软件工程和程序设计方向。(上接第 2 7页)图 5 帧扫描各信号波形 5 结语 通过编程下载到 x C 9 5 2 1 6芯片中,加上简单的外围电路,实现对 A T 0 5 6 T N 0 4的 8种基本颜色的显示,适当调整就可以 很方便地应用于其他的显示屏。克服了单色液晶模块色彩单 调,而颜色丰富的数字彩色屏价格贵的缺点,对颜色要求不 高的工业仪器仪表中具有较

22、好的应用价值。参考文献 1 张蓬鹤,米德伟图形点阵式液晶显示器 Ms P G 3 2 0 2 4 0 在高速处理器 D s P中的应用国外电子元器件,2 0 o 4,2:31 3 3 2 黄丽薇,喻强,王静基于 c P L D的双屏结构液晶控制器 的研究与设计微计算机信息,2 0 0 6,2 2:8 2 8 3 3 林振华用 v H D L和有限状态机设计 v R A M控制器电子 技术,2 0 o 1,2:7 8 7 9 作者简 杨涛,处理。杨扬,1 t 。1 t t t t t t t t t I I 1t 1t 1t 1 t (上接第 4 7页)e x t e m i n t Re t

23、I n t(v o i d);i n t ma j n(v o i d)p r i n t f(”d、n”,R e t I n t();r e t u m(O);运行结果将会打印 1。所有的要点就是 c语言调用约定和 g l o b a l 关键字以及 e x t e m关键字的使用,g l o 1)a l 将符号导出给链接器 e x t e m声明外 部的符号。5 结语 c语言与汇编语言混合编程,彼此相互调用,进行参数传 递,共享数据结构及数据信息,是一种有效的编程方法,但 在实际运用中要注意内存模式以及寄存器的分配给程序带来 的影响,并且还应考虑到这样做可能会丧失源程序的可移植 一5 0一

24、 介 男(1 9 8 2 一),硕士研究生,主要研究方向:通信信号 硕士研究生。性。所以,在具体开发设计阶段,应该综合考量各语言的特 点,权衡利弊,才能设计出优秀的程序。参考文献 1】谭浩强语言程序设计第二版【M】,北京:清华大学出 版社,1 9 9 9 【2】沈美明,温冬蝉编著I B M P c汇编语言程序设计【M】北京:清华大学出版社,1 9 9 4 3】孙振业,史宝慧编著c语言及应用 电子科技大学出版 社,1 9 9 9 4 张雪兰汇编语言程序设计 M北京:北京理工大学出 版社,2 0 0 1 作者简介 阿娜古丽 阿布拉,女(1 9 6 4 一),高级讲师 学士,主要研究方 向:程序设计和平面设计。

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

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