ARM 汇编指令学习:[0]编码格式与条件码域
一、ARM指令的编码格式
31 28 | 27 21 | 20 | 19 16 | 15 12 | 11 0 |
---|---|---|---|---|---|
cond | opcode | S | Rn | Rd | shifter_operand |
其中:
- cond [31-28] 4-bit 指令执行的条件编码
- opcode [27-21] 4-bit 指令操作符编码
- S [20] 1-bit 决定指令的操作是否影响CPSR的值
- Rn [19-16] 4-bit 包含第1个操作数的寄存器编码
- Rd [15-12] 4-bit 目标寄存器编码
- shifter_operand [11-0] 12-bit 表示第2个操作数
一条典型的ARM指令语法如下:
<opcode>{<cond>}{S} <Rd>,<Rn>,<shifter_operand>
其中:
- <opcode> 指令助记符
- {<cond>} 指令执行的条件
- {S} 决定指令的操作是否影响CPSR的值
- <Rd> 表示目标寄存器
- <Rn> 表示包含第1个操作数的寄存器
- <shifter_operand> 表示第2个操作数
二、ARM指令的条件码域
条件码<cond> | 条件码助记符 | 含义 | CPSR中条件标志位值 |
---|---|---|---|
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=1且V=1或N=0且V=0 |
1011 | LT | 带符号数小于 | N=1且V=0或N=0且V=1 |
1100 | GT | 带符号数大于 | Z=0且N=V |
1101 | LE | 带符号数小于/等于 | Z=1或N!=V |
1110 | AL | 无条件执行 | |
1111 | NV | 该指令从不执行 |
- 我的个人主页:http://www.techping.cn/
- 我的个人站点博客:http://www.techping.cn/blog/wordpress/
- 我的CSDN博客:http://blog.csdn.net/techping
- 我的简书:http://www.jianshu.com/users/b2a36e431d5e/timeline
- 我的GitHub:https://github.com/techping
欢迎相互follow~