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~