tms320lf2407考试_tms320lf2407 开发环境_tms320lf2407(51)

电脑杂谈  发布时间:2017-01-30 03:04:38  来源:网络整理

? AR0(FP)

? AR1(SP)

? AR6

? AR7

其它的寄存器可以不用保护自由使用。

? 如果函数改变了状态寄存器某些有假定值的位,则必须在函数结束前恢复其原有值。尤其要注意ARP必须为AR1

。

? 中断服务程序必须保护所有其用到的寄存器。

? long型和float型变量在存储器中的存储方式为低有效位在低端地址。

? 函数返回值要通过累加器进行传递。

? 编译器会在所有对象的名称前面加下横线,_”,因此汇编语言模块定义对象名称时也要以下横线为前缀,才能使定义的对象可以被C代码访问。例如C语言对象x在汇编语言中就是_x。汇编语言可以使用任何不带下横线前缀的变量而不会和C语言对象冲突。

? 任何汇编语言定义的对象,如果要被C程序访问,则必须用.global修饰。同样任何C语言定义的对象,如果要被汇编语言访问,也必须以.global修饰。

C程序调用汇编语言函数实例

13.2.8 使用内嵌asm语句在C程序中可以用asm语句插入单行汇编语句,用来实现用C

语言很难实现的功能。但是如果使用这种语句,一定小心不要破坏C运行环境,因为C编译器不会对这种插入的汇编语句进行检查或分析。

? 不要插入跳转或标签,否则会破坏编译器的堆栈处理算法,造成无法预期的后果。

? 不要修改C变量,但可以任意读取C变量当前值。

? 不要在内嵌汇编语句中书写修饰性汇编代码(如.text、

.data等),否则会破坏汇编环境。

内嵌汇编语句可以用来在编译输出结果中添加注释。

asm(,***** this is an assembly language comment”);

13.2.9 C程序访问汇编语言变量有时候需要在C程序中访问汇编语言变量,这通常有两种方式:

? 访问.bss块中的变量:

? 将要访问的变量定义在.bss块中。

? 用.golbal修饰要访问的变量。

? 在汇编语言中以下横线,_”为前缀声明要访问的变量。

? 在C语言中将变量声明为外部变量(extern),就可以进行正常访问。

? 访问非.bss块中的变量:

要访问非.bss块中的变量,通常的办法是在汇编语言中定义一个查找表,然后在C语言中通过指针来访问。

? 首先定义变量,而且最好放在独立的初始化块中。

? 定义一个全局的标识指向对象的起始点,这样对象可以分配在存储器空间的任何位置。

? 在C程序中将这个对象定义为外部对象(extern),并且对象名称不带下横线,_”前缀,就可以对其进行正常访问。

13.2.10 修改编译器输出结果程序设计者可以检查和修改C编译器输出的汇编语言程序,然后再对其进行汇编编译和连接。

在C语言可以使用内嵌汇编语句在编译输出结果中添加注释,以改善编译器输出汇编程序的可读性。

/***************************************************/

asm(,***** this is an assembly language comment”);

/***************************************************/

13.2.11 系统初始化

C程序开始运行时,必须首先初始化C运行环境,这是通过

c_int0函数完成的,这个函数在运行支持库(rts,

runtime-support library)中。连接器会将这个函数的入口地址放置在复位中断向量处,使其可以在初始化时被调用。

c_int0函数进行以下工作以建立C运行环境:

?为系统堆栈产生.stack块,并初始化堆栈指针。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-29489-51.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 艾门
      艾门

      美国佬在叙利亚被普京把了脸跑到南海来撒野

    • 屈博星
      屈博星

      都比饮料一样的酒

    • 贺彤
      贺彤

      应该说爱卿所言甚是

    热点图片
    拼命载入中...