|
一、 程序狀態寄存器(CPSR)條件標志位的具體含義:
標志位 |
含 義 |
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.5pt; mso-bidi-font-size:11.0pt; font-family:等線; mso-ascii-font-family:等線; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:等線; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:等線; mso-hansi-theme-font:minor-latin; mso-font-kerning:1.0pt;} table.MsoTableGrid {mso-style-name:網格型; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-priority:39; mso-style-unhide:no; border:solid windowtext 1.0pt; mso-border-alt:solid windowtext .5pt; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-border-insideh:.5pt solid windowtext; mso-border-insidev:.5pt solid windowtext; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.5pt; mso-bidi-font-size:11.0pt; font-family:等線; mso-ascii-font-family:等線; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:等線; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:等線; mso-hansi-theme-font:minor-latin; mso-font-kerning:1.0pt;} |
當用兩個補碼表示的帶符號數進行運算時, N=1 表示運算的結果為負數; N=0 表示運算的結果為正數或零; |
Z |
Z=1 表示運算的結果為零; Z=0 表示運算的結果為非零; |
C |
可以有4種方法設置C的值: ① 加法運算(包括比較指令CMN): C=1當運算結果產生了進位時(無符號數溢出); C=0當運算結果沒有產生了進位時(無符號數溢出) ② 減法運算(包括比較指令CMP):當運算時產生了借位(無符號數溢出) C=0否則C=1。 ③ 對于包含移位操作的非加/減運算指令,C為移出值的最后一位。 ④ 對于其他的非加/減運算指令,C的值通常不改變。 |
V |
可以有2種方法設置V的值: ① 對于加/減法運算指令,當操作數和運算結果為二進制的補碼表示的帶符號數時,V=1表示符號位溢出。 ② 對于其他的非加/減運算指令,V的值通常不改變。 |
Q |
在ARM v5及以上版本的E系列處理器中,用Q標志位指示增強的DSP運算指令是否發生了溢出。在其他版本的處理器中,Q標志位無定義。 |
備注 |
N、Z、C、V均為條件碼標志位。它們的內容可被算術或邏輯運算的結果所改變,并且可以決定某條指令是否被執行。在ARM狀態下,絕大多數的指令都是有條件執行的。在Thumb狀態下,僅有分支指令是有條件執行的。 |
二、 ARM條件碼
操作碼 |
條件碼助記符
|
標志 |
含義 |
|
0000 |
EQ |
EQual |
Z=1 |
相等 |
0001 |
NE |
(Not Equal) |
Z=0 |
不相等 |
0010 |
CS/HS |
(C Set/Higher or Same) |
C=1 |
無符號數大于或等于 |
0011 |
CC/LO |
(C Clear/LOwer) |
C=0 |
無符號數小于 |
0100 |
MI |
(MInus) |
N=1 |
負數 |
0101 |
PL |
(PLus) |
N=0 |
正數或零 |
0110 |
VS |
(V Set) |
V=1 |
溢出 |
0111 |
VC |
(V Clear) |
V=0 |
沒有溢出 |
1000 |
HI |
(HIgher) |
C=1,Z=0 |
無符號數大于 |
1001 |
LS |
(Lower or Same) |
C=0,Z=1 |
無符號數小于或等于 |
1010 |
GE |
(Greater or Equal) |
N=V |
有符號數大于或等于 |
1011 |
LT |
(Less Than) |
N!=V |
有符號數小于 |
1100 |
GT |
(Greater Than) |
Z=0,N=V |
有符號數大于 |
1101 |
LE |
(Less or Equal) |
Z=1,N!=V |
有符號數小于或等于 |
1110 |
AL |
|
任何 |
無條件執行(默認) |
1111 |
NV |
|
任何 |
從不執行 |
附:節選自ARM TOOLS 的ARM條件碼
{cond} Suffix |
Tested Status Flags |
Description |
EQ |
Z set |
equal |
NE |
Z clear |
not equal |
CS/HS |
C set |
unsigned higher or same |
CC/LO |
C clear |
unsigned lower |
MI |
N set |
negative |
PL |
N clear |
positive or zero |
VS |
V set |
overflow |
VC |
V clear |
no overflow |
HI |
C set and Z clear |
unsigned higher |
LS |
C clear or Z set |
unsigned lower or same |
GE |
N equals V |
signed greater or equal |
LT |
N not equal to V |
signed less than |
GT |
Z clear AND (N equals V) |
signed greater than |
LE |
Z set OR (N not equal to V) |
signed less than or equal |
AL |
(ignored) |
always (usually omitted) |
Examples:
CMP R5,#10 // compare R5 with 10
BHI lab1 // branch to lab1 if value in R5 is higher than 10
:
lab1:
TST R5,#10 // test content of R5 against 10
ADDEQ R6,#40 // add 40 to R6 if R5 contains 10
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.5pt; mso-bidi-font-size:11.0pt; font-family:等線; mso-ascii-font-family:等線; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:等線; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:等線; mso-hansi-theme-font:minor-latin; mso-font-kerning:1.0pt;} table.MsoTableGrid {mso-style-name:網格型; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-priority:39; mso-style-unhide:no; border:solid windowtext 1.0pt; mso-border-alt:solid windowtext .5pt; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-border-insideh:.5pt solid windowtext; mso-border-insidev:.5pt solid windowtext; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.5pt; mso-bidi-font-size:11.0pt; font-family:等線; mso-ascii-font-family:等線; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:等線; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:等線; mso-hansi-theme-font:minor-latin; mso-font-kerning:1.0pt;}