新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 匯編程序模塊化設計

        匯編程序模塊化設計

        作者: 時間:2016-11-17 來源:網絡 收藏
        單片機程序設計雖然小,可能很多人并不去注意項目開發的一些方法,方案拿到手就開始寫,然后是想到什么地方,就寫到什么地方,思緒凌亂,要將項目按時完成倒是沒有問題,但是如果說后期的維護,修改等,就是噩夢了,更不用說讓別人來維護代碼了,因為自己看起來都吃力。

        本文引用地址:http://www.104case.com/article/201611/315475.htm

        單片機程序很容易寫,但是怎么寫的好確實需要經驗積累,技巧的積累。很多時就是一個新手和一個老手的區別所在。好的單片機程序要做到以下幾點:

        C語言的話還是有些書去介紹怎么設計程序,但是匯編的書籍除了介紹指令集,根本沒有去介紹匯編程序的一些設計思想,小技巧等。掌握一些技巧后,發現學習匯編其實并不難。

        可能學C語言的時候接觸過模塊化的概念,其實匯編也需要模塊化。代碼應該是一個 block 為單位的,例如C語言的函數,嚴格規定統一的“入口”“出口”,這樣的代碼讓人看起來清晰,代碼可靠,維護方便。模塊應該是一個獨立的整理,和外界的聯系只能夠通過模塊的入口和出口,少用或者不用全局變量

        目標:如果你的匯編寫的很像C 那么你就理解了什么叫模塊了。

        例如看下面的一個例子:

        (注釋:xxx表示一行或者多行代碼)

        -----------------------------------------------------程序塊一

        Label1 :

        xxxxxxx

        jbs flag 如果滿足條件

        Jmp Label2 則跳出程序塊一,繼續執行下面的程序

        Xxxxxxx

        -----------------------------------------------------程序塊二

        Label2 :

        Xxxxxxxx

        Lable3 :

        XXXXXX

        意圖很簡單,Label1 先執行一段程序,然后條件判斷跳轉到 Label2 。這樣寫無疑能完成程序需要的邏輯,但是這樣好不好?為什么?

        我們說,這樣處理是不好的,為什么?我們可以先看一個例子,如果程序塊一需要移動,那么看發生什么事情,事實上這是非常常見的

        -----------------------------------------------------程序塊二

        Label2 :

        Xxxxxxxx

        -----------------------------------------------------程序塊一

        Label1 :

        xxxxxxx

        jbs flag

        Jmp Label2

        Xxxxxxx

        Lable3 :

        XXXXXX

        看出沒有,邏輯變了!!!程序本來的意圖是跳出程序塊一,繼續執行下面的程序的,但是移動了之后發現程序塊一中的跳轉地址依然是跳到程序塊二的入口,很容易會形成一個死循環,違背的當初的意圖。當然有人肯定會說:“這很簡單啊,我修改一下”

        jbs flag

        Jmp Label3

        這樣程序不是一樣可以正常的跑嗎?對的,你沒有錯。但是問題是,你每移動一次程序塊,都在這里修改標號,工作量大,容易出錯,在實際維護程序中,簡直就是一場噩夢。

        這就是我今天想說的,就叫模塊間“耦合”。一個模塊和其他模塊發生了互聯關系,使得兩個程序都不能很好的獨立出來。

        怎么處理這個問題?看例子:

        -----------------------------------------------------程序塊一

        Label1 :

        xxxxxxx

        jbs flag

        Jmp Label1_end

        Xxxxxxx

        Label1_end:

        -----------------------------------------------------程序塊二

        Label2 :

        Xxxxxxxx

        這個程序只做了很小的修改, jmp 指令跳出的不是原來的 Label2,而修改為在原來的模塊一中的結尾處的 Label1_end 標號處。可以理解不?這樣程序塊一就完全的獨立起來了,他和程序中的其他模塊一點關系都沒有。如果我要移動一下:

        -----------------------------------------------------程序塊二

        Label2 :

        Xxxxxxxx

        -----------------------------------------------------程序塊一

        Label1 :

        xxxxxxx

        jbs flag

        Jmp Label1_end

        Xxxxxxx

        Label1_end:

        這次好多了,我們發現根本不需要修改代碼,原來的程序就運行的很好。或者這只是一個微不足道的小例子,但是我想說的是,從這個小例子中體驗到模塊化程序的重要性。當然了,這個是最基本的技巧。



        關鍵詞: 匯編程序模塊

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 辽宁省| 青浦区| 焉耆| 昭通市| 曲阳县| 谢通门县| 嘉祥县| 东乌| 突泉县| 苍梧县| 石嘴山市| 沧州市| 肇东市| 绥滨县| 滨州市| 湘阴县| 三明市| 滨海县| 清河县| 锦州市| 湘西| 新兴县| 漳浦县| 奎屯市| 莱阳市| 牙克石市| 武清区| 大荔县| 舒兰市| 雅安市| 伊宁市| 周宁县| 镇坪县| 微博| 赫章县| 科技| 南昌市| 娄底市| 通渭县| 民乐县| 武宁县|