汇编语言与C语言
《汇编语言与C语言》由会员分享,可在线阅读,更多相关《汇编语言与C语言(2页珍藏版)》请在装配图网上搜索。
1、汇编语言与C语言在C和汇编混合编程的时候,存在C语言和汇编语言的变量以及函数的接口问题。在C程序中定义的变量,编译为.asm文件后,都被放进了.bss区,而且变量名的前面都带了 一个下划线。在C程序中定义的函数,编译后在函数名前也带了一个下划线。例如:extern intnum 就会变成.bss _num, 1extern float nums5就会变成.bss _nums, 5extern void func ()就会变成 _func,一 汇编和C的相互调用可以分以下几种情况:(1)汇编程序中访问c程序中的变量和函数。在汇编程序中,用_XX就可以访问C中的变量XX 了。访问数组时,可以用_X
2、X+偏移量来访 问,如_XX+3访问了数组中的XX3。在汇编程序调用C函数时,如果没有参数传递,直接甩funcname就可以了。如果有参数传 递,则函数中最左边的一个参数由寄存器A给出,其他的参数按顺序由堆栈给出。返回值 是返回到A寄存器或者由A寄存器给出的地址。同时注意,为了能够让汇编语言能访问到C 语言中定义的变量和函数,他们必须声明为外部变量,即加extern前缀。(2)c程序中访问汇编程序中的变量如果需要在c程序中访问汇编程序中的变量,则汇编程序中的变量名必须以下划线为首字符, 并用global使之成为全局变量。如果需要在c程序中调用汇编程序中的过程,则过程名必须以下划线为首字符,并且
3、,要根 据c程序编译时使用的模式是stack-basedmodel还是registerargumentmodel来正确地编写该 过程,使之能正确地取得调用参数。(3)在线汇编在C程序中直接插入asm( * ”),内嵌汇编语句,需要注意的是这种用法要慎用, 在线汇编提供了能直接读写硬件的能力,如读写中断控制允许寄存器等,但编译器并不检查 和分析在线汇编语言,插入在线汇编语言改变汇编环境或可能改变C变量的值可能导致严重 的错误。二汇编和C接口中寻址方式的改变:需要注意的是,在C语言中,对于局部变量的建立和访问,是通过堆栈实现的,它的寻址是 通过堆栈寄存器SP实现的。而在汇编语言中,为了使程序代码变得更为精简,TI在直接寻 址方式中,地址的低7位直接包含在指令中,这低7位所能寻址的具体位置可由DP寄存器 或SP寄存器决定。具体实现可通过设置ST1寄存器的CPL位实现,CPL=0,DP寻址,CPL=1, SP寻址。在DP寻址的时候,由DP提供高9位地址,与低7位组成16位地址;在SP寻址 的时候,16位地址是由SP(16位)与低7位直接相加得来。由于在C语言的环境下,局部变量的寻址必须通过SP寄存器实现,在混合编程的时候,为 了使汇编语言不影响堆栈寄存器SP,通常的方式是在汇编环境中使用DP方式寻址,这样可 以使二者互不干扰。编程中只要注意对CPL位正确设置即可。文章由重庆达内编辑整理
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。