国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

介紹一種即省時(shí)又節(jié)約資源的乘除法算法

0BFC_eet_china ? 來(lái)源:未知 ? 作者:李倩 ? 2018-05-31 08:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

目前單片機(jī)的市場(chǎng)競(jìng)爭(zhēng)很激烈,許多應(yīng)用出于性價(jià)比的考慮,選擇使用程序存儲(chǔ)空間較?。ㄈ?K,2K)的小資源8位MCU芯片進(jìn)行開(kāi)發(fā)。一般情況下,這類MCU沒(méi)有硬件乘法、除法指令,在程序必須使用乘除法運(yùn)算時(shí),如果單純依靠編譯器調(diào)用內(nèi)部函數(shù)庫(kù)來(lái)實(shí)現(xiàn),常常會(huì)有代碼量偏大、執(zhí)行效率偏低的缺點(diǎn)。

上海晟矽微電子推出的MC30、MC32系列MCU,采用了RISC架構(gòu),在小資源8位MCU領(lǐng)域有廣大的用戶群和廣泛的應(yīng)用,本文就以晟矽微電的這兩個(gè)系列產(chǎn)品的指令集為例,結(jié)合匯編與C編譯平臺(tái),給大家介紹一種即省時(shí)又節(jié)約資源的乘除法算法。

乘法篇

單片機(jī)中的乘法是二進(jìn)制的乘法,也就是把乘數(shù)的各個(gè)位與被乘數(shù)相乘,然后再相加得出,因?yàn)槌藬?shù)和被乘數(shù)都是二進(jìn)制,所以實(shí)際編程時(shí)每一步的乘法可以用移位實(shí)現(xiàn)。

例如:乘數(shù)R3=01101101,被乘數(shù)R4=11000101,乘積R1R0。步驟如下

1、清空乘積R1R0;

2、乘數(shù)的第0位是1,那被乘數(shù)R4需要乘上二進(jìn)制數(shù)1,也就是左移0位,加到R1R0里;

3、乘數(shù)的第1位是0,忽略;

4、乘數(shù)的第2位是1,那被乘數(shù)R4需要乘上二進(jìn)制數(shù)100,也就是左移2位,加到R1R0里;

5、乘數(shù)的第3位是1,那被乘數(shù)R4需要乘上二進(jìn)制數(shù)1000,也就是左移3位,加到R1R0里;

6、乘數(shù)的第4位是0,忽略;

7、乘數(shù)的第5位是1,那被乘數(shù)R4需要乘上二進(jìn)制數(shù)100000,也就是左移5位,加到R1R0里;

8、乘數(shù)的第6位是1,那被乘數(shù)R4需要乘上二進(jìn)制數(shù)1000000,也就是左移6位,加到R1R0里;

9、乘數(shù)的第7位是0,忽略;

10、這時(shí)候R1R0里的值就是最后的乘積,至此算法完成。

以上例子運(yùn)算結(jié)果:

R1R0 = R3 * R4= (R4<<6)+(R4<<5)+(R4<<3)+(R4<<2)+R4 = 101001111100001

實(shí)際運(yùn)算流程圖見(jiàn)圖1.1。

圖1.1 匯編乘法運(yùn)算流程圖

在實(shí)際的程序設(shè)計(jì)過(guò)程中,程序優(yōu)化有兩個(gè)目標(biāo),提高程序運(yùn)行效率,和減少代碼量。我們來(lái)看下本文提供的匯編算法和普通C語(yǔ)言編程的效率和代碼量對(duì)比。

表1.1是程序運(yùn)行效率的對(duì)比數(shù)據(jù)(可能會(huì)有小的偏差),很明顯匯編編譯出來(lái)的運(yùn)行時(shí)間要比C語(yǔ)言減少很多。

匯編(時(shí)鐘周期) C語(yǔ)言(時(shí)鐘周期)
8*8位乘法 79-87 184-190
16*8位乘法 201-210 362-388
16*16位乘法 234-379 396-468

表1.1 乘法運(yùn)算時(shí)鐘周期對(duì)比表

表1.2是程序代碼量的對(duì)比數(shù)據(jù)(可能會(huì)有小的偏差),匯編占用的程序空間也要比C語(yǔ)言小很多。

匯編(Byte C語(yǔ)言(Byte)
8*8位乘法 15 34
16*8位乘法 19 96
16*16位乘法 31 96

表1.2 乘法運(yùn)算ROM空間使用情況對(duì)比表

綜上兩點(diǎn),本文介紹的乘法算法各方面使用情況都要比C編譯好很多。如果大家在使用過(guò)程中,原有的程序不能滿足應(yīng)用需求,例如遇到程序空間不夠或者運(yùn)行時(shí)間太久等問(wèn)題,都可以按照以上方式進(jìn)行優(yōu)化。匯編語(yǔ)言最接近機(jī)器語(yǔ)言的。在匯編語(yǔ)言中可以直接操作寄存器,調(diào)整指令執(zhí)行順序。由于匯編語(yǔ)言直接面對(duì)硬件平臺(tái),而不同的硬件平臺(tái)的指令集及指令周期均有較大差異,這樣會(huì)對(duì)程序的移植和維護(hù)造成一定的不便,所以我們針對(duì)精簡(jiǎn)指令集做了乘法運(yùn)算的例程,便于大家的移植和理解。

除法篇

單片機(jī)中的除法也是二進(jìn)制的除法,和現(xiàn)實(shí)中數(shù)學(xué)的除法類似,是從被除數(shù)的高位開(kāi)始,按位對(duì)除數(shù)進(jìn)行相處取余的運(yùn)算,得出的余數(shù)再和之后的被除數(shù)一起再進(jìn)行新的相除取余的運(yùn)算,直到除不盡為止,因?yàn)閱纹瑱C(jī)中的除法是二進(jìn)制的,每個(gè)步驟除出來(lái)的商最大只有1,所以我們實(shí)際編程時(shí)可以把每一步的除法看作減法運(yùn)算。

例如:被除數(shù)R3R4=1100110001101101,除數(shù)R5=11000101,商R1R0,余數(shù)R2。步驟如下

1、清空商R1R0,余數(shù)R2;

2、被除數(shù)放開(kāi)最高位,第15位,為1,1比除數(shù)小,商為0,余數(shù)R2為1;

3、上一步余數(shù)并上被除數(shù)次高位,第14位,得11,11仍然比除數(shù)小,商為0,余數(shù)R2為11

4、直到放開(kāi)第8位后,得11001100,比除數(shù)大,商得1,余數(shù)R2為111;

5、上一步余數(shù)并上被除數(shù)第7位,得1110,沒(méi)有除數(shù)大,商為0,余數(shù)R2為1110;

6、上一步余數(shù)并上被除數(shù)第6位,得11101,沒(méi)有除數(shù)大,商為0,余數(shù)R2為11101;

7、按照以上步驟,直到放開(kāi)了被除數(shù)得第3位,得11101101,比除數(shù)大,商為1,余數(shù)R2為101000;

8、上一步余數(shù)并上被除數(shù)第2位,得1010001,沒(méi)有除數(shù)大,商為0,余數(shù)R2為1010001;

9、上一步余數(shù)并上被除數(shù)第1位,得10100010,沒(méi)有除數(shù)大,商為0,余數(shù)R2為10100010;

10、上一步余數(shù)并上被除數(shù)第0位,得101000101,比除數(shù)大,商為1,余數(shù)R2為10000000;

11、然后把以上所有步驟中得商從左至右依次排列就是最后的商100001001,余數(shù)為最后算得的余數(shù)10000000。

以上例子運(yùn)算結(jié)果 R1R0 = R3R4 / R5 = 100001001

R2 = R3R4 % R5 = 10000000

實(shí)際運(yùn)算流程圖見(jiàn)圖2.1。

圖2.1 匯編除法運(yùn)算流程圖

除法運(yùn)算的效率,代碼量見(jiàn)以下表格

表1.1是程序運(yùn)行效率和代碼量的對(duì)比數(shù)據(jù)(可能會(huì)有小的偏差),很明顯本文提供的匯編算法要優(yōu)化的很多。

16/8位除法 匯編 C語(yǔ)言
時(shí)鐘周期 287-321 740-804
使用空間(Byte) 35 142

表2.1 除法運(yùn)算時(shí)鐘周期對(duì)比表

所以對(duì)于除法運(yùn)算,本文提供的方法也是相對(duì)較優(yōu)的。

以下是針對(duì)精簡(jiǎn)指令集做的除法運(yùn)算,16/8位的例程,便于大家的移植和理解。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6076

    文章

    45495

    瀏覽量

    670400
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    147

    文章

    18925

    瀏覽量

    398244
  • 編程
    +關(guān)注

    關(guān)注

    90

    文章

    3716

    瀏覽量

    97191

原文標(biāo)題:針對(duì)小容量單片機(jī)程序優(yōu)化方式--乘除法篇

文章出處:【微信號(hào):eet-china,微信公眾號(hào):電子工程專輯】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    e203乘除法模塊(e203_exu_alu_muldiv.v)中的back2back和special case信號(hào)的含義

    首先我們知道,對(duì)于e203的乘除法器,為了實(shí)現(xiàn)低功耗,低面積、高資源利用率,乘除法過(guò)程復(fù)用了alu數(shù)據(jù)通路,沒(méi)有設(shè)計(jì)單獨(dú)的乘除法器。 其中乘法采用基4booth編碼得到部分積,并通過(guò)移
    發(fā)表于 10-24 06:37

    如何對(duì)蜂鳥(niǎo)e203內(nèi)核乘除法器進(jìn)行優(yōu)化

    蜂鳥(niǎo)E203是款基于RISC-V指令集的多核處理器,內(nèi)置了乘法和除法運(yùn)算單元,這些運(yùn)算單元的性能直接影響到整個(gè)處理器的性能表現(xiàn)。因此,優(yōu)化乘除法器是提高整個(gè)處理器性能的重要手段之。
    發(fā)表于 10-24 06:47

    個(gè)提升蜂鳥(niǎo)E203性能的方法:乘除法器優(yōu)化

    蜂鳥(niǎo)E203內(nèi)核內(nèi)建多周期硬件乘除法器 MDV 模塊只進(jìn)行運(yùn)算控制,并沒(méi)有自己的加法器 加法器與其他的ALU子單元復(fù)用共享的運(yùn)算數(shù)據(jù)通路,硬件實(shí)現(xiàn)非常節(jié)省面積,是一種相當(dāng)?shù)凸牡膶?shí)現(xiàn)方式,但
    發(fā)表于 10-27 07:16

    乘除法運(yùn)算

    乘除法運(yùn)算本應(yīng)用例的目的在于提供乘、除運(yùn)算的函數(shù)及介紹乘除運(yùn)算在SPMC75F2413A中的使用。應(yīng)用例提供有符號(hào)和無(wú)符號(hào)數(shù)的乘除,其中包括32-Bit/16-Bit、16-Bit/8
    發(fā)表于 09-21 09:26

    整數(shù)乘除法與位運(yùn)算的效率對(duì)比分析哪個(gè)好

    - 例程2,ADC濾波算法04 - 總結(jié)1us的誤差,足矣改變這個(gè)世界 ————CSDN根號(hào)301 - 為什么整數(shù)位移比乘除法高效??首先,整數(shù)位運(yùn)算要比乘除法要高效。如果學(xué)過(guò)計(jì)算機(jī)組成...
    發(fā)表于 12-24 07:33

    RISC有沒(méi)有乘除法指令呢?

    RISC有沒(méi)有乘除法指令呢?
    發(fā)表于 02-27 13:59

    乘除法和開(kāi)方運(yùn)算的FPGA串行實(shí)現(xiàn)

    高精度的乘除法和開(kāi)方等數(shù)學(xué)運(yùn)算在FPGA實(shí)現(xiàn)中往往要消耗大量專用乘法器和邏輯資源。在資源敏感而計(jì)算時(shí)延要求較低的應(yīng)用中,以處理時(shí)間換取資源的串行運(yùn)算方法具有廣泛的應(yīng)
    發(fā)表于 07-28 18:05 ?37次下載

    乘除法電路

    乘除法電路 圖5.4-21是乘除法運(yùn)算實(shí)用電路之。 1、A
    發(fā)表于 04-26 16:11 ?1.7w次閱讀
    <b class='flag-5'>乘除法</b>電路

    單片機(jī)浮點(diǎn)數(shù)的快速除法

    介紹一種在 8096 /96 系列單片機(jī)上實(shí)現(xiàn)的單精度 浮點(diǎn)數(shù) 快速除法。該算法采用了預(yù)估修正的數(shù)值計(jì)算方法,并充分利用了16 位CPU
    發(fā)表于 06-03 16:47 ?93次下載
    單片機(jī)浮點(diǎn)數(shù)的快速<b class='flag-5'>除法</b>

    一種低硬件資源消耗快速SVPWM算法

    一種低硬件資源消耗快速SVPWM算法_齊昕
    發(fā)表于 01-07 17:16 ?0次下載

    基于delta碼的乘除法運(yùn)算錯(cuò)誤檢測(cè)改進(jìn)算法

    為確保安全苛求系統(tǒng)中程序執(zhí)行的正確性,研究人員將差錯(cuò)控制理論用于對(duì)計(jì)算機(jī)指令進(jìn)行編碼,但由于編碼大多涉及模運(yùn)算,導(dǎo)致復(fù)雜度大量增加,應(yīng)用于實(shí)時(shí)系統(tǒng)有困難。針對(duì)復(fù)雜度問(wèn)題對(duì)delta碼的乘除法運(yùn)算算法
    發(fā)表于 12-04 16:44 ?0次下載

    基于StratixⅡEP2S30484C5芯片的乘除法和開(kāi)方運(yùn)算算法的實(shí)現(xiàn)

    高、資源敏感而計(jì)算時(shí)延要求并不高,這時(shí)我們需要一種保證計(jì)算正確且資源開(kāi)銷最低的FPGA實(shí)現(xiàn)方法,本文給出了實(shí)現(xiàn)乘除法、開(kāi)方運(yùn)算的FPGA串行實(shí)現(xiàn)算法
    發(fā)表于 07-29 17:48 ?1897次閱讀
    基于StratixⅡEP2S30484C5芯片的<b class='flag-5'>乘除法</b>和開(kāi)方運(yùn)算<b class='flag-5'>算法</b>的實(shí)現(xiàn)

    一種節(jié)約內(nèi)存的增量更新算法

    針對(duì) bsdiff算法在嵌入式設(shè)備固件更新中構(gòu)建新版本固件時(shí)內(nèi)存消耗大的問(wèn)題,提岀一種節(jié)約內(nèi)存的增量更新算法。利用改進(jìn)的 bsdiff算法
    發(fā)表于 03-19 15:57 ?22次下載
    <b class='flag-5'>一種</b><b class='flag-5'>節(jié)約</b>內(nèi)存的增量更新<b class='flag-5'>算法</b>

    C語(yǔ)言如何用移位來(lái)解決乘除法問(wèn)題

    調(diào)用乘除法子程序生成的代碼效率高。實(shí)際上,只要是乘以或除以個(gè)整數(shù),均可以想辦法用移位的方法得到結(jié)果,如: a =a* 9 可以改為: a =(a 3 )+a 采用運(yùn)算量更小的表達(dá)式替換原來(lái)的表達(dá)式
    的頭像 發(fā)表于 11-21 11:25 ?1932次閱讀

    一種使用fifo節(jié)約資源降低功耗的設(shè)計(jì)方法

    本案例中,我們講解一種使用fifo節(jié)約資源,降低功耗的設(shè)計(jì)。
    的頭像 發(fā)表于 12-15 16:34 ?1483次閱讀
    <b class='flag-5'>一種</b>使用fifo<b class='flag-5'>節(jié)約</b><b class='flag-5'>資源</b>降低功耗的設(shè)計(jì)方法