-
1 # 愛達人程式設計達人
-
2 # 大學生程式設計指南
程式語言裡面很少有人直接說出精通兩個字,特別是一些入行好多年的程式設計師,從語法來講C語言相對來講入門還是比較容易,在高階語言還沒有完全展開的年代,C語言算入門比較簡單的程式語言了,起碼要比語法細節繁雜的C++好太多了,現在很多做應用開發的程式設計師覺得能寫C語言的都是高手,這完全是一種這山看著那山高的心態了,做C語言還覺得高階語言程式設計模式複雜,現在越來越多的程式設計入門人員已經不選擇C語言作為入門語言覺得太難了,對於面向過程語言開發的C語言為什麼讓很多人覺得很難?
1.C語言硬體搭界由於很多人對硬體不熟悉,讓很多人覺得諱莫如深
2.C語言由於指標的存在很多人覺得難以理解,覺得很難。
但是大部分老程式設計師覺得C語言是一門相對入手比較容易的程式語言,但現在程式設計向著整合化的方向發展,相比較而言C語言顯得難了許多。
越是工作年限長的老程式設計師越是不輕易說出精通兩個字,C語言直接底層屬於彙編,彙編不僅僅是C語言的基礎,也是計算機執行的基石,如果真是一位精通C語言的高手,那麼對於彙編不說很熟悉,起碼會懂常見的語法,因為C語言除錯過程中遇到的一些奇怪的現象,拿不準的情況深入到彙編層面就很容易解決問題。所以想更好的學好C語言,對於組合語言還是需要多少了解一點。
但如果一定說只有學好彙編才能學好C語言,這種因果關係是不存在的,本來就是就屬於兩種不同的程式語言,在有些地方存在一些交集而已,比如對效能要求非常大的地方,直接在C語言裡面調用匯編來實現,這種在很多地方都使用過。
從市場上對於C語言的需求量依然很大,但對於比例相比別的語言少了許多,不是說C語言不重要了,主要是現在應用方便程式設計的需求更大,在很多領域C語言還是首選,通訊領域,作業系統,嵌入式開發等等還會選擇C語言,而且現在很多主流的程式語言的底層就是C語言來完成的,如果喊著C語言已經過時了或者不行的話,如果是這樣代表真的不懂程式設計。
-
3 # 散居獵人
完全不需要!請把精力放在演算法實現,模型建立,API呼叫,人機介面,網路與通訊等有用的地方。CPU發展很快,自己寫那幾句彙編比編譯器高明不了多少。做應用軟體開發,根本不需要彙編。你要是打算做作業系統等系統軟體,那倒是真得結合目標CPU好好研究彙編。
-
4 # kevinlq
實力回答一波!
不需要!不需要!不需要!重要的事情說三遍。
如果你自己對彙編感興趣,就當我沒說,限於時間可以看看。
-
5 # 日衝資訊 黃
不是必須的,但有幫助。程式經過編譯基本上就是組合語言的形態了。嚴格說,是二進位制資料,彙編是把二進位制的指令用詞語表現出來而已。如果理解了彙編你就能輕鬆理解C的指標是個什麼鬼,它加來加去的到底是在幹什麼。為什麼要編譯,什麼是連結。為什麼C要有主函式,為什麼變數要定義型別,函式是怎麼回事。
-
6 # 導盲小Q
不一定要懂彙編,至少不需要先學習彙編。
彙編對分析底層驅動有一定幫助,尤其是嵌入式開發。
彙編並不難,每個晶片平臺定義的彙編指令千差萬別。 因專案需要,臨時去翻指令理解也來得及,沒有必要去強記。
要學的東西太多,在彙編上花費太多精力沒有必要。
-
7 # 鍵盤上的信仰
2、建議在linux下用gcc學習c語言,c語言是一門系統級語言,只要掌握了指標,就可以很靈活的控制記憶體和程式流程;
3、c語言的很多庫都是透過指標對外提供api;
4、很多嵌入式晶片都有提供c語言的庫封裝;多執行緒庫在不同的平臺和晶片庫裡面有不同的實現方式;記得以前做arduino的時候,多執行緒要自己控制中斷;而lpc2368的armv7架構的多執行緒是用mailbox方式實現。只要掌握了linux平臺的gcc的c語言,就能很輕鬆的進行不同晶片的嵌入式開發。
5、原來開發lpc2368的bootloader的時候,官方的例子是彙編,而我直接用c語言的指標實現了同樣的功能。
回覆列表
雖然說彙編是一門獨立的語言,C也是一門獨立的語言,它們看上去並沒有什麼聯絡,但是學習彙編可以幫助我們分析C語言程式的設計原理。要想精通C語言,必須先學習彙編才是正確的學習順序。
舉例:【“Hello World!”程式使用匯編表現】
使用“Hello World!”程式介紹,如圖3-5-1所示。
圖3-5-1中,我們只看到了C語言程式碼,並沒有看到彙編,我們該怎麼檢視呢?在Visual C++開發工具中,反彙編視窗,需要下斷點、按F7編譯、按F5除錯執行才能切換到反彙編視窗。該如何下斷點哪?選中“int main(void)”這一行按F9,會在這一行程式碼前出現一個紅色的圓點,說明已經斷下斷點,看圖3-5-2所示。【注:按F9下斷點只是在Visual C++開發工具中使用】
按F9下斷點後,我們接著按F7,讓程式編譯,程式透過編譯後再按F5除錯,會出現如圖3-5-3所示。
選擇Go To Disassembly,出現如圖3-5-5的介面,說明成功切換到反彙編視窗,按F10 一步一步執行。
看圖3-5-5中,有如下程式碼示例:
以上是一個完整的函式呼叫,也是“Hello World!”程式的執行原理。
我們也可以在C語言程式中嵌入彙編,我們稱為內聯彙編。接下來介紹內聯彙編。
3.5.2【內聯彙編】
內聯彙編格式:
__asm
{
}
我們在裡面新增一些程式碼:
#include <stdio.h>
int main(void)
{
__asm
{
mov eax,eax
mov ecx,eax
mov edx,ecx
}
return 0;
}
我們在Visual C++中輸入程式碼示例CH03_5_1,如圖3-5-6所示。
在main函式前下斷點,我們切換到反彙編視窗檢視,如圖3-6-7所示。
圖3-6-7中的C語言程式碼和彙編程式碼如下:
1: #include <stdio.h>
2: int main(void)
3: {
00401010 push ebp
00401011 mov ebp,esp
00401013 sub esp,40h
00401016 push ebx
00401017 push esi
00401018 push edi
00401019 lea edi,[ebp-40h]
0040101C mov ecx,10h
00401021 mov eax,0CCCCCCCCh
00401026 rep stos dword ptr [edi]
4: __asm
5: {
6: mov eax,eax
00401028 mov eax,eax
7: mov ecx,eax
0040102A mov ecx,eax
8: mov edx,ecx
0040102C mov edx,ecx
9: }
10: return 0;
0040102E xor eax,eax
11: }
00401030 pop edi
00401031 pop esi
00401032 pop ebx
00401033 add esp,40h
00401036 cmp ebp,esp
00401038 call __chkesp (00401050)
0040103D mov esp,ebp
0040103F pop ebp
00401040 ret
總結“Hello World!”程式一共只寫了9行程式碼,而編譯器自動生成了很多彙編指令,同樣“CH03_5_1”中的程式也只有短短的11行程式碼,編譯器也自動生成了很多彙編指令,雖說彙編指令可以讓我們知道自己寫的程式執行過程的原理,但是沒有C語言更直觀的體現出我們想要的結果。簡而言之,組合語言更傾向於描述程式執行的過程,C語言更傾向於描述結果。
如果我們把程式執行的過程搞清楚,那麼肯定能分析出程式的結果,反之,如果只知道程式的結果並不知道程式執行中是怎樣一步一步實現的,那隻能說我們並沒有真正的學會C語言。所以這就是我們課程為什麼學習彙編,為什麼把彙編放在C語言之前講的原因。