| 查看: 332 | 回复: 2 | ||
| 【奖励】 本帖被评价1次,作者yaojinling增加金币 0.5 个 | ||
| 当前主题已经存档。 | ||
[资源]
针对Ti的DSP C语言编程
|
||
|
在C和汇编混合编程的时候,存在C语言和汇编语言 的变量以及函数的接口问题。 在C程序中定义的变量,编译为.asm文件后,都被 放进了.bss区,而且变量名的前面都带了一个下划 线。在C程序中定义的函数,编译后在函数名前也 带了一个下划线。例如: extern int num就会变成 .bss _num, 1 extern float nums[5]就会变成.bss _nums, 5 extern void func ( )就会变成 _func, 一 汇编和C的相互调用可以分以下几种情况: (1) 汇编程序中访问c程序中的变量和函数。 在汇编程序中,用_XX就可以访问C中的变量XX了。 访问数组时,可以用_XX+偏移量来访问,如_XX+3 访问了数组中的XX[3]。 在汇编程序调用C函数时,如果没有参数传递,直 接用_funcname 就可以了。如果有参数传递,则函 数中最左边的一个参数由寄存器A给出,其他的参 数按顺序由堆栈给出。返回值是返回到A寄存器或 者由A寄存器给出的地址。同时注意,为了能够让 汇编语言能访问到C语言中定义的变量和函数,他 们必须声明为外部变量,即加extern 前缀。 (2) c程序中访问汇编程序中的变量 如果需要在c程序中访问汇编程序中的变量,则汇 编程序中的变量名必须以下划线为首字符,并用 global使之成为全局变量。 如果需要在c程序中调用汇编程序中的过程,则过程 名必须以下划线为首字符,并且,要根据c程序编译 时使用的模式是stack-based model还是register argument model来正确地编写该过程,使之能正确 地取得调用参数。 (3) 在线汇编 在C程序中直接插入 asm(“\t*** ”),内嵌汇编语 句,需要注意的是这种用法要慎用,在线汇编提供 了能直接读写硬件的能力,如读写中断控制允许寄 存器等,但编译器并不检查和分析在线汇编语言, 插入在线汇编语言改变汇编环境或可能改变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位正确设置即可。 |
» 猜你喜欢
请问哪里可以有青B申请的本子可以借鉴一下。
已经有4人回复
真诚求助:手里的省社科项目结项要求主持人一篇中文核心,有什么渠道能发核心吗
已经有6人回复
孩子确诊有中度注意力缺陷
已经有14人回复
三甲基碘化亚砜的氧化反应
已经有4人回复
请问下大家为什么这个铃木偶联几乎不反应呢
已经有5人回复
请问有评职称,把科研教学业绩算分排序的高校吗
已经有5人回复
2025冷门绝学什么时候出结果
已经有3人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复
2楼2007-02-02 09:28:38













回复此楼
大家分享一下;