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