C學習筆記(一) C語言和組合語言的區別

2021-07-14 17:52:51 字數 1106 閱讀 5309

c學習筆記(五) c語言和組合語言的區別

c語言和組合語言的區別:

彙編:效率高,對硬體的可操控性更強,體積小,不易維護,可移植性很差 

c:效率比較低,硬體可操控性比較差,目標**體積大,容易維護,可移植性很好

1.  組合語言實質上是機器語言的助記符。 cpu只能執行它所支援的指令集,而這些指令集當中的每條指令都是一些二進位制數的序列,也就是「0」和「1」的有序組合;「0」和「1」的組合不便於程式設計師的記憶因此有了「mov a 0x40」等這樣的助記符。所以組合語言編譯成cpu可執行的機器語言其實只要做乙個翻譯的動作就好了。而c語言編寫完程式後,需要通過編譯器將c語言編譯成與相應cpu指令集對應的機器語言。組合語言與機器語言是一一對應的。但是c語言呢?當然沒這麼好事了。c語言的語法是固定的,c語言編寫的程式要編譯成cpu能讀懂的機器語言指令沒辦法一一對應,因此需要有編譯規則了,所以執行效率低一些。也可以說,c

語言,是面向程式設計師的語言,而組合語言是直接面向

cpu的語言。

2.  彙編是直接面對cpu的語言,只要是在指令集支援的範圍內,組合語言可以直接而靈活地管理包括特殊功能暫存器、通用暫存器、儲存單元的每乙個位元組,甚至是每乙個bit。c語言對記憶體的使用及管理功能也是很強大的,但畢竟還是受制於語法。舉個最簡單的例子,c語言當中沒有對應三位元組或是五位元組的變數型別,要麼int型,要麼long型,所以每次申請必須是固定的位元組數,勢必造成記憶體使用上的浪費。而大部份組合語言根本沒有這樣的語法,在偽指令的幫助下(其實也只是提高可讀性),組合語言程式可以使用任意位元組數的變數,當然處理起來比c語言麻煩得多,最終還是乙個位元組乙個位元組地拼接處理,而用c語言寫程式就輕鬆了,不用管這些,最終編譯器會搞定嘛。而輕鬆的代價就是造成了浪費。而記憶體使用效率不高同時也會影響到整個程式的整體效率。  c語言

與彙編的不同適用場合

1:若只有較簡單的邏輯操作、邏輯演算法

、簡單運算,使用彙編會得到較為精準的**,但用c也同樣可以做到。 

2:若摻有複雜運算、浮點運算、非線性方程等,彙編難度很大,而c語言作為一種高階語言,有簡潔緊湊,使用靈活的語法機制,編寫複雜程式容易得多。 

3:每一款處理器各自的彙編語法大都不一樣,若僅使用彙編,可擴充性、可移植性都很差,用c就會好的多。 

4:對硬體進行初始化的操作,使用組合語言。 

c語言和組合語言的區別

什麼是c語言 c語言是一門通用 計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式 編譯 處理低階 儲存器 產生少量的 機器碼以及不需要任何執行環境支援便能執行的程式語言 儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平台的特性,以乙個標準規格寫出的c語言程式可在許多電腦平台...

高階組合語言和低階組合語言的差別

80 86不支援像 if while repeat for break breakif try 這樣的機器指令。hla只要一遇到這些語句,就把他們編譯成乙個或多個真正的機器的指令 本書的目的 the art of assembly language 在於傳授你低階組合語言,談論第一章的高階結構只是實...

C語言和ARM組合語言的相互呼叫

1.匯程式設計序訪問c語言全域性變數 全域性變數只能通過位址間接呼叫,為了訪問c語言中全域性變數,首先要通過extern偽指令引入全域性變數,然後將其位址裝入暫存器中。對於unsigned char型別,使用ldrb strb訪問 對於unsigned short型別,使用ldrh strh訪問 對...