色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

介紹一種即省時又節約資源的乘除法算法

0BFC_eet_china ? 來源:未知 ? 作者:李倩 ? 2018-05-31 08:51 ? 次閱讀

目前單片機的市場競爭很激烈,許多應用出于性價比的考慮,選擇使用程序存儲空間較小(如1K,2K)的小資源8位MCU芯片進行開發。一般情況下,這類MCU沒有硬件乘法、除法指令,在程序必須使用乘除法運算時,如果單純依靠編譯器調用內部函數庫來實現,常常會有代碼量偏大、執行效率偏低的缺點。

上海晟矽微電子推出的MC30、MC32系列MCU,采用了RISC架構,在小資源8位MCU領域有廣大的用戶群和廣泛的應用,本文就以晟矽微電的這兩個系列產品的指令集為例,結合匯編與C編譯平臺,給大家介紹一種即省時又節約資源的乘除法算法。

乘法篇

單片機中的乘法是二進制的乘法,也就是把乘數的各個位與被乘數相乘,然后再相加得出,因為乘數和被乘數都是二進制,所以實際編程時每一步的乘法可以用移位實現。

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

1、清空乘積R1R0;

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

3、乘數的第1位是0,忽略;

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

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

6、乘數的第4位是0,忽略;

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

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

9、乘數的第7位是0,忽略;

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

以上例子運算結果:

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

實際運算流程圖見圖1.1。

圖1.1 匯編乘法運算流程圖

在實際的程序設計過程中,程序優化有兩個目標,提高程序運行效率,和減少代碼量。我們來看下本文提供的匯編算法和普通C語言編程的效率和代碼量對比。

表1.1是程序運行效率的對比數據(可能會有小的偏差),很明顯匯編編譯出來的運行時間要比C語言減少很多。

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

表1.1 乘法運算時鐘周期對比表

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

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

表1.2 乘法運算ROM空間使用情況對比表

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

除法篇

單片機中的除法也是二進制的除法,和現實中數學的除法類似,是從被除數的高位開始,按位對除數進行相處取余的運算,得出的余數再和之后的被除數一起再進行新的相除取余的運算,直到除不盡為止,因為單片機中的除法是二進制的,每個步驟除出來的商最大只有1,所以我們實際編程時可以把每一步的除法看作減法運算。

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

1、清空商R1R0,余數R2;

2、被除數放開最高位,第15位,為1,1比除數小,商為0,余數R2為1;

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

4、直到放開第8位后,得11001100,比除數大,商得1,余數R2為111;

5、上一步余數并上被除數第7位,得1110,沒有除數大,商為0,余數R2為1110;

6、上一步余數并上被除數第6位,得11101,沒有除數大,商為0,余數R2為11101;

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

8、上一步余數并上被除數第2位,得1010001,沒有除數大,商為0,余數R2為1010001;

9、上一步余數并上被除數第1位,得10100010,沒有除數大,商為0,余數R2為10100010;

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

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

以上例子運算結果 R1R0 = R3R4 / R5 = 100001001

R2 = R3R4 % R5 = 10000000

實際運算流程圖見圖2.1。

圖2.1 匯編除法運算流程圖

除法運算的效率,代碼量見以下表格

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

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

表2.1 除法運算時鐘周期對比表

所以對于除法運算,本文提供的方法也是相對較優的。

以下是針對精簡指令集做的除法運算,16/8位的例程,便于大家的移植和理解。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6050

    文章

    44701

    瀏覽量

    641287
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17473

    瀏覽量

    354596
  • 編程
    +關注

    關注

    88

    文章

    3649

    瀏覽量

    94355

原文標題:針對小容量單片機程序優化方式--乘除法篇

文章出處:【微信號:eet-china,微信公眾號:電子工程專輯】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    乘除法運算

    乘除法運算本應用例的目的在于提供乘、除運算的函數及介紹乘除運算在SPMC75F2413A中的使用。應用例提供有符號和無符號數的乘除,其中包括32-Bit/16-Bit、16-Bit/8
    發表于 09-21 09:26

    霧盈FPGA筆記之(三十二)六位四則運算計算器(8)算法實現加減乘除

    用“+,-,*,/”這幾個符號,這樣寫起來很簡便,看起來也很簡潔,但是不好的是,綜合出乘法器和除法器,FPGA需要消耗很多的硬件資源,這樣的設計當然應該盡可能避免的。所以,我給大家介紹用小小的
    發表于 09-01 09:03

    介紹一種防止相位假信號的具體算法

    什么是S參數測量?S參數插補算法是什么?介紹一種防止級聯的S參數出現相位假信號的具體算法
    發表于 04-30 07:00

    整數乘除法與位運算的效率對比分析哪個好

    - 例程2,ADC濾波算法04 - 總結1us的誤差,足矣改變這個世界 ————CSDN根號301 - 為什么整數位移比乘除法高效??首先,整數位運算要比乘除法要高效。如果學過計算機組成...
    發表于 12-24 07:33

    RISC有沒有乘除法指令呢?

    RISC有沒有乘除法指令呢?
    發表于 02-27 13:59

    乘除法和開方運算的FPGA串行實現

    高精度的乘除法和開方等數學運算在FPGA實現中往往要消耗大量專用乘法器和邏輯資源。在資源敏感而計算時延要求較低的應用中,以處理時間換取資源的串行運算方法具有廣泛的應
    發表于 07-28 18:05 ?37次下載

    乘除法電路

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

    單片機浮點數的快速除法

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

    一種模擬除法器的設計及仿真驗證CMOS工藝

    模擬除法器是一種能實現兩個模擬量相除的電子器件。目前不僅應用于模擬運算方面,而且已擴展到無線通訊、電視廣播、人工神經網路、機器人控制技術等領域。此外,模擬除法器在模糊控制和測量儀表中也是非常重要的器件。
    發表于 09-19 15:14 ?3675次閱讀

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

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

    基于delta碼的乘除法運算錯誤檢測改進算法

    為確保安全苛求系統中程序執行的正確性,研究人員將差錯控制理論用于對計算機指令進行編碼,但由于編碼大多涉及模運算,導致復雜度大量增加,應用于實時系統有困難。針對復雜度問題對delta碼的乘除法運算算法
    發表于 12-04 16:44 ?0次下載

    基于StratixⅡEP2S30484C5芯片的乘除法和開方運算算法的實現

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

    一種節約內存的增量更新算法

    針對 bsdiff算法在嵌入式設備固件更新中構建新版本固件時內存消耗大的問題,提岀一種節約內存的增量更新算法。利用改進的 bsdiff算法
    發表于 03-19 15:57 ?22次下載
    <b class='flag-5'>一種</b><b class='flag-5'>節約</b>內存的增量更新<b class='flag-5'>算法</b>

    C語言如何用移位來解決乘除法問題

    調用乘除法子程序生成的代碼效率高。實際上,只要是乘以或除以個整數,均可以想辦法用移位的方法得到結果,如: a =a* 9 可以改為: a =(a 3 )+a 采用運算量更小的表達式替換原來的表達式
    的頭像 發表于 11-21 11:25 ?1229次閱讀

    一種使用fifo節約資源降低功耗的設計方法

    本案例中,我們講解一種使用fifo節約資源,降低功耗的設計。
    的頭像 發表于 12-15 16:34 ?797次閱讀
    <b class='flag-5'>一種</b>使用fifo<b class='flag-5'>節約</b><b class='flag-5'>資源</b>降低功耗的設計方法
    主站蜘蛛池模板: 蜜芽在线播放免费人成日韩视频 | 首页 国产 亚洲 中文字幕 | 国产免费人视频在线观看免费 | 色欲人妻无码AV精品一区二区 | 久久国产综合精品欧美 | 99久久久无码国产精品不卡按摩 | 国产高清视频在线观看不卡v | 国产福利不卡在线视频 | 精品一区二区三区AV天堂 | 国产美女久久久久久久久久久 | 799是什么意思网络用语 | 第一次玩老妇真实经历 | 20岁αsrian男同志免费 | 漂亮的保姆3集电影免费观看中文 | 国产99小视频| 老司机福利在视频在ae8 | 99热久久视频只有精品6 | 美女视频黄色的 | 精品国产中文字幕在线视频 | 91av电影在线观看 | 国产午夜精品不卡视频 | 狠狠色噜噜狠狠狠狠米奇777 | 在线看无码的免费网站 | 99久久久国产精品免费调教 | 在野外被男人躁了一夜动图 | 亚洲伊人情人综合网站 | xxxx免费观看 | 亚洲精品成人无码区一在线观看 | 国产亚洲精品久久久久久线投注 | 亚洲理论在线a中文字幕 | 国产成人免费a在线视频app | 竹菊精品久久久久久久99蜜桃 | 含羞草影院免费区 | 孕妇bbwbbwbbwbbw超清 | 免费在线观看a视频 | 果冻传媒在线完整免费播放 | 交换邻居波多野结衣中文字幕 | 亚洲精品无码不卡 | 亚洲AV久久久噜噜噜久久 | 蜜桃传媒星空传媒在线播放 | 51无码人妻精品1国产 |