老師讓我學習C,彙編,看c編譯成的彙編代碼,說以後幹什麼都難不倒。?

我現在在第三步,c編譯後得彙編代碼完全看不出頭緒,不知道怎麼看,一步一步進去看,簡直是無底洞,看不到頭!求大神指導!順便問下之後怎麼發展?java還是c++


我最近回答過一個有點關係的問題:為什麼覺得協程是趨勢? - Tim Shen 的回答

我感覺如果基礎不紮實,上層學起來是步步荊棘。計算機體系結構和操作系統很重要,不然很容易被人艹翻。彙編不會寫總要能看懂吧。不管有多少時間,我覺得打基礎收益最大。


看《深入理解計算機系統》第三章


你們老師說得對。C 源代碼映射成彙編挺簡單的。難的是理解計算機的體系結構,理解 stack , heap, register , section 等等概念。要想成為 C 高手,看彙編是跑不掉的。看的時候,記得用 -O3 優化編譯。優化過的彙編代碼可讀性好。

脫離彙編去學習 C 語言,你永遠無法理解 C 語言的精髓。

儘管不同的編譯器編譯出來的結果稍有差別,但是不影響程序的語義,你程序的運行結果還是不變的。關鍵是理解 C 語言的語義是如何映射到彙編上的。

很難想像一個不懂彙編語言的人,能學好 C 語言,最多只知其然,而不知其所以然。

你如果理解了基本的彙編語言知識,C 語言中的語言難點都是浮雲,什麼指針,數組,函數調用,值傳遞,struct , union, enum 都是 so easy。


顯然看asm不能培養你的軟體工程思維

我校一位從彙編轉C的教師,彙編水平一流,但是在他的眼裡模塊化編程就是把功能都從main里提出來來寫成函數,僅此而已


這事我真干過,不過我只分析了各種變數的作用域,符號表,命名空間,函數重載之類的。理解了鏈接過程。然後看8086彙編,理解了函數調用,參數傳遞,返回值是怎麼回事。解決了一些疑惑,出了錯誤也能想到是怎麼回事。

但是,我只學過8086彙編,32位的當初能看懂。現在都忘了,好像看不懂了。

你老師估計理解了其中的好處,想分享給你。但是如果以後做應用層開發,這些東西對你的幫助有限。

你說的那個引擎是什麼引擎?


彙編至少要搞明白每一種指令是怎麼回事,還有比如寄存器是什麼,PC是什麼等等

另外,彙編不是純粹的語言,而是電路的一種表達方式,所以按學其他語言的方式學是沒戲的,你必須能看懂CPU的邏輯電路圖才行

個人覺得這個非常非常重要,因為你學明白之後計算機就不再是一個「神秘的裝置」,而只是「建立在電路和物理基礎上的機械」了。這一點對於你以後學習所有的計算機知識都非常重要。

當然了,彙編本身對於找工作的用處不大。但是這就好像說微積分很難學也不能靠他找工作,但你不學微積分以後想搞物理和機械工程純屬作死一樣,一個性質


其實你誤會了,或者你老師沒說清楚,或者你老師也是人云亦云,第三步不是這樣的。

第三步其實是學習編譯器及編譯原理,彙編語言基本上可以等價於機器語言,也就是機器真正的執行方式。讓你學習編譯原理有兩個好處,第一是能夠直觀的理解高級語言是怎樣被翻譯的,這個現在很多地方都很常用。學好了你就可以自己創造新的語言。第二個是能夠清楚的明白高級語言是怎樣被執行的,這個有助於優化代碼的執行效率。終於直接看生成的彙編語言......這個基本上可以理解為他在坑你。費力不討好。

至於Java還是C++,我的意見是都要涉獵一下,不過需不需要精通就看你的需求了,我反正對C++無愛。建議你還是先學一下C++吧,然後在學Java。如果你反過來,估計看都不想看C++一眼。這兩種語言,C++比Java執行效率高,但是開發周期長,維護難度大。一般用於系統層或者遊戲開發。


如果把c語言當成彙編語言加語法糖,那麼你就這麼干吧


為什麼我看懂了,還是一堆不會的……


說的太大太誇張,但是很有道理,值得接受。我最近換了工作以後體會更深了

—————————

我又看了下題目,你說越看越深,這個倒是不必吧,能看懂基本的彙編,對內存的概念有理解就可以了,這主要是為了解決問題的時候用


說什麼都難不倒是語言級別的但是演算法和邏輯上的難題不會因為語言級別的通暢而解決


我的理解是,這是正確的廢話。類似的有:學好數學就什麼都不難了。

我也認為打好基礎很重要,但是要注意方法才行。

首先我覺得你需要對晶元的底層工作原理有一定的了解。

這方面的科普書是 編碼的奧秘 (豆瓣),建議先看這本

教材就是計算機系統概論 (豆瓣)(真的實現了一個晶元),或者其他類似書籍

這部分的書也不少。看完之後對晶元的結構有了大體的認識。甚至還可以自己動手寫一個cpu

深入理解計算機系統(原書第2版) (豆瓣) 第三章講了怎麼將c語言轉換成彙編的。更加深入的了解,就要看編譯原理。這方面書籍就不推薦了(我也不懂)。

直接看編譯器生成的彙編,這是一個很笨的學習方法,因為這個你跳過太多東西了。

不是大神,不懂java和c++,希望對你有幫助


你現在大幾?


浮躁的年代,激進的IT業,又有多少人真真正正得明白


C++ Python。

啃演算法,看操作系統。

然後,不停的擼代碼。

有想法就去寫博客。


如果你以此為基礎並不斷深入,那你今後的進階之路會更平坦;如果你僅僅只停留在此,那基本什麼都幹不了,就算能幹的也比別人乾的效率低很多


任何不考慮學生未來職業方向或研究方向的教學都是耍流氓


程序員多了去了,僅有一小部分需要和硬體交互,c++就不要學了,Java面向對象比c++好了不少,就算不會寫代碼,還可以寫文檔啊╮(╯▽╰)╭


上學期剛學完dsp,老師也在教彙編,雖然以後使用晶元用的還是c,但是學習彙編會更透徹的知道晶元是怎麼工作並且怎樣更好的利用它,我覺得學習彙編並且好好學習晶元的構成原理有助於真正使用它,而且能提高一些興趣吧,畢竟會覺得自己離晶元更進一步具體理解而不是停留在抽象的理解上…這只是我的拙見,因為我們老師很看不上我等只會做考試題的學生,雖然有自己的責任,但是也確實是中國很多大學的悲哀


誤人子弟


說的對,,,,,,,老師很牛,,,,,但也可能是個坑


推薦閱讀:

多線程編程的時候,使用無鎖結構會不會比有鎖結構更加快?
怎麼把彙編代碼自動轉換成C語言內聯彙編?
如何在win8 64位上裝turbo C2.0和VisualC++6.0?
數組和指針的一個問題?

TAG:程序員 | C編程語言 | 彙編語言 | C | 編程學習 |