同學們好,這一學期,我將陪伴大家學習匯編語言程序設計。 說到匯編語言,大家都知道它是一門低級語言。有多低級呢?計算機直接執行的是機器指令,就是二進制0、1序列,匯編語言使用一些助記符號代表這些指令。用匯編語言編程,直接操縱CPU中的寄存器,直接控制內存空間,可以說是直接操縱了計算機最底層的硬件。而我們現在,在絕大多數的情況下,都是在用高級語言編程解決問題,是不會接觸計算機的底層的。 那究竟為什么我們要學習匯編語言呢? 首先,匯編語言盡管年事已高,但它在當前工程應用當中,仍然廣被廣泛使用,甚至起著不可替代的作用。在數以千計的程序設計語言家族中,有個TIOBE排行榜,每月更新一次。java、C、C++排名前三,匯編語言,出乎很多人的意料,在2017年中排名第9。尤其是在近幾年中,借物聯網、嵌入式系統的快速發展,匯編語言的排名提升速度很快。這個排名,足以說明匯編語言寶刀不老,在業界被廣泛的采用。
匯編語言在行業內是一棵長青樹,它在技術鏈條中起著一種不可替代的作用,注意是僅此一家,別無分號。匯編語言的最大的優勢是效率,用匯編語言寫的程序,由于是直接操縱硬件底層的,執行速度是任何高級語言無可比擬的。所以,匯編語言一般開發的都是軟件系統的核心部件,計算機內部部件和外圍設備的驅動程序,像操作系統的內核、工業控制系統中的實時控制部分等,還有現在的不少嵌入式系統,包括家用電器,儀器儀表、物聯網系統當中的最核心的一些部件,都需要匯編語言發揮作用。既然匯編語言是解決最核心、最關鍵問題的,可以想像到在整個程序員的江湖中,匯編語言程序員應該坐哪把交椅。學習匯編語言對于不少學不得法的人而言,在感覺上是比較難的,匯編語言程序員排名上座也就能夠得到理解了。 匯編語言編寫的程序,對計算機運行程序而言是高效率的,那就給人帶來一個擔心:人開發匯編語言程序的效率并不高。的確是這樣。因此,在使用匯編語言時,一般只用匯編語言編寫最核心最關鍵的部件,而其它外圍的功能,用高級語言實現。然而,說匯編語言程序的開發效率低,這并不是一個絕對的真理。我們使用任何的語言開發程序,要將之用到能發揮好它自己特色的地方。如果說要在內存當中直接注入一段小程序之類的工作,用匯編語言,開發效率不知要比用高級語言快上多少倍。 并不是每一位學習計算機的同學都是要做最核心、底層的工作。學習匯編語言程序設計,更大的意義,是將它作為學習計算機的一個途徑,目標是理解計算機,對于學習計算機,能起到一種非常獨特的作用。匯編語言能夠直擊計算機系統的核心,學習匯編語言程序的原理,閱讀、編寫和運行匯編語言程序,可以使我們加深對計算機原理、操作系統的理解,進而,理解整個的計算機系統體系。通過學習和使用匯編語言,就有機會鉆到計算機的最核心部件中去,向上理解各種軟件系統的原理,打下軟件技術的理論基礎,而向下呢,感知、體會和理解到機器內部硬件的底層邏輯功能。學習匯編語言程序設計,要編程序,要調試,我們將在這個學習過程當中,學會底層的程序調試和錯誤分析的方法,練這樣的功夫,機會并不是很的。大學中的很多課程,你不要死記硬背,只圖通過考試,這樣的話,你才能夠學到用于解決領域問題的相關知識,同時,得到深入到學科核心的鑰匙。
那接下來的問題就是我們在這門課當中要學什么,如何學了? 學什么?這門課定位是匯編語言的基礎,只講8086 PC的匯編語言。有同學就說了,這內容未免太舊了吧?是的,8086是上個世紀80年代的產品,我們要學習匯編語言,最新的應該是80x86,奔騰系列的,還有linux匯編、ARM匯編等。為什么要選擇8086作為基礎呢?在這里有個方法論的問題。當我們面對一個復雜系統時,作為學習,經常需要設計一個模擬的、簡化的教學系統,能夠體現最核心的思維和最基礎的內容,而忽略一些非核心的細節。不得不說,現在的計算機系統太復雜了,而曾經紅極一時的8086產品,作為當今的教學系統,是完全勝任這個角色的。所以,我們選擇8086,并且只涉及硬件層面,不針對具體的操作系統,windows、Linux什么的,一是要降低入門的難度,二是體現對匯編語言的核心思維與方法的專注。不過話又說回來,匯編語言是就是能夠直接針對硬件編程的,與操作系統與關,8086PC中的很多技術,在現在的計算機上仍然有用,如果有想法再多學一些接近工作狀態匯編語言,在這門課程傳授的知識和方法的基礎上,繼續再進一步就可以。這門課所學的內容,還可以為學習嵌入式系統、微機原理、單片機等作為基礎。
說到學習方法,這門課將貫徹我一直提倡的,實踐的學習方法。在視頻講解中,我將不局限于所謂講知識,而是把所有的知識點都會在計算機上展示出來。CPU中的各種部件,我們是不能直接看到的,但是,我會引導大家,學會通過軟件工具進行觀察的方法。我們選的參考教材,是王爽老師的《匯編語言》第3版,這本書的特色,是王老師設計出了一個循序漸進學習的路線,在內容的編排上很好的支持。一個知識點之后,設計了問題和檢測點,強調只有通過了檢測,才可以繼續學習下面的內容。這些問題和檢測點,將作為實施翻轉課堂教學時,老師和同學們在實體的課堂上開展學習活動的主要內容,而對于通過網絡學習的同學,就需要自己對照教材,自行把這些問題和檢測點攻克了,然后再往下走。另外,為支持大家的實踐學習,我也將再建設一些其他的配套的資源,通過我的博客免費公布。
好了,從下一講開始,我將主要通過錄屏的方式,參考教材的體系進行講授,希望同學們能夠在聽講之余,同步閱讀教材,完成相關的實踐,將匯編語言程序設計的方法,用有效的學習真正掌握了。
新聞熱點
疑難解答
圖片精選