ARMv7介绍
ARM指令始终是32位的指令,并且是4字节对齐.
在 ARM 指令集中,条件执行意味着只有当 APSR 中的 N、Z、C 和 V 条件标志满足指令编码。如果标志不满足此条件,则该指令将充当 NOP,即正常执行到下一条指令,包括对正在发生的异常进行任何相关检查,但没有其他效果。
31 28 27 25 24 4 0+---------+-------+-----------+----+--------+| cond | op1 | | op | |+---------+-------+-----------+----+--------+cond位
| 条件码 | 含义 | 解释 |
|---|---|---|
| 0000 | EQ(Equal) | 相等(Z标志位设置) |
| 0001 | NE(Not Equal) | 不相等(Z标志位清除) |
| 0010 | CS(Carry Set) | 进位(C标志位设置) |
| 0011 | CC(Carry Clear) | 无进位(C标志位清除) |
| 0100 | MI(Minus) | 负数(N标志位设置) |
| 0101 | PL(Plus) | 正数或零(N标志位清除) |
| 0110 | VS(Overflow) | 溢出(V标志位设置) |
| 0111 | VC(No Overflow) | 无溢出(V标志位清除) |
| 1000 | HI(Unsigned Higher) | 无符号高于(C设置且Z清除) |
| 1001 | LS(Unsigned Lower or Same) | 无符号低于或相同(C清除或Z设置) |
| 1010 | GE(Greater or Equal) | 大于或等于(N等于V) |
| 1011 | LT(Less Than) | 小于(N不等于V) |
| 1100 | GT(Greater Than) | 大于(Z清除且N等于V) |
| 1101 | LE(Less or Equal) | 小于或等于(Z设置或N不等于V) |
| 1110 | AL(Always) | 总是(无条件执行) |
| 1111 | AL | 总是(无条件执行) |
op位
| op1 | op | 介绍 |
|---|---|---|
| 00x | - | 据处理和其他 |
| 010 | - | 加载/存储字和无符号字节 |
| 011 | 0 | 加载/存储字和无符号字节 |
| 011 | 1 | 媒体说明 |
| 10x | - | 分支、带链接的分支和块数据传输 |
| 11x | - | 协处理器指令和主管调用 |
- c: cond, 条件判断
- shift: 移位操作类型,包括 LSL(逻辑左移),LSR(逻辑右移),ASR(算术右移),ROR(循环右移)。
- 立即数: 以#开头的数字
- S: 设置条件标志。如果包含这个后缀,指令执行后会更新条件标志。
- type: 移位操作类型,包括 LSL(逻辑左移0b00),LSR(逻辑右移0b01),ASR(算术右移0b10),ROR(循环右移0b11)。
CPSR(当前程序状态寄存器)
Section titled “CPSR(当前程序状态寄存器)”| 位 | 标识 | 说明 |
|---|---|---|
| 31 | N | 负数标志(Negative flag),上次运算结果为负时置1 |
| 30 | Z | 零标志(Zero flag),上次运算结果为零时置1 |
| 29 | C | 进位标志(Carry flag),用于加法进位或减法借位 |
| 28 | V | 溢出标志(Overflow flag),用于指示有符号数溢出 |
| 27 | Q | 饱和标志(Saturation flag),用于指示饱和运算 |
| 26-25 | 保留位(Reserved),通常为0 | |
| 24 | J | Jazelle状态位,指示处理器是否处于Jazelle状态 |
| 23-20 | GE[3:0] | 更大的或相等标志(Greater than or Equal flags) |
| 19-16 | 保留位(Reserved),通常为0 | |
| 15 | E | 大端标志(Endianness flag),指示内存访问方式 |
| 14-10 | 保留位(Reserved),通常为0 | |
| 9 | IT[1:0] | If-Then状态位,用于Thumb-2指令集 |
| 8-7 | 保留位(Reserved),通常为0 | |
| 6 | E | 大端标志(Endianness flag),指示内存访问方式 |
| 5 | A | 异常屏蔽(Asynchronous abort disable),1表示屏蔽 |
| 4 | I | IRQ禁用(Interrupt disable),1表示屏蔽IRQ中断 |
| 3 | F | FIQ禁用(Fast Interrupt disable),1表示屏蔽FIQ中断 |
| 2 | T | Thumb状态位,1表示处理器处于Thumb状态 |
| 1-0 | M[4:0] | 模式位(Mode bits),指示当前处理器模式 |
模式位(M[4:0])的取值和含义:
| 值 | 模式 | 说明 |
|---|---|---|
| 10000 | User | 用户模式,正常的程序执行模式 |
| 10001 | FIQ | 快速中断模式,用于高速数据处理 |
| 10010 | IRQ | 普通中断模式,用于一般中断处理 |
| 10011 | Supervisor | 管理模式,用于操作系统 |
| 10111 | Abort | 中止模式,用于处理存储器访问故障 |
| 11011 | Undefined | 未定义模式,用于处理未定义指令 |
| 11111 | System | 系统模式,用于操作系统运行中的特权任务 |