全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2714
推到 Plurk!
推到 Facebook!

有關8051 的除法 問題

缺席
superstyle2
一般會員


發表:10
回覆:8
積分:3
註冊:2007-02-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-04-13 17:18:26 IP:210.68.xxx.xxx 訂閱
請問 各位高手

這邊有一個數列A:0~23
0~5 取0
6~11 取1
12~17 取2
18~23 取3

通常 我們只要 A / 6 就可以算出來了~但想說用的除法很慢 請問 一下 有更好的方法去做這件事情嗎???

如果組合語言 寫一個除法器的function 會比用c語言的除法 還來的快嗎??

感謝幫忙~~~

如果提議有不清楚 我再補充 謝謝~

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-04-14 01:33:36 IP:202.132.xxx.xxx 訂閱
*10923, 所得的商, 低16bit不要~~即為所求.
為什麼? 請你動動腦囉.
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
superstyle2
一般會員


發表:10
回覆:8
積分:3
註冊:2007-02-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-04-14 13:48:25 IP:210.68.xxx.xxx 訂閱
哈瞜 感謝你提供這個方式~

是把(A*10923) >> 16
會剛好0~5 乘完會小於65536 所以取到0
6~11 乘完 剛好介於 65536 跟 1048576 所以取到1

這樣算起還剛好會是對的

不過 我怎麼想 都不知道為什麼要乘10923 ????????

感謝 你的幫忙 謝謝了
handystudio
高階會員


發表:1
回覆:81
積分:106
註冊:2005-03-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-04-14 13:51:47 IP:202.39.xxx.xxx 訂閱
數列A:0~23 與 A/6 好像搭不起來耶, A/6 的A是數值,不是數列
===================引 用 superstyle2 文 章===================
請問 各位高手

這邊有一個數列A:0~23
0~5 取0
6~11 取1
12~17 取2
18~23 取3

通常 我們只要 A / 6 就可以算出來了~但想說用的除法很慢 請問 一下 有更好的方法去做這件事情嗎???

如果組合語言 寫一個除法器的function 會比用c語言的除法 還來的快嗎??

感謝幫忙~~~

如果提議有不清楚 我再補充 謝謝~
------
歡迎光臨 輕巧工作室
網站 http://www.handystudio.tw
控制電路板客製設計、製作交貨
8051專題製作/專題客製
superstyle2
一般會員


發表:10
回覆:8
積分:3
註冊:2007-02-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-04-14 14:01:56 IP:210.68.xxx.xxx 訂閱
A=0~23

A0 = 0/6 =0,A1 = 1/6=0.........A5 = 5/6=0

A6 = 6/6=1,A7 = 7/6=1.........A11 = 11/6=1
A12= 12/6=2 .........................................................................

拍謝 講的不清楚

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-04-14 15:58:45 IP:60.249.xxx.xxx 訂閱
提示 : 
1/6=X/65536 -> X=10922.67

===================引 用 superstyle2 文 章===================
哈瞜 感謝你提供這個方式~

是把(A*10923) >> 16
會剛好0~5 乘完會小於65536 所以取到0
6~11 乘完 剛好介於 65536 跟 1048576 所以取到1

這樣算起還剛好會是對的

不過 我怎麼想 都不知道為什麼要乘10923 ????????

感謝 你的幫忙 謝謝了
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
superstyle2
一般會員


發表:10
回覆:8
積分:3
註冊:2007-02-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-04-15 10:55:53 IP:210.68.xxx.xxx 訂閱
挖 懂了 感謝了 ~

不過 我可能又有一個問題想不怎通~

我依樣畫葫蘆~

那為什麼基底 變成256 就會在數字131 的時候 會出現不一樣的狀況呢?

1/6=X/256 X=42.67

把 (131 *43)>>8 = 22 不過 actual value : 21

代表說 我不能用256為basic
lwh
一般會員


發表:7
回覆:11
積分:3
註冊:2009-01-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2010-11-08 23:22:45 IP:115.82.xxx.xxx 訂閱
不用想太多, 如果除數跟被除數都是8位元無號數變數, c編譯器會自動幫你編成 cpu原有的8位元div opcode最佳化處理, 你可以觀察編譯後的LIST(.LST)檔案
編輯記錄
lwh 重新編輯於 2010-11-08 08:26:49, 註解 無‧
系統時間:2024-04-23 16:20:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!