久久精品99久久_亚洲一区二区综合_狠狠色伊人亚洲综合成人_亚洲综合爱爱久久网

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當前位置:首頁 >> 技術中心 >> 單片機入門 >> C語言與匯編語言的區別

C語言與匯編語言的區別

關鍵字:C語言 匯編語言 單片機程序 作者:admin 來源:不詳 發布時間:2018-05-19  瀏覽:41

從事嵌入式系統開發多年,對于軟件方面,從初期的單片機匯編語言編程,到后來的C++界面程序編寫,已有相當多的經驗累積。正是有了多年的實戰經驗,對于匯編與高級語言在原理及應用等方面形成了自已的一些理解,也是我經常思考的問題,但一直沒有以書面的方式記錄下來,今天之所以寫下這些文字,正是想做一個歸納,日后也好參考。

其實,C語言與匯編語言的區別一直是程序員們津津樂道的話題。如果你問一個程序員這樣的問題,他也許會這么回答你:“C語言可讀性好,代碼便于維護,便于開發;匯編語言編寫的程序不容易看懂,可維護性不好,但是執行效率高。”這樣回答是沒有錯的,但只是一個概括,不夠深入。比方說,匯編語言為什么執行效率比C語言高呢?C語言的可讀性又好在哪里呢?匯編語言不同樣可以用注解來提高可讀性嗎?等等這些的問題。要真正能回答這些問題,不是一件簡單的事情,也不是三言兩語能解釋得清的,需要比較徹底地分析匯編與C的本質上的區別。

先說匯編,寫過匯編的程序員都知道,“匯編語言實質上機器語言的助記符。”這句話需要這樣來解析:1.CPU只能運行它所支持的指令集,而這些指令集當中的每天條指令都是一些二進制數的序列,也就是“0”和“1”的有序組合;2.“0”和“1”的組合不便于程序員的記憶因此有了“MOV A 0x40”等這樣的助記符,也就是說在程序員編寫程序的時候,用“MOV A 0x40”來代替一串“0”和“1”的序列,這樣一看就知道是吧“0x40”單元中的數據搬到累加器A當中來。而如果是用0”和“1”的序列,毫無特征,很難被程序員記住。這也是為什么要有匯編語言產生的原因了。

以上對匯編語言的解釋基本上就道出了匯編語言的本質,知道了匯編語言的本質,我們不難理解,匯編語言編譯成CPU可執行的機器語言其實只要做一個翻譯的動作就好了,因為,助記符與對應的二進制指令是一一對應的。進而,我們再來解釋為什么匯編語言會比C語言有更高的執行效率。

首先,我們要理解一點,類似于C的高級語言面對的對象是程序員,而不是CPU,為什么這樣說呢?原因非常簡單,CPU不認識C語言,CPU只認識以“0”“1”形式存在的指令。而C語言的所有語法以及它代碼組織形式都是有助于程序員編寫代碼的。所以,C語言編寫完程序后,需要通過編譯器將C語言編譯成與相應CPU指令集對應的機器語言。

問題來了,前面我們說過,匯編語言與機器語言是一一對應的。但是C語言呢?當然沒這么好事了。C語言的語法是固定的,C語言編寫的程序要編譯成CPU能讀懂的機器語言指令沒辦法一一對應,所以就需要有編譯規則了。比方說一個for循環會有若干條實現對應for循環功能的機器指令對應,而一個switch,也相應會有機器指令段代替。所以C語言最終要編譯機器代碼,必須要遵從許許多多的這樣的規則才行。

我試驗過,用C編寫一個簡單的程序,比方說只包含一個for循環,編譯出的代碼和用匯編寫的最優代碼幾乎是一樣。但代碼量一大,由于受制于規則(不受制也不行呀,否則編不出來),編出來的代碼與用匯編語言寫出來的代碼相比就走了不少“彎路”了。雖然說,現在的很多C編譯器在編譯的時候都會有優化,但是,不可能做得到效率上等同于與機器語言一一對應的匯編語言的效率。畢竟,匯編語言可以理解為直接就是面對CPU的,只不過是機器語言用助記符代替而矣。

以上只是兩種語言效率上區別的一個主要原因,其實,對于資源的利用上,匯編語言同樣有優勢。匯編是直接面對CPU的語言,只要是在指令集支持的范圍內,匯編語言可以直接而靈活地管理包括特殊功能寄存器、通用寄存器、存儲單元的每一個字節,甚至是每一個bit。C語言對內存的使用及管理功能也是很強大的,但畢竟還是受制于語法。

舉個最簡單的例子,C語言當中沒有對應三字節或是五字節的變量類型,要么int型,要么long型,所以每次申請必須是固定的字節數,勢必造成內存使用上的浪費。而大部份匯編語言根本沒有這樣的語法,在偽指令的幫助下(其實也只是提高可讀性),匯編語言程序可以使用任意字節數的變量,當然處理起來比C語言麻煩得多,最終還是一個字節一個字節地拼接處理,而用C語言寫程序就輕松了,不用管這些,最終編譯器會搞定嘛。而輕松的代價就是造成了浪費。而內存使用效率不高同時也會影響到整個程序的整體效率。

匯編的最后部份,來說明一下偽批令這個東西吧。一個不善于用偽指令寫匯編程序的程序員不是一個好的程序員,這就和寫C語言不用宏是一個道理。偽批令存在價值在于他提高了匯編語言的可讀性,同時也能簡化匯編語言的編程。比方說最通用的創建立即數名稱,而不是用二進制或十六進制數;創建數據表;ARM當中的創建全局及局部變量等。這個不多說了,針對于不同的MCU或CPU有不同的偽指令。

再來說說C吧,C語言豐富而實用的語句決定了C語言程序靈活性以及強大的代碼組織能力。利用C語言,我們可以很方便地編寫出龐大的工程,在版本管理工具的幫助下,可以很輕松地實現多人協作編程。特別是引入RT-OS以后,C語言的程序框架更加靈活了,添加功能(任務)更加輕松。因為,所有的任務的調控可以直接交給操作系統來做,而程序員需要做的是編寫任務(含一個或多個功能模塊)的內容,以及設置任務的優先級,堆棧數等等。而任務間的通信可以擺脫“全局變量”這個禍害,完全可以通過信號量、郵箱、隊列等形式來溝通。為什么說“全局變量”是禍害呢?單程序量不大的時候,“全局變量”可能是好東西,因為方便嘛,哪都能改它,哪都能讀它。

可是,一旦程序大了,源碼文件一多,如果都習慣用全局變量來傳遞及存貯共用量的話,災難就會降臨。你會看到數以千計的全局變量在各各函數間縱橫交錯,如果這些變量不是你創建的,你會很難知道它的作用,因為系統太大了,它出現的地方太多了,而且,像這樣的變量實在太多,你會因此而感到恐懼,相信很多有經驗的程序員都經歷過吧!然而,這將埋下系統崩潰級別的隱患。

因為,這些全局變量太多,而且出現在太多的地方,很難完全統計出哪些地方可能會修改它們,一量有遺漏,變量的值可能就會和我們想要的值有出入,后果非常嚴重。更有甚者,當全局變量是指向數組的指針或者是數組本身的時候。有的程序員可能對多得數不清的這些變量感到困惑,容易犯的一個錯誤是寫這些全局數組時沒有加以保護,經常都會寫出數組的范圍,而將其它無關的變量給莫名其妙地改了。導致的后果可能是出錯,也有可能是死機,而且,由于這種問題極其隱蔽,很難找出來。

所以,在大的系統當中,幸虧有了OS這種東西的存在,它不但能幫我們擺脫全局變量這個禍害,而幫助程序員更加方便地組織各個功能模塊。并且,讓每個任務單一化,進而降低了程序編寫的難度。而用匯編語言編寫較大的工程,是困難重重的事情。

首先,必須面對上面提到的全局變量的問題,另外還得面對其它的困難,比方說內存的使用。在C語言里,程序員只要申請各種類型的變量然后就可以使用了,而具體用的是哪個單元的空間,交給編譯器去管理就好了。而你用匯編語言寫程序的時候,必須要指明所用內存的地址,問題來了,程序員不得不對所有內存的使用了如指掌,因為所有內存單元的使用都必須體現出來,這也是匯編語言的特點。當程序量一旦大到某種呈度的時候,規劃這些內存的使用本身就是一個高難度的工作,因為同時你還得保證各個地方在使用它們的時候沒有沖突。真的很難,我是有體會的。這時候,我們再想象一下,如果程序太大,我們要幾個人來協作編寫的話,問題就更加復雜了,因為,沒有了編譯器的幫忙,程序員之間要協商好內存使用的規則,這太難了,因為面對它們的只不過是一些數量龐大的地址空間,光是劃分區域倒是簡單,但涉及到程序間的交互很大的麻煩就來了,每個程序員必須提供各自的變量接口,因為匯編的可讀性本來就差,這些接口包括了每一個可能共用的變量(在匯編中只是內存空間資源),以及說明它們的功能,這個工作量非常大,而且一旦做得不好,很容易出錯,出了錯還很難查。

用匯編編寫程序還有很多比C困難的地方,再舉一個簡單的例子。匯編語言是低級語言,是機器語言面向程序員的一個一對一的翻譯,所以對于程序員來說,它的功能不夠豐富。在C語言里寫一個(13200.68/98.56)*256.24的程序,可以直接就表示成"double a; a=(13200.68/98.56)*256.24;",而在匯編里就沒這么輕松了,匯編里面一般都沒有直接支持浮點運算的指令,通常情況下都是得專門編寫一個函數來做浮點運算。結果就是匯編程序編寫比C麻煩很多,而且還不直觀。另外,用匯編語言編寫程序對程序員的要求也更高,因為,程序員必須能撐握CPU或MCU的內存結構、總線結構、功能模塊、堆棧系統、中斷資源及機制等等,否則,是寫不下去的。

最后總結,C語言與匯編根本不是一碼事,怎么可能幾句話就能道出它們的區別呢?就目前的情形來說,由于IC工藝的成熟,MCU的存貯資源越來越便宜,工作頻率也越來越高,所以在資源利用率以及執行效率上沒有像以前要求那么高了。而且,實現的功能越來越強大,這些因素都助長了C以及C++在嵌入式開發當中地位越來越高。就連MCS-51的程序編寫也以C語言主導了,這還要歸功于KEIL這個強大且十分容易入手的工具。面向程序員的高級語言比面向CPU的匯編語言好用得,在硬件條件允許的情況下,程序員當然選擇用高級語言編程,不旦提高了編程效率,也提高了代碼的可維護性,并且十分有利于編寫大型的工程。看完全文了嗎?喜歡就一起來點個 贊 吧。

編輯:admin  最后修改時間:2018-05-19

聯系方式

0755-82591179

郵箱:ivy@yingtexin.net

地址:深圳市南山區桃源街道平山社區平山一路2號南山云谷創業園二期11棟410-411

Copyright © 2014-2026 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號-4

久久精品99久久_亚洲一区二区综合_狠狠色伊人亚洲综合成人_亚洲综合爱爱久久网
真人做人试看60分钟免费| 六月激情综合网| 亚洲77777| 久久9精品区-无套内射无码| 999在线观看视频| 成品人视频ww入口| 成人免费播放器| 和岳每晚弄的高潮嗷嗷叫视频| 400部精品国偷自产在线观看| 在线播放 亚洲| 久久视频免费在线| 福利视频一二区| 男人插女人视频在线观看| 国产精品成人久久电影| 女人和拘做爰正片视频| 91看片就是不一样| 欧美日韩一区二区三区69堂| 中文字幕亚洲影院| 免费看欧美一级片| 黄色av网址在线播放| 波多野结衣天堂| 三级av免费看| 久久成人福利视频| 日韩中文字幕二区| 国产无色aaa| 亚洲国产精品无码av| 国产午夜福利视频在线观看| 香港日本韩国三级网站| 好色先生视频污| 免费观看精品视频| 色网站在线视频| 国产男女免费视频| 91福利免费观看| 国产欧美日韩网站| av亚洲天堂网| 久久综合九色综合88i| 亚洲36d大奶网| 国产91沈先生在线播放| 美女少妇一区二区| aa视频在线播放| 天天久久综合网| 欧美 国产 日本| 成人短视频在线观看免费| 日韩无套无码精品| 欧妇女乱妇女乱视频| 亚洲欧美日本一区二区三区| 日韩伦理在线免费观看| 精产国品一二三区| 国产成人精品无码播放| 女人帮男人橹视频播放| 第一区免费在线观看| 99久久激情视频| www.亚洲成人网| 操人视频免费看| 中文字幕av不卡在线| 国产主播在线看| 少妇高潮喷水在线观看| 亚洲一区 在线播放| 两性午夜免费视频| 五月激情婷婷在线| 在线免费观看视频黄| 国内自拍视频一区| 国产成人久久婷婷精品流白浆| 亚洲国产精品无码观看久久| 久久久天堂国产精品| 免费成人深夜夜行网站视频| 日本高清久久久| 亚洲欧美日本一区二区三区| 中文av一区二区三区| 中文字幕永久有效| 亚洲a级黄色片| 欧美爱爱视频网站| 成人高清在线观看视频| 久久久久久久久网| 成人国产一区二区三区| 欧美国产日韩激情| 男人天堂网视频| 国产主播中文字幕| 国产精欧美一区二区三区白种人| 在线黄色免费看| 日韩精品手机在线观看| 日韩欧美一区三区| 亚洲三级视频网站| 中文字幕55页| 中国丰满熟妇xxxx性| 日日鲁鲁鲁夜夜爽爽狠狠视频97| www日韩视频| 三年中国中文在线观看免费播放| 人妻互换免费中文字幕| 免费无遮挡无码永久视频| 久久久久免费精品| 大桥未久一区二区| 超碰网在线观看| 善良的小姨在线| 日韩激情免费视频| 在线免费黄色小视频| 夜夜添无码一区二区三区| 男人插女人下面免费视频| 美女在线免费视频| 日韩av一二三四| 日本三日本三级少妇三级66| 男女av免费观看| 91看片淫黄大片91| 超碰网在线观看| 黄网站色视频免费观看| 日本va中文字幕| 国产毛片久久久久久国产毛片| 91香蕉视频导航| 欧美亚洲精品一区二区| 911福利视频| 91黄色小网站| 欧美乱做爰xxxⅹ久久久| 91亚洲免费视频| 青青在线免费观看视频| 一本久道高清无码视频| 性做爰过程免费播放| 91亚洲免费视频| 国产一线二线三线在线观看| 国产综合中文字幕| av动漫在线播放| 国产高清免费在线| 国产又大又黄又猛| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 国产xxxxhd| 成人性生交视频免费观看| 任你操这里只有精品| 久久久噜噜噜www成人网| 日韩av在线播放不卡| 黄色三级中文字幕| a级免费在线观看| 国产亚洲精品久久久久久久| 97超碰免费观看| 一区二区三区四区免费观看| 永久免费黄色片| 久久精品一二三四| 影音先锋成人资源网站| 欧美 日韩 国产精品| 成人国产在线看| 国产成人一区二区三区别| 99视频精品全部免费看 | 欧美在线观看黄| 国产精品igao网网址不卡| 中国黄色片一级| 无码人妻aⅴ一区二区三区日本| 日本三日本三级少妇三级66| 97中文字幕在线| 免费在线a视频| 国产精品一区二区羞羞答答| 超碰av在线免费观看| 欧美成人三级在线播放| 亚洲免费在线播放视频| 精品久久久无码人妻字幂| 老太脱裤子让老头玩xxxxx| 免费观看美女裸体网站| 国产黄色特级片| 女人高潮一级片| 99热久久这里只有精品| 色欲av无码一区二区人妻| 亚洲天堂国产视频| 800av在线免费观看| 亚洲人成无码www久久久| 一起操在线视频| 黄色成人在线看| 三级在线视频观看| 无码熟妇人妻av在线电影| the porn av| 久久福利一区二区| 男女视频在线看| 无码粉嫩虎白一线天在线观看| 无码少妇一区二区三区芒果| 中文字幕一区二区三区四区五区人| 国产精品久久..4399| 欧美一级小视频| 99热在线这里只有精品| 热久久久久久久久| 日韩黄色片视频| 国产美女作爱全过程免费视频| jizzzz日本| 日韩一级免费在线观看| 成年人网站国产| 特黄特黄一级片| www.日本一区| 久久国产乱子伦免费精品| 男女激情免费视频| 国产三级中文字幕| wwwwwxxxx日本| 国产aaaaa毛片| 无码人妻h动漫| 男人添女人下部高潮视频在观看| 亚洲欧美天堂在线| 色悠悠久久综合网| 国产一级片黄色| av动漫在线观看| 日本少妇高潮喷水视频| 免费观看亚洲视频| 99久久免费观看| 大胆欧美熟妇xx| 日韩a级在线观看| 农民人伦一区二区三区| 成人免费毛片在线观看|