|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
匯編語言的困惑:好結構比差結構多占用4%空間 |
| 作者:ztb 欄目:單片機 |
3500行程序分作24個模塊文件占用空間3657字節(jié)。很少使用AJMP,Acall 把這24個文件和成一個大文件占用空間3529字節(jié)。很少使用Ljmp,Lcall 空間緊張是不是“復辟”的理由?特向高人請教! |
| 2樓: | >>參與討論 |
| 作者: isoar 于 2005/5/23 12:53:00 發(fā)布:
換個rom大點的,把精力浪費到這上面有必要這樣嗎? |
|
| 3樓: | >>參與討論 |
| 作者: ztb 于 2005/5/23 13:01:00 發(fā)布:
批量大的產(chǎn)品這點就是盈虧的分界線! |
|
| 4樓: | >>參與討論 |
| 作者: isoar 于 2005/5/23 13:16:00 發(fā)布:
如果能把程序給你減下來,省下的錢能分幾成出來嗎? 以前干過這樣的事,很不爽,幾乎就是體力勞動 給你個基本建議,就是能不要就盡量不要子程序,程序在實現(xiàn)功能的前提下,盡量不結構化(能跳就跳)這樣的程序還有附加的好處,就是除了編的人其它人都看不懂,甚至編的人過兩個月不找到自己的畫的那張思路圖搞都看不懂。榨干每一個字節(jié)的程序空間。 |
|
| 5樓: | >>參與討論 |
| 作者: puppyh 于 2005/5/23 14:17:00 發(fā)布:
好結構比差結構 頂樓的說: A: 3500行程序分作24個模塊文件占用空間3657字節(jié)。很少使用AJMP,Acall 把這24個文件和成一個大文件占用空間3529字節(jié)。很少使用Ljmp,Lcall 空間緊張是不是“復辟”的理由? B: 批量大的產(chǎn)品這點就是盈虧的分界線! --------------------------------------------------------------- 的確,容量的大小會涉及到盈虧的問題,但是好的結構的程序?qū)τ诋a(chǎn)品的開發(fā)周期以及系統(tǒng)的升級換代具有極大的優(yōu)勢,一個糟糕的結構對程序調(diào)試是不可想象,如果換了一個工程師接手這個項目,我相信那個工程師肯定不能很快的讀懂程序,也不會去讀,因為太難太繁了,那又要重頭再來一遍開發(fā)。對于公司來說損失太大。 |
|
| 6樓: | >>參與討論 |
| 作者: 肖洋 于 2005/5/23 15:01:00 發(fā)布:
你能找到介于那兩個大小之間的rom么 |
|
| 7樓: | >>參與討論 |
| 作者: ztb 于 2005/5/23 15:39:00 發(fā)布:
謝謝各位,可能我的用意沒有表達清楚。 我編程多年了,深知這里的利害。我也是在使用好結構調(diào)試完成后才作合并處理的。但是現(xiàn)在我是在尋求一個兩全其美的方案:如何設置A51 和 BL51 使得它們可以在保留結構化基礎上匯編的更聰明些。 我上面的例子是完全沒有改變代碼的條件下,僅僅是將原來的模塊文件合并到一起(當然必須整理一下偽指令)得出的。 我發(fā)現(xiàn),老版本的A51(V3.2)匯編時必須是子程序在前面才會自動使用ACALL,而新版本的A51(V7.10)只要是在同一個模塊中就可以,但是對于外部模塊就是近在咫尺也是LCALL?锤魑皇欠裼泻棉k法,因為也許就差那么百十個字節(jié)就要更換一個MPU品種,總是不甘心! RE isoar,結構好的程序一定比到處亂跳的程序更節(jié)約空間;如果一個好的算法那引起的變化也許會令人目瞪口呆! |
|
| 8樓: | >>參與討論 |
| 作者: enbed 于 2005/5/23 15:42:00 發(fā)布:
做這樣的活,太累了,換工作把. 當然,自己是老板,另當別論. 空間緊張不是給自己亂寫程序的理由啊. 每次同樣的功能,都要重寫一次程序,反而不合算的. |
|
| 9樓: | >>參與討論 |
| 作者: isoar 于 2005/5/23 18:04:00 發(fā)布:
我干過這樣的活,那只是我的心得并不是什么理論 那程序壓完了,我自己都不想再看,它只省下了一個唯一的優(yōu)點就是比原來小了進20%。 當時我的程序是在一個單獨的ASM文件里完成的,按住向下的鍵,都能把人按惡心了。這樣的程序絕對不能算是好程序。 |
|
| 10樓: | >>參與討論 |
| 作者: dengm 于 2005/5/23 18:24:00 發(fā)布:
好的數(shù)據(jù)結構才能節(jié)約空間。 |
|
| 11樓: | >>參與討論 |
| 作者: dong 于 2005/5/23 21:38:00 發(fā)布:
ajmp和ljmp都不用,用jmp。 讓編譯器去處理。 |
|
| 12樓: | >>參與討論 |
| 作者: hotpower 于 2005/5/23 23:11:00 發(fā)布:
不好說 如果需要,好結果也要拆成壞結構以壓縮空間... |
|
| 13樓: | >>參與討論 |
| 作者: conwh 于 2005/5/23 23:43:00 發(fā)布:
這都不是最主要的 關鍵是能夠?qū)崟r地完成當前的任務。ASM2000就支持模塊結構的ASM編譯器。 |
|
| 14樓: | >>參與討論 |
| 作者: 1121 于 2005/5/24 9:23:00 發(fā)布:
如果只是壓空間,不管結構和可讀性, 用匯編可節(jié)省出許多存儲空間的。 其實長改短跳轉也就省出一個字節(jié),如果在子程序上下工夫,就會省出很多空間。 |
|
| 15樓: | >>參與討論 |
| 作者: AIRWILL 于 2005/5/24 12:14:00 發(fā)布:
1121 有道理 在keilC 里,如果優(yōu)化選項成 將可能的共同代碼都變成子程序,的確能省出很多的空間,說不定,會比你的匯編還。 |
|
| 16樓: | >>參與討論 |
| 作者: ztb 于 2005/5/24 14:38:00 發(fā)布:
不要脫離實際,節(jié)省空間有時的卻很重要!問題是如何即省又好 我說的這個程序的統(tǒng)計數(shù)據(jù)如下:其結構到底是什么水平相信大家會有一個基本概念。 模塊化結構時 占用 3657字節(jié),其中: Call 131個 Jmp 72個 RET 105個 單一文件后代碼約3500行 合成單一文件后僅節(jié)約128字節(jié)但是可以使用低一檔的MPU,盡管查一檔僅差一元。 可與月產(chǎn)1萬臺聯(lián)系起來后就不可漠視了。 匯編語言是最低級的語句,從理論上講其它語句占用的空間只能是大于等于匯編語言。 根據(jù)我的知識在同等編程水平上(注意這個前提條件),匯編比C51 節(jié)約20%的空間。而不是反過來! 倒是聽說過一種FORTH語言可以比匯編還省空間,可我理解它的省并不是它跨越了匯編,它是省在了結構上。它使得編程者超越了同等水平這個前提。我看過一本書叫《FORTH思維方法》,它對FORTH的定義是“一種計算機語言和解決問題的哲理”可見已經(jīng)超越編程本身,大有“功夫在詩外”的味道?吹贸鲇肍ORTH思維方法編出的程序一定短小精悍,可惜“陽春白雪和者蓋寡”在計算機日益普及的今天它卻淡出了。 * - 本貼最后修改時間:2005-5-24 14:40:36 修改者:ztb |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |