一、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