一、ARM指令基本格式
1.指令的基本格式及说明
ARM是三地址指令格式,指令的基本格式为:
<opcode> `{<cond>} {s} <Rd>, <Rn> {,<operand2>}
其中<>号内的项是必须的,{}号内的项是可选的。各项说明如下:
opcode: 指令助记符;
cond: 执行条件;
s: 是否影响CPSR寄存器的值;
Rd: 目标寄存器;
Rn: 第一个操作数的寄存器;
operand2: 第二个操作数;
条件码“cond”的使用可以实现高效的逻辑操作(节省跳转和条件语句),提高代码效率。所有的ARM指令都可以条件执行,
而THUMB指令只有B(跳转)指令具有条件执行功能。如果指令不标明条件代码,将默认为无条件(AL)执行。
2.指令的条件域
操作码 | 条件助记符 | 标志 | 含义 |
0000 | EQ | Z = 1 | 相等 |
0001 | NE | Z = 0 | 不相等 |
0010 | CS/HS | C = 1 | 无符号数大于或等于 |
0011 | CC/LO | C = 0 | 无符号数小于 |
0100 | MI | N = 1 | 负数 |
0101 | PL | N = 0 | 正数或零 |
0110 | VS | V = 1 | 溢出 |
0111 | VC | V = 0 | 没有溢出 |
1000 | HI | C = 1, Z = 0 | 无符号数大于 |
1001 | LS | C = 0, Z = 1 | 无符号数小于或等于 |
1010 | GE | N = V | 有符号数大于或等于 |
1011 | LT | N != V | 有符号数小于 |
1100 | GT | Z=0, N = V | 有符号数大于 |
1101 | LE | Z = 1, N != v | 有符号数小于或等于 |
1110 | AL | 任何 | 无条件执行(指令默认条件) |
1111 | NV | 任何 | 从不执行(不要使用) |
示例:
if( a > b)
{
a++;
}else{
b++;
}
对应的汇编指令实现:
CMP R0, R1 ;R0(a)与R1(b)
ADDHI R0, R0,#1
ADDLS R1,R1,#1