admin管理员组文章数量:1122847
【Cortex
【Cortex-A7】 常用汇编指令
- Cortex-A7 常用汇编指令
- 1. 处理器内部数据传输
- 2. 存储器访问指令
- 3. 压栈和出栈指令
- 4. 跳转指令
- 5. 算术运算指令
- 6. 逻辑运算指令
Cortex-A7 常用汇编指令
参考《ARM ArchitectureReference Manual ARMv7-A and ARMv7-R edition.pdf》的 A4
章节。
先运行汇编语言,从汇编语言跳转到C语言,解释:
cortex-A 芯片刚上电时, SP 指针还未初始化,C环境还未准备好。应该先用汇编语言设置好C环境,比如初始化 DDR ,设置 SP指针等。
- 堆栈:因为C语言的函数运行设计到出栈入栈等对堆栈的操作,堆栈由SP指针访问,上电SP指针还没有设置好的前提下,C代码是无法运行的
- 初始化DDR:还有些芯片本身没有RAM,或者内部的RAM不开放给用户使用,用户的代码需要在 DDR 中运行,因此汇编中还需要初始化 DDR
ARM
汇编 , GCC
交叉编译器 ,代码要符合 GUN
语法。
1. 处理器内部数据传输
指令 | 目的 | 源 | 描述 |
---|---|---|---|
MOV | R0 | R1 | 将 R1 里面的数据复制到 R0 中。 |
MRS | R0 | CPSR | 将特殊寄存器 CPSR 里面的数据复制到 R0 中。 |
MSR | CPSR | R1 | 将 R1 里面的数据复制到特殊寄存器 CPSR 里中 |
2. 存储器访问指令
读写存储器时,需要先将存储器的地址放在寄存器中,再去操作寄存器
指令 | 描述 |
---|---|
LDR Rd, [Rn , #offset] | 从存储器 Rn+offset 的位置读取数据存放到 Rd 中。 |
STR Rd, [Rn, #offset] | 将 Rd 中的数据写入到存储器中的 Rn+offset 位置。 |
3. 压栈和出栈指令
指令 | 描述 |
---|---|
PUSH | 将寄存器列表存入栈中。 |
POP | 从栈中恢复寄存器列表 |
4. 跳转指令
指令 | 描述 |
---|---|
B | 跳转到 label,如果跳转范围超过了+/-2KB,可以指定 B.W |
BX | 间接跳转,跳转到存放于 Rm 中的地址处,并且切换指令集 |
BL | 跳转到标号地址,并将返回地址保存在 LR 中。 |
BLX | 结合 BX 和 BL 的特点,跳转到 Rm 指定的地址,并将返回地 址保存在 LR 中,切换指令集。 |
5. 算术运算指令
指令 | 计算公式 | 备注 |
---|---|---|
ADD Rd, Rn, Rm | Rd = Rn + Rm | 加法运算,指令为 ADD |
ADD Rd, Rn, #immed | Rd = Rn + #immed | |
ADC Rd, Rn, Rm | Rd = Rn + Rm + 进位 | 带进位的加法运算,指令为 ADC |
ADC Rd, Rn, #immed | Rd = Rn + #immed +进位 | |
SUB Rd, Rn, Rm | Rd = Rn – Rm | 减法 |
SUB Rd, #immed | Rd = Rd - #immed | |
SUB Rd, Rn, #immed | Rd = Rn - #immed | |
SBC Rd, Rn, #immed | Rd = Rn - #immed – 借位 | 带借位的减法 |
SBC Rd, Rn ,Rm | Rd = Rn – Rm – 借位 | |
MUL Rd, Rn, Rm | Rd = Rn * Rm | 乘法(32 位) |
UDIV Rd, Rn, Rm | Rd = Rn / Rm | 无符号除法 |
SDIV Rd, Rn, Rm | Rd = Rn / Rm | 有符号除法 |
6. 逻辑运算指令
指令 | 计算公式 | 备注 |
---|---|---|
AND Rd, Rn | Rd = Rd &Rn | 按位与 |
AND Rd, Rn, #immed | Rd = Rn &#immed | |
AND Rd, Rn, Rm | Rd = Rn & Rm | |
ORR Rd, Rn | Rd = Rd | Rn | 按位或 |
ORR Rd, Rn, #immed | Rd = Rn | #immed | |
ORR Rd, Rn, Rm | Rd = Rn | Rm | |
BIC Rd, Rn | Rd = Rd & (~Rn) | 位清除 |
BIC Rd, Rn, #immed | Rd = Rn & (~#immed) | |
BIC Rd, Rn , Rm | Rd = Rn & (~Rm) | |
ORN Rd, Rn, #immed | Rd = Rn | (#immed) | 按位或非 |
ORN Rd, Rn, Rm | Rd = Rn | (Rm) | |
EOR Rd, Rn | Rd = Rd ^ Rn | 按位异或 |
EOR Rd, Rn, #immed | Rd = Rn ^ #immed | |
EOR Rd, Rn, Rm | Rd = Rn ^ Rm |
本文标签: Cortex
版权声明:本文标题:【Cortex 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1701139526a343767.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论