[计算机硬件及网络]C与汇编的混合程序设计.pptVIP

[计算机硬件及网络]C与汇编的混合程序设计.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[计算机硬件及网络]C与汇编的混合程序设计

13.3汇编语言和高级语言程序的连接   由于使用高级语言编写及调试程序比汇编语言的开发效率高,可移植性好,所以,高级语言比汇编语言使用更广泛。但是在要求实时性高、占用空间少或要求直接控制硬件的场合,仍然要用到汇编语言,实现对硬件直接控制和更快的控制速度。但汇编语言编程复杂、表达能力也差,因此比较好的解决办法是C语言与汇编语言混合编程。 目前主要的C语言程序开发环境有:Turbo C/C++、Borland C/C++,Visual C++等,都支持与汇编语言的混合编程。C语言与汇编语言的混合编程方法一般有两种方法可以实现,即在C语言中嵌入汇编语言,也称嵌入式编程和用?C语言调用汇编语言模块,即多模块混合编程。 1.汇编语言的嵌入式编程 1.内嵌汇编语句格式 在Turbo C中,C程序中嵌入的汇编语句前必须以关键字ASM开头,其格式为: ASM 操作码 操作数 ;或回车换行 /*注释*/ 其中ASM为关键字,操作码可以是处理器指令也可以是伪指令,操作数是操作码可以接受的数据,可以是指令允许的立即数,寄存器名,也可以是C程序中的常量、变量和标号。C程序中嵌入汇编代码后可以有分号也可无分号,如果汇编代码后无分号则必须以换行符结束(嵌入的汇编语句是C语言中唯一可以换行结束的语句),如果汇编代码后有分号,则一行中可以有多条嵌入的汇编语句,但一条汇编指令不能跨越两行。 特别要注意的是,嵌入的汇编语句的注释方式须采用C语言的注释方式,即必须用/*……*/来标记注释。而不能像纯汇编那样用(;)作为一条注释的开始。如: ASM MOV AX,DX;  /*单个语句*/ ASM PUSH AX;ASM POP AX;ASM MOV BX, AX;/*多个语句写在一行 */ 如果在C语言程序中要嵌入多个ASM语句,可以将它们放在花括号内。如: ASM { MOV AX,DX  PUSH AX  }/*注释*/   在C程序中,函数内部的汇编语句都是一条可执行的语句,它被编进程序的代码段,在函数外部的汇编语句是一个外部说明,在编译时放在程序的数据段中。这些外部数据可以被其他程序引用。 2.转移指令的执行 内嵌汇编指令可以使用转移指令和LOOP循环指令,但是它们只能在函数体内有效,不允许进行段间转移。由于ASM语句中不能给出标号,因而转移指令只能使用C语言程序中GOTO语句使用的标号。例如: int fun1( ) { … label: … asm jmp label … } 3.直接嵌入汇编代码的C语言程序示例 例 编写一个三个整数的求和的C函数,用在C语言中嵌入汇编语言方法实现。 int Sum ( int X, int Y, int Z) { ASM PUSH AX; /*保护现场,否则可能影响前面的程序执行*/ ASM MOV AX, X; ASM ADD AX, Y; ASM ADD AX, Z; ASM MOV X , AX; ASM POP AX;  /*恢复现场*/ return (X) } 例 .用嵌入汇编的方法编写实现求两个整数中的最小值的C语言函数。 int min(int v1,int v2) ????? { ASM MOV AX,v1 ?? ASM CMP AX,v2 ?? ASM JLE over; ?? ASM MOV AX,v2 over: return(_AX); /*--_AX为AX寄存器*/ } 内嵌汇编指令的C程序只能采用TCC命令行的编译连接方法。用TCC命令行实现的编译连接的方法是: TCC -B-L: \LIB 文件名 库文件名 其中-L选择项指定了连接所需的库文件路径,文件名指有内嵌汇编指令的C程序名,库文件指程序重要用到的库函数所在的库文件(Turbo C标准库可省略)。   内嵌汇编指令的C程序进行编译时,必须要有-B选择项,否则编译时,一旦遇到汇编代码,便立即给出警告信息,并以-B选项重新进行编译,若在C程序中加上#program inline预处理语句,则可省略-B选择 2.在C程序中直接调用汇编子程序 在C语言中直接嵌入汇编语句的方法限制较多,不能充分发挥汇编语言的功能。一种更好的方法是把需要用汇编实现的工作设计成汇编子程序,然后由C语言调用。 在设计能被C调用的汇编子程序时,可以使用完整的段定义或者简化的段定义结构。 2.1编写汇编子程序注意的问题 (1)变量和函数的使用 (2)参数传递 (3)寄存器使用规

文档评论(0)

qiwqpu54 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档