ARM汇编基础知识点总结
来源:互联网 发布:mac压缩解压软件 编辑:程序博客网 时间:2024/06/01 09:02
最近在看2440A的引导代码, 发现学习汇编还真的是挺费力的, 每天的进展也不大, 不过做什么事还是贵在坚持。
现把ARM汇编的一些基础知识总结一下, 以更好的总结学习。
1. ARM源程序文件名的后缀名分类如下:
汇编文件: *.S
引入文件: *.inc
C程序 : *.c
头文件 : *.h
2. 汇编语句格式:
[ 标号 ] <指令 | 条件 | S > <操作数> [ ;注释]
说明:[]中的内容是可以省略的;而<>中的内容绝对不能省略
(1)、所有标号必须在一行的顶格书写, 其前面不能有空格, 并且其后面不要加:
(2)、所有指令均不能顶格书写
(3)、ARM汇编器对标识符大小写敏感, 书写标号及指令时字母大小要一致, 在ARM汇编程序中, 一个ARM指令/伪指令/寄存器名可以全部为大写字母, 也可以全部为小写字母, 但不要大小写混合使用
(4)、注释使用 ;或者 @. @表示开始到此行结束, 注释可以在一行顶格书写(对ADS汇编格式, 只支持;)
(5)、源程序中允许空行
(6)、如果单行太长,可以使用字符 / 将其分行, / 后不能有任何字符,包括空格
(7)、对于变量的设置, 常量的定义, 其标识符必须在一行的顶格书写
备注:标号---在ARM汇编中, 标号代表一个地址, 根据标号生成方式, 可以分为以下3种
(1)、基于PC的标号,例如: BL LEDTEST
(2)、基于寄存器的标号,例如: MAP 0x00,R9
(3)、绝对地址,例如: LDR R0,=WTCON
3. 局部标号:
说明:主要用于局部范围代码中, 对宏定义也非常有用, 格式如下:
N { routname }
N是局部标号, 为 0 ~ 99
routname是局部标号作用范围的名称, 可省略
局部标号引用格式: % {F | B } {A | T} N {routname }
其中:
% 表示局部标号引用操作
F 指示编译器只向前搜索
B 指示编译器只向后搜索
A 指示编译器搜索宏的所有嵌套层次
T 指示编译器搜索宏的当前层
应用举例如下:
mov r1, #16
0 subs r1,r1, #1
bne %B0 ;若r0不等于0, 则返回到局部标号为0处继续执行
4. ARM编译器特定的关键词
__asm:告诉编译器下面的代码是用汇编写的
__inline:声明该函数在其被调用的地方展开
__irq:声明该函数可以被用做irq或者fiq异常的中断处理程序
__pure:声明一个函数, 其结果仅仅依赖于其输入参数, 而且它没有负效应
__int64:是long long 的同义词
__volatile:告诉编译器该对象可能在程序之外被修改
__weak:用于限定一个对象, 该对象如果连接时不存在, 不会报错
5. C与汇编相互调用
寄存器的使用规则为: 子程序间通过寄存器R0 - R3 来传递参数,使用 R4 - R11来保存局部变量,R12用作过程调用中间临时寄存器, 即IP, R13用作堆栈指针,即SP, R14作为链接寄存器,即LR, R15是程序计数器,即PC
子程序参数传递规则: 当寄存器不超过4个时, 使用 R0 - R3来传递参数, 当超过4个时,可以使用堆栈来传递参数,入栈的顺序与参数顺序相反,即最后一个字数据先入栈
子程序结果返回规则: 结果为一个32位的整数时, 可以通过寄存器R0返回, 如果是64位, 通过R0和R1返回,对于位数更多的结果, 需要通过内存来传递
5.1 C语言调用汇编程序
在汇编程序中使用 EXPORT 伪指令声明本子程序, 使其它程序可以调用子程序, 在C语言程序中使用extern关键字声明外部函数(声明要调用的汇编子程序), 即可调用此汇编子程序
5.2 汇编程序调用C程序
在汇编程序中使用IMPORT伪指令声明将要调用的C程序函数, 在调用C程序时, 要正确设置入口参数, 然后使用BL调用
待续~~~~
- ARM汇编基础知识点总结
- ARM汇编基础知识点总结
- ARM汇编指令基础总结
- arm汇编知识点
- ARM汇编基础
- ARM汇编基础
- arm汇编基础一
- ARM汇编指令基础
- ARM汇编编程基础
- arm 反汇编基础
- ARM汇编基础
- 1.ARM汇编基础
- ARM汇编基础
- ARM汇编基础
- ARM汇编基础
- ARM汇编基础
- ARM汇编基础
- ARM汇编基础
- Java操作XML文件(转)
- C++0x中编写可递归的Lambda
- oracle procedure 参数传递方式
- A4文档打印为A3双面的解决办法
- Mac (xcode)应用程序图片的修改
- ARM汇编基础知识点总结
- Lotus notes6-85升级安装设置
- 齐次坐标的理解
- 多维数组的实现
- 在word文件中查找字符串
- windows下批量下载android源码
- WCF之Binding详解
- Flex中应注意的些小问题
- poj1094 Sorting It All Out