在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM Cortex-M3 學(xué)習(xí)筆記(4-3)

            ARM Cortex-M3 學(xué)習(xí)筆記(4-3)

            作者: 時(shí)間:2016-11-20 來源:網(wǎng)絡(luò) 收藏
            最近在學(xué)ARM Cortex-M3,找了本號(hào)稱很經(jīng)典的書“An Definitive Guide to The ARM Cortex-M3”在看。這個(gè)系列學(xué)習(xí)筆記其實(shí)就是在學(xué)習(xí)這本書的過程中做的讀書筆記。

            數(shù)據(jù)處理指令

            Cortex-M3支持的數(shù)據(jù)處理指令非常多,這里就撿重要的、常用的來介紹。

            本文引用地址:http://www.biyoush.com/article/201611/318831.htm

            四則運(yùn)算指令

            基本的加、減法運(yùn)算有四條指令,分別是ADD、SUB、ADC、SBC

            ADD Rd,Rn, Rm ; Rd = Rn+Rm

            ADD Rd,Rm ; Rd += Rm

            ADD Rd,#imm ; Rd += imm

            ADC Rd,Rn, Rm ; Rd = Rn+Rm+C

            ADC Rd,Rm ; Rd += Rm+C

            ADC Rd,#imm ; Rd += imm+C

            SUB Rd,Rn ; Rd -= Rn

            SUB Rd,Rn, #imm3 ; Rd = Rn-imm3

            SUB Rd,#imm8 ; Rd -= imm8

            SUB Rd,Rn, Rm ; Rd = Rm-Rm

            SBC Rd,Rm ; Rd -= Rm+C

            SBC.W Rd,Rn, #imm12 ; Rd = Rn-imm12-C

            SBC.W Rd,Rn, Rm ; Rd = Rn-Rm-C

            除此之外,還有反向減法指令RSB:

            RSB.W Rd,Rn, #imm12 ; Rd = imm12-Rn

            RSB.W Rd,Rn, Rm ; Rd = Rm-Rn

            乘、除法指令包括 MUL、UDIV/SDIV 等。

            MUL Rd,Rm ; Rd *= Rm

            MUL.W Rd,Rn, Rm ; Rd = Rn*Rm

            UDIV Rd,Rn, Rm ; Rd = Rn/Rm (無符號(hào)除法)

            SDIV Rd,Rn, Rm ; Rd = Rn/Rm (帶符號(hào)除法)

            一條指令可以實(shí)現(xiàn)乘加運(yùn)算(通常只在DSP中才有):

            MLA Rd, Rm, Rn, Ra ; Rd = Ra+Rm*Rn

            MLS Rd, Rm, Rn, Ra ; Rd = Ra-Rm*Rn

            還能進(jìn)行32位乘32位的乘法運(yùn)算(結(jié)果為64位):

            SMULL RL, RH, Rm, Rn ;[RH:RL]= Rm*Rn,帶符號(hào)的64位乘法

            SMLAL RL, RH, Rm, Rn ;[RH:RL]+= Rm*Rn,帶符號(hào)的64位乘法

            UMULL RL, RH, Rm, Rn ;[RH:RL]= Rm*Rn,無符號(hào)的64位乘法

            SMLAL RL, RH, Rm, Rn ;[RH:RL]+= Rm*Rn,無符號(hào)的64位乘法

            由于有了這些指令,Cortex-M3具有了相當(dāng)?shù)挠?jì)算能力,可以采用Cortex-M3代替曾經(jīng)只能用DSP才能完成的計(jì)算。

            邏輯運(yùn)算相關(guān)的指令也很多,常用的包括AND,ORR, BIC(位段清零), ORN(按位或反碼), EOR(異或),LSL(邏輯左移), LSR(邏輯右移), ASR(算數(shù)右移), ROR(圓周右移), RRX(帶進(jìn)位右移一位)

            ;按位與

            AND Rd, Rn ; Rd &= Rn

            AND.W Rd, Rn, #imm12 ; Rd = Rn & imm12

            AND.W Rd, Rm, Rn ; Rd = Rm & Rn

            ;按位或

            ORR Rd, Rn ; Rd |= Rn

            ORR.W Rd, Rn, #imm12 ; Rd = Rn | imm12

            ORR.W Rd, Rm, Rn ; Rd = Rm | Rn

            ;按位清零

            BIC Rd, Rn ; Rd &= ~Rn

            BIC.W Rd, Rn, #imm12 ; Rd = Rn & ~imm12

            BIC.W Rd, Rm, Rn ; Rd = Rm & ~Rn

            ;按位或反

            ORN.W Rd, Rn, #imm12 ; Rd = Rn | ~imm12

            ORN.W Rd, Rm, Rn ; Rd = Rm | ~Rn

            ;按位異或

            EOR Rd, Rn ; Rd ^= Rn

            EOR.W Rd, Rn, #imm12 ; Rd = Rn ^ imm12

            EOR.W Rd, Rm, Rn ; Rd = Rm ^ Rn

            ;邏輯左移

            LSL Rd, Rn, #imm5 ; Rd = Rn<

            LSL Rd, Rn ; Rd <<= Rn

            LSL.W Rd, Rm, Rn ; Rd = Rm<

            ;邏輯右移

            LSR Rd, Rn, #imm5 ; Rd = Rn>>imm5

            LSR Rd, Rn ; Rd >>= Rn

            LSR.W Rd, Rm, Rn ; Rd = Rm>>Rn

            ;算術(shù)右移

            ASR Rd, Rn, #imm5 ; Rd = Rn>> imm5

            ASR Rd, Rn ; Rd =>> Rn

            ASR.W Rd, Rm, Rn ; Rd = Rm>>Rn

            ;循環(huán)右移

            ROR Rd, Rn ;

            ROR.W Rd, Rm, Rn ;

            符號(hào)擴(kuò)展指令

            SXTB Rd, Rm ; Rd = Rm的帶符號(hào)擴(kuò)展,把帶符號(hào)字節(jié)整數(shù)擴(kuò)展到32位

            SXTH Rd, Rm ; Rd = Rm的帶符號(hào)擴(kuò)展,把帶符號(hào)半字整數(shù)擴(kuò)展到32位

            字節(jié)序反轉(zhuǎn)指令

            REV.W Rd, Rn; 在字中反轉(zhuǎn)字節(jié)序

            REV16.W Rd, Rn; 在高低半字中反轉(zhuǎn)字節(jié)序

            REVSH.W; 在低半字中反轉(zhuǎn)字節(jié)序,并做帶符號(hào)擴(kuò)展

            其他計(jì)算類指令

            帶符號(hào)擴(kuò)展指令:

            SXTB Rd, Rm ; Rd = Rm的帶符號(hào)擴(kuò)展

            SXTH Rd, Rm ; Rd = Rm的帶符號(hào)擴(kuò)展

            數(shù)據(jù)序翻轉(zhuǎn)指令:

            REV.W Rd, Rn ;在字中反轉(zhuǎn)字節(jié)序

            REV16.W Rd, Rn ;在高低半字中反轉(zhuǎn)字節(jié)序

            REVSH.W ; 在低半字中反轉(zhuǎn)字節(jié)序,并做帶符號(hào)擴(kuò)展

            飽和運(yùn)算

            飽和運(yùn)算指令在其他單片機(jī)中很少見。這類指令的初衷非常好,但是C語言并不直接支持這類運(yùn)算,要在C程序中使用要么采用內(nèi)聯(lián)匯編要么就要將其封裝成個(gè)函數(shù),都不是很方便。這可能會(huì)限制這類指令的使用。關(guān)于飽和運(yùn)算指令的作用,可以用下圖來形象的展示:

            圖 1 飽和運(yùn)算指令的作用

            下面是相關(guān)指令的用法:

            SSAT.W Rd, #imm5, Rn, {,shift}; 以帶符號(hào)數(shù)的邊界進(jìn)行飽和運(yùn)算(交流)

            USAT.W Rd, #imm5, Rn, {,shift}; 以無符號(hào)數(shù)的邊界進(jìn)行飽和運(yùn)算(帶紋波的直流)



            關(guān)鍵詞: ARMCortex-M

            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉