ARM汇编
数据和指令类型
ARM 采用的是 32 位架构 .ARM 约定 :Byte : 8 bitsHalfword : 16 bits (2 byte)Word : 32 bits (4 byte)Doubleword 64-bits( 8byte )( Cortex-A 处理器)大部分 ARM core 提供:ARM 指令集( 32-bit )Thumb 指令集( 16-bit )
ARM指令集
所有 ARM 指令均为 32-bits 长大部分为单周期指令所有指令都可以条件执行
分类
ARM 指令集可以分为六大类1.数据处理指令 ( 完成 CPU 内部的计算)2. Load/Store指令 ( 完成 CPU 与内存 IO 外设之间的数据传输)3. 跳转指令 ( 完成程序的跳转)4. 程序状态寄存器处理指令 ( 完成 CPSR 的管理 )5. 协处理器指令 ( 完成 CPU 扩展功能的实现 )6. 异常产生指令 ( 用户程序异常触发 )

数据处理指令
算术指令:ADD ADC SUB SBC RSB RSC位 运 算 指令:AND ORR EOR BIC比较指令:CMP CMN TST TEQ数据搬移:MOV MVN
数据处理指令详细列表如下:
条件码
下表为所有可能的条件码:
ARM寄存器
ARM
ARM 有 37 个 32-Bits 长的寄存器。1 个用作 PC( program counter)1个用作 CPSR(current program status register)5个用作 SPSR(saved program status registers)30 个通用寄存器Cortex体系
Cortex 体系结构下有 40 个 32-Bits 长的寄存器。Cortex-A多出3个寄存器,Monitor 模式 r13_mon , r14_mon, spsr_mon当前处理器的模式决定着哪组寄存器可操作 . 任何模式都可以存取:相应的r0-r12 子集相应的 r13 (the stack pointer, sp) and r14 (the link register, lr)相应的 r15 ( the program counter, pc)相应的CPSR(current program status register, cpsr)特权模式 ( 除 system 模式 ) 还可以存取;相应的 spsr (saved program status register)
ARM源文件
源程序文件 | 文件名 | 说 明 |
汇编程序文件 | *.S *.s |
用
ARM
汇编语言编写的
ARM
程序或
Thumb
程序。(
汇编代码可直接操作
CPU
内部的
REG)
|
C程序文件 | *.C *.c | 用C语言编写的程序代码。 |
头文件 | *.H *.h |
为了简化源程序,把程序中常用到的常量名、宏定义、数据结构定义等等单 独放在一个文中,一般称为头文件。
|
ARM汇编语言
伪操作

伪指令
伪指令 | 语法格式 | 作 用 |
ADR |
ADR{cond} register
,
expr
|
将基于
PC
或基于寄存器的地址值读取到
寄存器中。小范围的地址读取。
|
ADRL |
ADRL{cond} register
,
expr
|
将基于
PC
或基于寄存器的地址值读取到
寄存器中。中等范围的地址读取。
|
LDR |
LDR {cond} register
,
=
[
expr | label-expr
]
|
将一个
32
位的立即数或者一个地址值读
取到寄存器中。大范围的地址读取。
|
NOP | NOP | 在汇编时将被替换成ARM中的空操作。 |
源程序的基本结构
举例说明
area RESET,code,readonly ;声明了一个名为 RESET 的代码段
code32 ;代表了后面的指令是ARM指令
entry ;代表该段是程序的入口点
start ;标号
mov r0, #1 ;r0 = 1
mov r1, #2 ;r1 = 2
add r0,r0,r1 ;r0 = r0 +r1
nop ; 伪指令
b start ;跳转回start
end ;源文件结束
立即数
一个数(或其按位取反后)循环右移偶数位后所有的1能放进低8位中
e.g.
mov r0, #1
#1即为一个立即数
堆栈
ARM堆栈操作通过块传送指令来完成 :• STMFD(Push) 块存储 - Full Descending stack [STMDB]• LDMFD(Pop) 块装载- Full Descending stack [LDMIA]
STMFD sp!, {r4-r7,lr} ; 保护现场
LDMFD sp!, {r4-r7,pc} ;恢复现场