匯編六、狀態(tài)寄存器

CPU內(nèi)部的寄存器中愉适,有一種特殊的寄存器犯助,這種寄存器在ARM中,被稱為狀態(tài)寄存器维咸,即CPSR(current program satus register)寄存器剂买;
CPSR和其他寄存器不一樣,其他寄存器是用來存放數(shù)據(jù)的癌蓖,都是一個寄存器具有一個含義雷恃。而CPSR寄存器是按位起作用的,也就是說费坊,它的每一位都具有專門的含義倒槐,用來記錄特定的信息;

注:CPSR寄存器是32位的附井;

  • CPSR的低8位(包括I讨越、F、T和M[4: 0])稱為控制位永毅,程序無法修改把跨,除非CPU運行于特權(quán)模式下,程序才能修改控制位沼死。
  • N着逐、Z、C意蛀、V均為條件標志位耸别。他們的內(nèi)容可以被算數(shù)運算(加減乘除)或邏輯運算(if判斷)的結(jié)果所修改,并且可以決定某條指令是否被執(zhí)行县钥。意義重大P憬恪!若贮!


N(Negative)標志

  • CPSR的第31位是N省有,符號標志位痒留。
  • 它記錄了某條指令執(zhí)行的結(jié)果是否為負;如果為負的蠢沿,則N=1伸头;如果為非負的,則N=0舷蟀;

把執(zhí)行結(jié)果當做有符號數(shù)據(jù)熊锭,那么N就是該數(shù)據(jù)的符號位(1代表負數(shù),0代表非負數(shù))

mov x0 #0x0fffffff
adds w0 w0 #0x1 
;命令執(zhí)行后雪侥,執(zhí)行結(jié)果為0x10000000, N = 1

Z(Zero)標志

  • CPSR的第30位是Z碗殷,0標志位;
  • 它記錄了某條指令執(zhí)行的結(jié)果是否為0速缨;如果為0锌妻,則Z=1;如果不為0旬牲,則Z=0仿粹;
mov x0 #0x0
adds w0 w0 #0x0
;命令執(zhí)行后,結(jié)果為0x0, Z=1

C(Carry)標志

  • CPSR的第29位是C原茅,進位標志吭历;一般情況下,進行無符號數(shù)的運算擂橘;
  • 加法運算:當運算結(jié)果產(chǎn)生了進位時(無符號數(shù)溢出)晌区,C=1;否則C=0通贞;
  • 減法運算(包括CMP):當運算結(jié)果產(chǎn)生了借位時(無符號數(shù)溢出)朗若,則C=0,否則C=1昌罩;

C標志用來記錄算數(shù)運算時哭懈,產(chǎn)生的無符號溢出的那一位;
加法運算:兩個8位數(shù)相加茎用,如果產(chǎn)生進位遣总,進位為1,則C為1轨功;如果沒有產(chǎn)生進位旭斥,進位則為0,則C為0夯辖;
減法運算:A減去B琉预,如果A比B小董饰,則要向前借一位蒿褂,則C為0圆米;如果A比B大,則不需要借位啄栓,則C為1娄帖;

進位

當兩個數(shù)相加的時候,有可能產(chǎn)生從最高位向前進一位昙楚;比如兩個32位數(shù)據(jù)0xaaaaaaaa+0xaaaaaaaa近速,將產(chǎn)生進位;由于這個進位值無法再32位中保存堪旧,我們就簡單的說削葱,這個進位值丟失了。其實在CPU運算中淳梦,并不會丟失這個運算值析砸,而是記錄咋一個特殊的寄存器位上,ARM就用C標志來記錄這個進位值爆袍。例如:

mov w0,#0xaaaaaaaa首繁;0xa 的二進制是 1010
adds w0,w0,w0; 執(zhí)行后相當于 1010 << 1 進位1(無符號溢出) 所以C標記為 1
adds w0,w0,w0陨囊; 執(zhí)行后相當于 0101 << 1 進位0(無符號沒溢出) 所以C標記 為 0
adds w0,w0,w0弦疮; 重復(fù)上面操作
adds w0,w0,w0

借位

當兩個數(shù)據(jù)做減法運算時,有可能向更高位借位蜘醋;比如兩個32位數(shù)據(jù)0x00000000-0x000000ff胁塞,將產(chǎn)生借位,借位后压语,相當于計算0x100000000-0x000000ff闲先,得到0xffffff01,由于借了一位无蜂,所以用C來標記借位伺糠,C=0。例如

mov w0,#0x0
subs w0,w0,#0xff
subs w0,w0,#0xff
subs w0,w0,#0xff

V(Overflow)標志

  • CPSR的28位V斥季,溢出標志位训桶;
  • 在進行有符號運算的時候,如果超出了機器所能標示的范圍酣倾,稱為溢出

正數(shù) + 正數(shù) = 負數(shù) => 溢出

9 + 5 = 14沒溢出01001 + 00101 = 01110
12 + 7 = 19 溢出 01100 + 00111 = 10011

負數(shù) + 負數(shù) = 正數(shù) => 溢出

(-9) + (-5) = (-14) 沒溢出 11001 + 11011 = 110010
(-12)+(-7)=-19 溢出 10100+11001=101101

正數(shù) + 負數(shù) !=> 溢出

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舵揭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子躁锡,更是在濱河造成了極大的恐慌午绳,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件映之,死亡現(xiàn)場離奇詭異拦焚,居然都是意外死亡蜡坊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門赎败,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秕衙,“玉大人,你說我怎么就攤上這事僵刮【萃” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵搞糕,是天一觀的道長勇吊。 經(jīng)常有香客問我,道長窍仰,這世上最難降的妖魔是什么萧福? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮辈赋,結(jié)果婚禮上鲫忍,老公的妹妹穿的比我還像新娘。我一直安慰自己钥屈,他們只是感情好悟民,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著篷就,像睡著了一般射亏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上竭业,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天智润,我揣著相機與錄音,去河邊找鬼未辆。 笑死窟绷,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的咐柜。 我是一名探鬼主播兼蜈,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拙友!你這毒婦竟也來了为狸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤遗契,失蹤者是張志新(化名)和其女友劉穎辐棒,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡漾根,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年泰涂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片立叛。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡负敏,死狀恐怖贡茅,靈堂內(nèi)的尸體忽然破棺而出秘蛇,到底是詐尸還是另有隱情,我是刑警寧澤顶考,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布赁还,位于F島的核電站,受9級特大地震影響驹沿,放射性物質(zhì)發(fā)生泄漏艘策。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一渊季、第九天 我趴在偏房一處隱蔽的房頂上張望朋蔫。 院中可真熱鬧,春花似錦却汉、人聲如沸驯妄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽青扔。三九已至,卻和暖如春翩伪,著一層夾襖步出監(jiān)牢的瞬間微猖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工缘屹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留凛剥,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓轻姿,卻偏偏與公主長得像当悔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子踢代,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容