在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位正确设置即可。

c语言dsp编程论坛,针对Ti的DSP C语言编程相关推荐

  1. TI基于DSP+ARM的双核架构如何相互通信

    1 通信结构简介 针对当前应用的复杂性,SOC芯片更好能能满足应用和媒体的需求,集成众多接口,用ARM做为应用处理器进行多样化的应用开发和用户界面和接口,利用DSP进行算法加速,特别是媒体的编解码算法 ...

  2. [DSP 日常记录] #2 TI DSP 的简单介绍与 DSP 的一些名词解释

    将原先自己别处写的两篇博文汇总在这里 [内容仅针对 TI 公司生产的 DSP] TI公司的主要处理器产品列表 参考:TI.WIKI 一.MCUs 微处理器 16-bit 超低功耗处理器 -- MSP4 ...

  3. 不同语言编程能整合到一起吗_学习编程入门指南

    每天都看到很多对编程感兴趣的人在问是不是可以自学软件开发,或者应该怎么自学编程才能入门.在这篇文章里,我将尝试重现一个初学者在学习计算机编程时可能会碰到的问题,并尽量提供相应的解决思路,希望对初学者有 ...

  4. go语言打印日期_基于 Go 语言开发在线论坛(八):消息、视图及日期时间本地化...

    我们接着上篇在线论坛的进度,由于之前所有页面和消息文本都是英文的,而我们开发的应用基本都是面向中文用户的,所以需要对项目进行本地化,今天正好借着这个入门项目给大家介绍下如何在 Go Web 应用中进行 ...

  5. 有没有c 或c语言的短期培训学校,根河学c语言编程,根河学c语言编程的学校,根河学c语言编程报个培训班怎么样...

    根河学c语言编程,根河学c语言编程的学校,根河学c语言编程报个培训班怎么样 首页 > 软件 > 根河学c语言编程 作者:镀金池   发布时间:2017-11-30 11:02 另外,尽早调 ...

  6. 实战项目!用PHP实现的编程论坛网站

    微信公众号:Java随笔录 关注可了解更多Java相关的技术分享.问题或建议,欢迎公众号留言! 文章目录 一.系统需求分析 1. 系统描述 2. 需求分析和应用程序功能 3. 系统常做的查询与更新 4 ...

  7. 沈阳工业大学c语言编程题,金融工程专业《C语言程序设计》启发式教学探讨

    一.引言 C语言是一门高级程序设计语言,掌握C语言不仅有利于提高学生的思维能力,而且有利于培养学生的编程能力,对学习其他计算机语言课程具有很大的帮助.因此,<C语言程序设计>既是计算机各类 ...

  8. 基于c语言编程思路的实践与探索,C语言程序设计趣味教学探索与实践

    张竞丹 王乐 江武汉 范金坪 管明祥 摘要:"C语言程序设计"是高等职业教育中计算机.电子专业的专业基础课程,在其专业课程体系中具有重要的作用.文章针对高职院校"C语言程 ...

  9. 自动化学计算机语言先学什么,要入门PLC编程 先搞清这5种专用语言

    原标题:要入门PLC编程 先搞清这5种专用语言 PLC,(Programmable Logic Controller),乃是一种电子装置,早期称为顺序控制器"Sequence Control ...

  10. Computer:少儿编程—每个人都应该学习编程,它能教你如何思考—编程入门的简介(编程语言的特点种类开发工具对比人类语言)、编程应用、编程意义之详细攻略

    Computer:少儿编程-每个人都应该学习编程,它能教你如何思考-编程入门的简介(编程语言的特点&种类&开发工具&对比人类语言).编程应用.编程意义之详细攻略 导读:乔布斯说 ...

最新文章

  1. 三层架构的原理及实现
  2. 圈子 | 精彩预告:P2P金融那些事儿
  3. LRU算法四种实现方式介绍
  4. Android打电话功能权限报错,从打电话权限报错看Android6.0权限变化
  5. linux服务器 版本 比例,Linux比例近半 服务器操作系统混战开始
  6. python软件下载安装百度网盘-Python自动化测试视频教程【百度云盘下载】
  7. 读取Excel文件的版本
  8. 快手视频大量下载无水印软件 怎样从快手下载无水印软件 说说如何在快手批量下载高清不含水印...
  9. ADS仿真4_滤波器设计
  10. 常见的web前端编程软件
  11. 偏微分方程数值解主要步骤
  12. liteide+g:Goland多版本管理
  13. 16代表啥_16代表的爱情恋爱含义16代表什么爱情含义
  14. git memery 后 push到远程,如何回滚
  15. 无人驾驶失败案例汇总
  16. Linux常用命令|徐奥雯编辑整理|XUAOWEN
  17. win10配置计算机时强制关机,老鸟讲解Win10设置远程系统强制关机的详尽处理要领...
  18. 【DockerCE】Docker-CE 20.10.14正式版发布
  19. 2021-08-02彻底解决Typora+PicGo-Core+SMMS图床的问题
  20. word的xml文件中空白页和换页

热门文章

  1. Python 将文件夹内所有pdf转换为图片输出到指定文件夹中
  2. while循环、do while循环for循环(重点)、break终止循环和continue结束本次循环。
  3. 网页设计1-1李清照人物简介
  4. 明天更美好,世界有你更精彩!
  5. office2010 打开报错 无法访问您试图使用的功能所在的网络位置
  6. 为什么不同文化中都会发现圆形房屋
  7. 网站被攻击了怎么办?
  8. 图灵机和通用计算机,数学的不完美之美——阿兰?图灵与图灵机
  9. 沈海高速汕尾往深圳服务器维护报价,沈海高速收费
  10. 目标检测数据集下载及算法训练教程