ARM汇编
来源:互联网 发布:spss如何预测未来数据 编辑:程序博客网 时间:2024/06/10 09:47
一、ARM寄存器
R15:别名PC,中文译为程序计数器;它的值是当前正在执行的指令在内存中的位置。
R14:别名LR,中文译为链接寄存器;它与子程序的调用密切相关,用于存放子程序的返回地址,是ARM程序实现子程序调用的关键。
R13:别名SP,中文译为栈指针寄存器;它是用于存放堆栈的栈顶地址的(内存位置)。
寄存器R0~R12是普通的数据寄存器,可用于任何地方。
CPSR:中文译为当前程序状态寄存器;它是用于保存程序的当前状态的。包括:条件代码标志位(ARM指令条件执行的依据,记录运算结果),控制位(控制CPU是否响应中断),模式位(决定ARM的其中工作模式)。
SPSR:中文译为程序状态寄存器;在异常发生时,由硬件自动将异常发生前的CPSR值放到SPSR中,以便将来在异常处理结束后、程序能回复原来CPSR的值。
二、ARM寻址方式
1.寄存器寻址
操作数来源于寄存器。eg:MOV pc, lr
2.立即数寻址
操作数来源于一个立即数。eg:MOV pc, #64
3.寄存器间接寻址
操作数来源于寄存器指定地址的存储单元中。eg:LDR R0, [R2]
三、ARM指令
1.单寄存器加载指令
LDR r0, [r1]:将[r1]所指内存中的一个字(4字节, 32位)加载到寄存器r0中。
LDRB r0, [r1]:将[r1]所指内存中的一个字节(8位)加载到寄存器r0中;其余高24位补0。
2.单寄存器存储指令
STR r0, [r1]:将r0中的值存储到内存的4字节中。
STRB r0, [r1]:将r0中的低8bit存储到内存的1字节中。
3.分支指令
B Label:跳转到标号Label处。
BL Label:跳转到标号Label处,并将返回地址PC保存到LR中。
BX r0:将r0的值作为地址,跳转到该地址处。
4.数据处理指令
MOV r0, r1:将r1的值赋给r0。
ADD(SUB) r0, r1, r2:将r1的值加上(减去)r2的值,结果保存到r0中。
AND(ORR,EOR) r0, r1, r2:将r1的值与(或、异或)r2的值,结果保存到r0中。
CMP r1, r2:比较r1和r2值的大小。说明:该指令会影响CPSR寄存器中的条件代码标志位。
四、ARM伪指令
ARM伪指令指,该指令并不会被翻译成ARM对应的二进制指令;它只是在编译阶段起作用的,相当于C中的条件编译关键字。
AREA:定义一个段。
CODE:声明是代码段。
READONLY:只读。
ENTRY:声明整个程序的入口点。
CODE32:表示ARM指令,而非thumb指令。
END:源代码文件结束。
GBLA:定义全局算数变量。
SETA:对全局算数变量赋值。
DCD:为立即数分配字存储空间。
DCB:为立即数分分配字节存储空间。
IF,ELSE,ENDIF:相当与C中的条件编译。
WHILE,WEND:同上。
MACRO、MEND、MEXIT:相当于C中宏替换;即用宏定义一个类似函数的功能。
EQU:相当于C中的宏定义。
EXPORT:与C混合编程时导出。
IMPORT:与C混合编程中导入。
说明:ARM指令与ARM伪指令的区别很明显——后者只是给编译器提供某些信息,以帮助编译器正确完成程序的编译;当编译完成后,汇编伪操作就完成了它的使命,它不可能在最终的二进制代码中留下任何痕迹。即:ARM伪指令是给编译器看的,而不是CPU。
五、ARM汇编与C混合编程
1.C中调用汇编子程序
C中用extern int delay(int time);
汇编中用EXPORT delay。
2.C程序访问汇编全局变量
C中用extern int DELAYVAL;
汇编中用EXPORT DELAYVAL。
3.汇编中调用C子程序
汇编中用IMPORT xmain;
C中不用导出。
4.汇编访问C全局变量
汇编中IMPORT i;
C中不用导出。
5.C中嵌入汇编
__asm
{
汇编指令
}
- ARM汇编
- ARM汇编
- ARM汇编
- arm汇编
- ARM汇编
- ARM汇编
- arm 汇编
- arm 汇编
- ARM汇编
- arm 汇编
- ARM汇编
- ARM 汇编
- arm 汇编
- ARM汇编
- ARM 汇编
- ARM汇编
- arm汇编
- ARM汇编
- Catalan数的应用与代码实现
- 更改MyEclipse匹配颜色
- HBase编程api介绍(转)
- 负数的二进制,已经反码、补码和原码的解释
- 难得的一周
- ARM汇编
- 中国气象中国地区县市编码数据
- 多人之间消息共享问题的算法设计
- sql 2000 查询加序号
- oracle创建用户
- 使用SWC打包/包装类的方法
- 关于android 端,人人网以及新浪网 webview 页面缓存问题
- java关于webservice的标准
- itoa 和 atoi 函数