网站大量收购独家精品文档,联系QQ:2885784924

第5章汇编语言与程序设计.pptVIP

  1. 1、本文档共99页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
5.8.1 C/C++程序中内嵌汇编 1. 嵌入汇编语句的格式 Turbo C语言程序中,嵌入汇编语言指令是在汇编语句前加一个asm关键字,格式如下:????? ?asm??操作码??操作数???;或换行 2.访问C语言的数据 内嵌的汇编语句除可以使用指令允许的立即数、寄存器名外,还可以使用C语言程序中的任何符号(标识符),包括变量、常量、标号、函数名、寄存器变量、函数参数等;C编译程序自动将它们转换成相应汇编语言指令的操作数,并在标识符名前加下划线。一般来说,只要汇编语句能够使用存储器操作数(地址操作数),就可以采用一个C语言程序中的符号;同样,只要汇编语句可以用寄存器作为合法的操作数,就可以使用一个寄存器变量。 【例5.10】用嵌入汇编方式实现取两数较小值的函数min ?/* LT701.C */ int min(int var1,int var2) /* 用嵌入汇编语句实现的求较小值 */ { asm mov ax,var1 ?????????? asm cmp ax,var2 ?????????? asm jle minexit ?????????? asm mov ax,var2 minexit: return(_AX); /* 将寄存器AX的内容作为函数的返回值 */ } main()???? /* C语言主程序 */ { min(100,200); } 3.嵌入汇编的编译过程 C语言程序中含有嵌入式汇编语言语句时,C编译器首先将C代码的源程序(.c)编译成汇编语言源文件(.asm),然后激活汇编程序Turbo Assembler将产生的汇编语言源文件编译成目标文件(.obj),最后激活Tlink将目标文件链接成可执行文件(.exe)。 4.命名约定 在C语言程序中,C对所要调用的外部过程、函数、变量均采用EXTERN予以说明,并且放在主调用程序之前,一般放在各函数体外部,说明形式如下: extern??返回值类型?函数名称(参数类型表); extern??变量类型?变量名; 5.声明约定 在C语言程序中,C对所要调用的外部过程、函数、变量均采用EXTERN予以说明,并且放在主调用程序之前,一般放在各函数体外部,说明形式如下: extern??返回值类型?函数名称(参数类型表); extern??变量类型?变量名; 6.寄存器使用约定 作为一个独立的汇编语言子程序,当然要注意寄存器的保护和恢复。 对于BP、SP、DS、CS和SS,汇编语言子程序如果要使用它们,并且有可能改变它们的值,Turbo C要求进行保护。这些寄存器经保护后,可以利用,但退出前必须加以恢复。 寄存器AX、BX、CX、DX和ES,在汇编语言子程序中通常可以任意使用。其中的AX和DX寄存器承担了传递返回值的任务。标志寄存器也可以任意改变。 7.存储模式约定 存储模式处理程序、数据、堆栈在主存中的分配和存取,决定代码和数据的默认指针类型,例如段寄存器CS、DS、SS、ES的设置就与所采用的存储模式有关。存储模式在C语言中也称为编译模式或主存模式。Turbo C提供了六种存储模式,分别是:微型模式(Tiny)、小型模式(Small)、紧凑模式(Compact)、中型模式(Medium)、大型模式(Large)和巨型模式(Huge)。 8.编译和连接过程 按照前面所论述的各种约定,让我们编写一个C语言程序调用汇编语言子程序的简单例子,这里没有参数传递的问题。 5.8.2 独立汇编模块的汇编与C/C++混合编程 两种语言分别编写独立的程序模块,分别产生目标代码OBJ文件,然后进行连接,形成一个完整的程序。使用灵活、功能强,要解决参数传递问题。混合编程的关键问题是建立不同语言之间的接口,在不同格式的两种语言间提供有效的通讯方式,作出符合两种语言调用约定的某种形式说明,实现两种语言间的程序模块互相调用、变量的相互传送以及参数和返回值的正确使用。 1.模块连接的注意事项 必须遵循共同的约定规则:命名约定、声明约定、寄存器使用约定、存储模式约定、参数传递约定、采用一致的调用规范、声明共用函数和变量、正确传递入口参数和返回参数。 2.汇编和C的相互调用可以分以下几种情况: (1)汇编程序中访问c程序中的变量和函数。 (2)c程序中访问汇编程序中的变量 (3)在线汇编 3.汇编语言程序调用C程序的原则 为了使C函数对汇编语言程序可见,汇编语言程序需要对所调用的C语言函数、变量用关键字EXTERN进行说明,形式如下: EXTERN??被调用函数名∶函数属 EXTERN??变量名∶变量属性 4.嵌入汇编语言的格式 C++语言是C语言的超集,它是在C语言的基础上扩展形成的面向对象程序设计语言。微软Visual C++ 5.0∕6.0则是Windows

文档评论(0)

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

分享好文档!

1亿VIP精品文档

相关文档