找回密码
 注册
搜索
查看: 860|回复: 0

[ARM资料] ARM中C和汇编混合编程及示例

[复制链接]
发表于 2006-4-15 11:01:00 | 显示全部楼层 |阅读模式
【文件名】:06415@52RD_ARM中C和汇编混合编程及示例.pdf
【格 式】:pdf
【大 小】:111K
【简 介】:
【目 录】:
ARM 中C 和汇编混合编程及示例
在嵌入式系统开发中,目前使用的主要编程语言是C 和汇编,C++已经有相应的编译器,但是现
在使用还是比较少的。在稍大规模的嵌入式软件中,例如含有OS,大部分的代码都是用C 编写的,
主要是因为C 语言的结构比较好,便于人的理解,而且有大量的支持库。尽管如此,很多地方还是要
用到汇编语言,例如开机时硬件系统的初始化,包括CPU 状态的设定,中断的使能,主频的设定,
以及RAM 的控制参数及初始化,一些中断处理方面也可能涉及汇编。另外一个使用汇编的地方就是
一些对性能非常敏感的代码块,这是不能依靠C 编译器的生成代码,而要手工编写汇编,达到优化的
目的。而且,汇编语言是和CPU 的指令集紧密相连的,作为涉及底层的嵌入式系统开发,熟练对应
汇编语言的使用也是必须的。
单纯的C 或者汇编编程请参考相关的书籍或者手册,这里主要讨论C 和汇编的混合编程,包括
相互之间的函数调用。下面分四种情况来进行讨论,暂不涉及C++。
1.在C 语言中内嵌汇编
在C 中内嵌的汇编指令包含大部分的ARM 和Thumb 指令,不过其使用与汇编文件中的指令有些不
同,存在一些限制,主要有下面几个方面:
a. 不能直接向PC 寄存器赋值,程序跳转要使用B 或者BL 指令
b. 在使用物理寄存器时,不要使用过于复杂的C 表达式,避免物理寄存器冲突
c. R12 和R13 可能被编译器用来存放中间编译结果,计算表达式值时可能将R0 到R3、R12 及R14
用于子程序调用,因此要避免直接使用这些物理寄存器
d. 一般不要直接指定物理寄存器,而让编译器进行分配
内嵌汇编使用的标记是 __asm 或者asm 关键字,用法如下:
__asm
{
instruction [; instruction]
..
.
[instruction]



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-6-17 11:45 , Processed in 0.049906 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表