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 | 系统模式,用于操作系统运行中的特权任务 |