【Cortex-A7】 常用汇编指令

【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 里中

【Cortex-A7】 常用汇编指令_第1张图片

2. 存储器访问指令

读写存储器时,需要先将存储器的地址放在寄存器中,再去操作寄存器

指令 描述
LDR Rd, [Rn , #offset] 从存储器 Rn+offset 的位置读取数据存放到 Rd 中。
STR Rd, [Rn, #offset] 将 Rd 中的数据写入到存储器中的 Rn+offset 位置。

【Cortex-A7】 常用汇编指令_第2张图片

3. 压栈和出栈指令

指令 描述
PUSH 将寄存器列表存入栈中。
POP 从栈中恢复寄存器列表

【Cortex-A7】 常用汇编指令_第3张图片

4. 跳转指令

指令 描述
B 跳转到 label,如果跳转范围超过了+/-2KB,可以指定 B.W 使用 32 位版本的跳转指令, 这样可以得到较大范围的 跳转
BX 间接跳转,跳转到存放于 Rm 中的地址处,并且切换指令集
BL 跳转到标号地址,并将返回地址保存在 LR 中。
BLX 结合 BX 和 BL 的特点,跳转到 Rm 指定的地址,并将返回地 址保存在 LR 中,切换指令集。

【Cortex-A7】 常用汇编指令_第4张图片
【Cortex-A7】 常用汇编指令_第5张图片

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

你可能感兴趣的:(嵌入式,汇编,arm开发)