《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 解決方案 > ARM匯編語(yǔ)言設(shè)置條件碼

ARM匯編語(yǔ)言設(shè)置條件碼

2017-06-22
關(guān)鍵詞: 匯編語(yǔ)言

如果需要,ARM的任何數(shù)據(jù)處理指令都能通過(guò)增加S操作碼來(lái)設(shè)置條件碼。對(duì)于比較、測(cè)試指令操作,其主要作用就是設(shè)置條件碼,因此可不用增加S操作碼,但對(duì)所有其他數(shù)據(jù)處理指令必須通過(guò)增加S操作碼來(lái)指明。例如,下面代碼完成2個(gè)數(shù)的64位加法,一個(gè)數(shù)存于[R1,R0],另一個(gè)數(shù)存于[R3,R2],用C條件碼標(biāo)志位存立即數(shù)進(jìn)位:

ADDS            R2,R2,R0                ;32位進(jìn)位輸出到C

ADC              R3,R3,R1                ;再加到高位字中

由于操作碼的S擴(kuò)展能控制指令是都修改條件碼,所以適合的時(shí)候,需要在指令序列中把條件碼保護(hù)起來(lái),如在中斷的情況下。

數(shù)據(jù)處理指令加了S后,算數(shù)操作根據(jù)算術(shù)運(yùn)算的結(jié)果設(shè)置所有標(biāo)志位。邏輯“或”傳送操作不產(chǎn)生有意義的C或V值,他們根據(jù)結(jié)果設(shè)置N和Z,保留V。

1)條件執(zhí)行

ARM指令集不同尋常的特征是每條指令都可以是條件執(zhí)行的。條件轉(zhuǎn)移是絕大多數(shù)指令集的標(biāo)準(zhǔn)特征,但ARM將條件執(zhí)行擴(kuò)展到所有指令,包括監(jiān)控調(diào)用和協(xié)處理器指令。條件域cond占據(jù)32位指令域的高四位,如圖所示。

條件域共有16個(gè)值,每個(gè)值都根據(jù)CPSR中的N、Z、C和V的標(biāo)志位的值來(lái)確定指令執(zhí)行還是跳過(guò)。

一條指令本來(lái)是用于跳過(guò)其后的幾條指令,但如果利用ARM指令集所有ARM指令都可執(zhí)行這一特點(diǎn),則給予指令后的ARM指令以相反的條件,轉(zhuǎn)移將被忽略。

例如:

       CMP       R0,#5

       BEQ       BYPASS                      ;如果R0≠5

       ADD       R1,R1,R0                ;則R1=R1+R0-R2

       SUB              R1,R1,R2                ;

BYPASS

這可替代為:

       CMP       R0,#5                        ;如果R0≠5

       ADDNE  R1,R1,R0                ;則R1=R1+R0-R2

       SUBNE   R1,R1,R2                ;

              …   

新的指令序列比原先的既短小又快速。如果被跳過(guò)的指令序列并不進(jìn)行復(fù)雜的操作,使用條件執(zhí)行都要比使用轉(zhuǎn)移好。因?yàn)锳RM轉(zhuǎn)移指令一般要用3個(gè)周期來(lái)執(zhí)行,所以上面例子中采用3條指令的方法。如果代碼充分優(yōu)化,那么是使用條件執(zhí)行還是轉(zhuǎn)移,需要根據(jù)代碼動(dòng)態(tài)行為的測(cè)量來(lái)決定。

有時(shí)巧妙地使用條件,可寫(xiě)出非常簡(jiǎn)練的代碼。例如:

;if((a==b)&&(c==d))e++

CMP       R0,R1

CMPEQ  R2,R3

ADDEQ  R4,R4,#4

注意:如果第一個(gè)比較發(fā)現(xiàn)操作數(shù)不同,則第二個(gè)比較指令和后面加1指令也將跳過(guò)。由于第二個(gè)比較指令使用了條件執(zhí)行,從而實(shí)現(xiàn)了if語(yǔ)句的邏輯“與”。


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:[email protected]