24小时热门版块排行榜    

查看: 409  |  回复: 2
【奖励】 本帖被评价1次,作者yaojinling增加金币 0.5 个
当前主题已经存档。

yaojinling

金虫 (正式写手)


[资源] 针对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位正确设置即可。
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yaojinling

金虫 (正式写手)


大家分享一下;
2楼2007-02-02 09:28:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 yaojinling 的主题更新
☆ 无星级 ★ 一星级 ★★★ 三星级 ★★★★★ 五星级
普通表情 龙 兔 虎 猫 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考博] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +3 1uaZt2kAZj2S 2026-10-30 13/650 2026-11-01 16:48 by BCdvBAEpt3zm
[考研] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +3 1uaZt2kAZj2S 2026-10-30 18/900 2026-11-01 16:48 by BCdvBAEpt3zm
[硕博家园] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +3 1uaZt2kAZj2S 2026-10-30 14/700 2026-11-01 16:45 by BCdvBAEpt3zm
[考博] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +5 X5bHxOULxFqb 2026-10-30 22/1100 2026-11-01 16:35 by BCdvBAEpt3zm
[考博] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +3 hKe7U1kad5Sg 2026-10-31 7/350 2026-11-01 15:08 by BCdvBAEpt3zm
[基金申请] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +4 xvJS1BYDxvBS 2026-10-31 9/450 2026-11-01 14:55 by BCdvBAEpt3zm
[考研] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +4 xvJS1BYDxvBS 2026-10-31 10/500 2026-11-01 14:50 by BCdvBAEpt3zm
[论文投稿] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +3 xvJS1BYDxvBS 2026-10-31 7/350 2026-11-01 14:50 by BCdvBAEpt3zm
[考研] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +4 1uaZt2kAZj2S 2026-10-30 13/650 2026-11-01 14:37 by BCdvBAEpt3zm
[考研] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +3 xvJS1BYDxvBS 2026-10-31 5/250 2026-11-01 12:51 by BCdvBAEpt3zm
[考研] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +4 1uaZt2kAZj2S 2026-10-31 8/400 2026-11-01 12:38 by BCdvBAEpt3zm
[考博] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +3 1uaZt2kAZj2S 2026-10-30 10/500 2026-11-01 12:27 by BCdvBAEpt3zm
[基金申请] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +4 1uaZt2kAZj2S 2026-10-30 11/550 2026-11-01 12:24 by BCdvBAEpt3zm
[硕博家园] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +4 1uaZt2kAZj2S 2026-10-30 17/850 2026-11-01 12:24 by BCdvBAEpt3zm
[硕博家园] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +4 X5bHxOULxFqb 2026-10-30 18/900 2026-11-01 12:11 by BCdvBAEpt3zm
[公派出国] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +3 hKe7U1kad5Sg 2026-10-31 5/250 2026-11-01 11:14 by BCdvBAEpt3zm
[论文投稿] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +3 1uaZt2kAZj2S 2026-10-31 8/400 2026-11-01 03:59 by YXM1FDCSE8Bn
[找工作] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +3 1uaZt2kAZj2S 2026-10-31 6/300 2026-11-01 03:56 by YXM1FDCSE8Bn
[考博] 2027博士申请-临床检验诊断学、病原生物学、微生物方向 50+3 yyh@ 2026-10-28 4/200 2026-10-31 12:47 by 可淡不可忘
[文学芳草园] 闲聊 +3 myrtle 2026-10-25 6/300 2026-10-29 15:28 by myrtle
信息提示
请填处理意见