前言
這是一篇挖墳的文章,原因是有網友又問起來了這個經典問題:“匯編是不是沒用啊?不用學了吧?” 可能很多人沒看過,我就再發一遍吧!
匯編語言這門課, 是我大學的一段灰色記憶,
有很長一段時間,我都搞不明白為什么匯編語言中有各種各樣的尋址方式 ,還有為什么叫立即數呢,它明明就是一個數字啊, 起個這么古怪的名字,
老師布置的簡單作業是用匯編控制主板的喇叭發聲, 在螢屏上輸出白底藍色字,或者綠底白色字.....
我都做得非常辛苦, 沒記錯的話還經常抄同班張同學的作業,
所以我一直對能用匯編語言編程的人保持帶點兒嫉妒的敬畏, 尤其是聽人說:求伯君竟然用匯撰寫出了WPS!Ken Thompson、Dennis Ritchie 居然用匯撰寫出作業系統Unix!
只能是一聲嘆息,人和人的差距真是大啊!
畢業后對作業系統癡迷,去看MINIX的源代碼,一開頭就被嚇住了,在bootstrap階段是通篇的匯編語言, 在后悔為什么大學沒有好好學的同時, 我還特別又買了一本匯編的書《80X86匯編語言程式設計教程》(那個時候王爽的《匯編語言》還沒出來) 準備把匯編撿起來,
艱苦地復習了一段時間就明白了一點,匯編其實和CPU密切相關,什么實模式、保護模式,GDT, LDT,資料段,代碼段......這些Intel CPU的概念如果沒搞明白,根本就學不會匯編,
那時候網路上資料很少,不像現在這么資訊爆炸,我孤獨地在Minix的世界中掙扎了一段時間就放棄了,我也許不是搞系統編程的那塊料,從此走向應用層編程之路,
米國那些早期的程式員很幸福,他們隨著計算機的發展而不斷前進,經歷了完整的從底層編程到高層編程的全程序,
最開始的時候就是直接對硬體編程,例如比爾蓋茨和保羅艾倫就是直接用匯編在牽牛星電腦上寫Basic的解釋器,那批程式員對硬體和底層的理解非常的透徹,
雖然我是屬于從入門到放棄型別,但是能深切的體會到學習匯編的好處: 匯編和最底層的硬體打交道( 注意是硬體啊) , 所以學習匯編能對計算機的運行機制有個透徹的了解, 至少需要掌握這些知識:
什么是暫存器
程式在記憶體和CPU中是怎么折騰的
CPU是如何訪問記憶體的
程式的分段
機器層面如何實作函式呼叫(理解緩沖區溢位攻擊的基礎)
中斷及其處理
......
有了這些知識,肯定對馮諾依曼計算機有了深刻認識,
而這些知識又構成了作業系統的基礎,有了這些基礎,理解行程/執行緒的概念,以及他們的實作就非常容易,還有虛擬記憶體、檔案系統、 I/O 等等,并不是說必須學了匯編才能理解作業系統,而是說看問題的深度不一樣,
有了匯編的保駕護航, 你可以在頭腦中建立起一個有更多細節,更多實作的計算機, 那些概念不是模糊的,而是清晰的、鮮活的,
作業系統的運行原理, 絕對是程式員受益一生的知識,
比如說后端編程,不了解OS的行程、執行緒、頁面快取,
檔案系統,I/O 就去大談如何實作一個高并發、大資料量的網站簡直就是笑話,
再比如對JVM的學習,如果你懂得匯編,看到JVM的位元組碼、看到堆疊幀就會很親切,只需要把基于暫存器的計算方式轉換成基于堆疊的計算方式就可以了,
我們的計算機的知識就像一座金字塔,底層是數學,上面是數字電路,然后是匯編,再往上是作業系統、網路,資料庫、高級編程語言、框架等等......
我們每個人不可能精通這個金子塔的每一層, 但是要掌握、理解構成這個金字塔的核心概念,
在應用層編程,我們不一定要掌味訓編, 但是掌味訓編能讓我們更透徹的看待我們賴以為生的虛擬世界 , 沒錯, 你要想成為黑客帝國中的Neo, 匯編必須得學,
我有時候會胡思亂想:如果這個編程世界根本沒有什么Java, Python, C++, Javascript , PHP, 只有匯編這么一種語言, 像 Rod Johnson(Spring之父),DHH(Ruby on Rail之父) , Eric Gamma (JUnit, Eclipse) , Gavin King(Hibernate之父) 這些在應用層編程的大牛們, 他們用匯撰寫程式會是什么樣子?
他們會創造出什么東西出來?
我想有一點是肯定的:即使是使用匯編,他們的編程技能仍然會毫不留情的碾壓我們,原因很簡單,一個駕馭過巨大系統的人,他的邏輯思維能力肯定是強悍無比的,匯編只是讓他換了一個工具而已,
更可怕的是由于軟體極難撰寫,只有一幫大牛才能編程,才能成為程式員,像我這樣資質平庸者估計只能去搬磚吧,
所以感謝這個時代,有這么多語言讓我選擇,不用被大牛碾壓, 能讓我靠編程過活,
漫畫:兄弟,今晚又得熬個通宵了!
我年薪百萬了,也沒有碼農翻身
從月薪三千到月薪三千
如何降低程式員的幸福指數?
漫畫:量子計算為什么這么牛?
架構師勸退指南
Java每次遇難,總會有大神拯救
程式員的宿命
芯片戰爭70年,真正的王者即將現身!
干掉軟體開發的最大怪獸:狼人!
宇宙第一IDE到底是誰?
HTTP Server :一個差生的逆襲
如何降低程式員的工資?
程式員,你得選準跑路的時間!
兩年,我學會了所有的編程語言!
Javascript: 一個屌絲的逆襲
我是一個執行緒
TCP/IP之大明郵差
一個故事講完Https
CPU 阿甘
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/221140.html
標籤:其他
上一篇:C語言指標 (小康小白)
