汇编语言与C语言的混合程序设计技术.docx

汇编语言与C语言的混合程序设计技术.docx

ID:59151783

大小:29.24 KB

页数:6页

时间:2020-09-11

汇编语言与C语言的混合程序设计技术.docx_第1页
汇编语言与C语言的混合程序设计技术.docx_第2页
汇编语言与C语言的混合程序设计技术.docx_第3页
汇编语言与C语言的混合程序设计技术.docx_第4页
汇编语言与C语言的混合程序设计技术.docx_第5页
资源描述:

《汇编语言与C语言的混合程序设计技术.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、汇编语言与C语言的混合程序设计技术一、混合编程中如何进行参数传递汇编语言程序和C语言程序在调用时会涉及到参数传递,一般采用堆栈进行传递。在汇编语言中将BP作为基址寄存器,调用程序先将来自于C语言程序中的参数依次压入堆栈中,然后当需要使用这些参数时,再用BP加上不同的偏移量依次对堆栈中的数据进行存取操作不同类型数据的传送有着一些不同1、整数型常量的传递整数型常量的传递是将所传递整数从上到下按顺序存储在参数区中,以字为单位按十六进制方式存放2、字符型常量的传递c语言规定字符型常量要用单引号括起,因此传递时应特别注意传递的方式

2、是将字符以ASCII码的形式以字节为单位放在参数区中如遇多个字符的传递可直接将多个字符顺序连写在一起用单引号括起来3、字符串常量的传递,在C语言里,字符串要求用双引号括起来传递的方式不同于以上两常量它是将字符串存放在某个数据区域内将字符串的首址指针放存参数区中因此在参数区中我们不可能找到所传送的字符串,能见到的只有一个地址指针4、整数型变量传递整数型变量的传递类似于整数型常量的传递只是将整数型变量中的内容加以传递5、字符型数组的传递字符型数组的传递类似于字符串常量的传被传递数组中的字符被存放到某个数据区而将字符数组所在的

3、首址指针放到参数区6、整型数组的传递由于整型数组的数据量一般较大,因此我们认为整型数组的传递以传递指针为好。正是由于C语言有指针运算功能,数组的传递先进行指针运算,得到数组的首指针,再将指针传送到参数区中。二、简述混合编程的常见形式C调用汇编有两种方法,一是直接在C中插入汇编语句,二是分别编写汇编子程序和C语言程序,由C调用汇编程序。方法一适用只需一两句汇编就能完成的程序;方法二较通用,如用汇编编写延时子程序可以实现精确延时。使用方法二的注意事项有以下几点:1、函数声明C中在函数前加extern声明此函数为外部函数,在汇

4、编中要声明函数名为全局变量如externvoiddelay(void);/定义函数/globldelay;/声明全局变量/_delay:;/函数开始/2、参数传递一般用寄存器传递参数,如果返回结果需要多个字节表示,最好用SRAM保存即在汇编中将结果存入SRAM在C中读取相应的地址。3、保存寄存器保存寄存器:Reservedregister寄存器在调用子程序时,内容是不能被改变的,如果汇编子程序需用该寄存器,就要在程序入口时先将它们入栈,返回时再出栈4、变量和函数接口问题C定义的变量编译为.asm后就被放进.bss区,此时

5、变量名的前面都带了下划线,C中定义的函数编译后在函数名前也带了下划线。例如:externintnum就会变成.bss_num,1。5、汇编和C接口中寻址方式的改变问题在C语言中对局部变量的建立和访问是通过堆栈实现,寻址是通过堆栈寄存器SP实现的。而汇编语言为了精简程序代码,TI在直接寻址方式中,地址的低7位直接包含在指令中,这低7位所能寻址的具体位置可由DP寄存器或SP寄存器决定。具体实现可通过设置ST1寄存器的CPL位实现,CPL=0,DP寻址,CPL=1,SP寻址。在DP寻址的时候,由DP提供高9位地址,与低7位组成

6、16位地址;在SP寻址的时候,16位地址是由SP(16位)与低7位直接相加得来。由于C语言的环境决定局部变量的寻址必须通过SP寄存器实现,而汇编语言影响SP寄存器,则在混合编程时可通过在汇编环境中使用DP方式寻址避免二者的干扰,编程中只要注意对CPL位正确设置即可。一、简述MASM的发展历程MASM4.00这是最先广泛使用的一个MASM版本,适用于DOS下的汇编编程。它很精巧,但使用起来不是很智能化,需要用户自己一板一眼地写出所有的东西。很多教科书上讲的8086汇编语法都是针对这个版本的,对程序员来说。它只比用Debug

7、方便一点点MASM5.00MASM5.00比4.00在速度上快了很多,并将段定义的伪指令简化为类似.code与.data之类的定义方式,同时增加了对80386处理器指令的支持,对4.00版本的兼容性很好MASM5.10对程序员来说,这个版本最大的进步是增加了对@@标号的支持。这样,程序员可以不再为标号的起名花掉很多时间。另外,MASM5.10增加了对OS/21.x的支持MASM5.10B1989年推出,比上一个版本更稳定、更快,它是传统的DOS汇编编译器中最完善的版本MASM6.001992年发布,有了很多的改进。编译器

8、可以使用扩展内存,这样可以编译更大的文件,可执行文件名相应从Masm.exe改为Ml.exe。从这个版本开始可以在命令行上用*.asm同时编译多个源文件,源程序中数据结构的使用和命令行参数的语法也更像C的风格。最大的改进之一是开始支持.if/.endif这样的高级语法,这样,使用复杂的条件分支时和用高级语言书写一样简

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。