Skip to content

ARMv7介绍

ARM指令始终是32位的指令,并且是4字节对齐.

在 ARM 指令集中,条件执行意味着只有当 APSR 中的 N、Z、C 和 V 条件标志满足指令编码。如果标志不满足此条件,则该指令将充当 NOP,即正常执行到下一条指令,包括对正在发生的异常进行任何相关检查,但没有其他效果。

指令格式

31 28 27 25 24 4 0
+---------+-------+-----------+----+--------+
| cond | op1 | | op | |
+---------+-------+-----------+----+--------+

cond位

条件码含义解释
0000EQ(Equal)相等(Z标志位设置)
0001NE(Not Equal)不相等(Z标志位清除)
0010CS(Carry Set)进位(C标志位设置)
0011CC(Carry Clear)无进位(C标志位清除)
0100MI(Minus)负数(N标志位设置)
0101PL(Plus)正数或零(N标志位清除)
0110VS(Overflow)溢出(V标志位设置)
0111VC(No Overflow)无溢出(V标志位清除)
1000HI(Unsigned Higher)无符号高于(C设置且Z清除)
1001LS(Unsigned Lower or Same)无符号低于或相同(C清除或Z设置)
1010GE(Greater or Equal)大于或等于(N等于V)
1011LT(Less Than)小于(N不等于V)
1100GT(Greater Than)大于(Z清除且N等于V)
1101LE(Less or Equal)小于或等于(Z设置或N不等于V)
1110AL(Always)总是(无条件执行)
1111AL总是(无条件执行)

op位

op1op介绍
00x-据处理和其他
010-加载/存储字和无符号字节
0110加载/存储字和无符号字节
0111媒体说明
10x-分支、带链接的分支和块数据传输
11x-协处理器指令和主管调用

指令注解

  1. c: cond, 条件判断
  2. shift: 移位操作类型,包括 LSL(逻辑左移),LSR(逻辑右移),ASR(算术右移),ROR(循环右移)。
  3. 立即数: 以#开头的数字
  4. S: 设置条件标志。如果包含这个后缀,指令执行后会更新条件标志。
  5. type: 移位操作类型,包括 LSL(逻辑左移0b00),LSR(逻辑右移0b01),ASR(算术右移0b10),ROR(循环右移0b11)。

CPSR(当前程序状态寄存器)

标识说明
31N负数标志(Negative flag),上次运算结果为负时置1
30Z零标志(Zero flag),上次运算结果为零时置1
29C进位标志(Carry flag),用于加法进位或减法借位
28V溢出标志(Overflow flag),用于指示有符号数溢出
27Q饱和标志(Saturation flag),用于指示饱和运算
26-25保留位(Reserved),通常为0
24JJazelle状态位,指示处理器是否处于Jazelle状态
23-20GE[3:0]更大的或相等标志(Greater than or Equal flags)
19-16保留位(Reserved),通常为0
15E大端标志(Endianness flag),指示内存访问方式
14-10保留位(Reserved),通常为0
9IT[1:0]If-Then状态位,用于Thumb-2指令集
8-7保留位(Reserved),通常为0
6E大端标志(Endianness flag),指示内存访问方式
5A异常屏蔽(Asynchronous abort disable),1表示屏蔽
4IIRQ禁用(Interrupt disable),1表示屏蔽IRQ中断
3FFIQ禁用(Fast Interrupt disable),1表示屏蔽FIQ中断
2TThumb状态位,1表示处理器处于Thumb状态
1-0M[4:0]模式位(Mode bits),指示当前处理器模式

模式位(M[4:0])的取值和含义:

模式说明
10000User用户模式,正常的程序执行模式
10001FIQ快速中断模式,用于高速数据处理
10010IRQ普通中断模式,用于一般中断处理
10011Supervisor管理模式,用于操作系统
10111Abort中止模式,用于处理存储器访问故障
11011Undefined未定义模式,用于处理未定义指令
11111System系统模式,用于操作系统运行中的特权任务