組合語言總結

2021-12-27 05:11:59 字數 2305 閱讀 3015

組合語言學習體會

大一大二期間學寫了一些高階語言,如c語言和c++。在對一些實際問題的程式設計處理上使用這些高階語言顯得很是方便。於是在剛接觸這門課的時候就對其實用性產生了懷疑和一些的牴觸情緒。

再學習了一段時間後,雖然對一些繁雜的指令有些討厭;但還是硬著頭皮學著下來了;但後來再經過實驗課的學習感覺組合語言並不是那麼的枯燥無味,是很有實際用途的。在很多問題的處理上,組合語言程式設計很是節省系統的資源。通過這一學期的學習,對彙編有了初步的掌握,可以說是彙編的入門教程。

首先主要學習了組合語言的基本知識,介紹了彙編的背景知識及由來,讓我知道了組合語言是處在機器語言和高階語言中間的一種低階語言。由於計算機能夠直接識別的資料是由二進位制數0和1組成的**。所以用機器語言編寫的程式是計算機惟一能夠直接識別並執行的程式,而用其他語言編寫的程式必須經過翻譯才能變換成機器語言程式,為了克服機器語言的缺點,人們採用助記符表示機器指令的操作碼,用變數代替運算元的存放位址等,這樣就形成了組合語言。

然後介紹了8086計算機組織,彙編的學習不僅僅是學習其語法,而更多的是學習計算機基本的體系結構,學到這還沒見到很多的指令和語句,但這是學習彙編前必須要知道和掌握的,只有知道了彙編的實質、如何工作及一些基本概念,才能進行下一步的學習。直到後面終於學了80x86指令系統和定址方式及後來的組合語言格式,才真正進入了彙編的指令學習階段,每一條指令的學習雖然簡單但比較多,特別是有些指令的使用場合及錯誤用法等易犯錯、易混淆,例如在編寫資料傳送指令時,目的運算元和源運算元的型別一定要匹配,cs不能作為目的運算元,offset後只能跟簡單位址符號,等等。但總的歸納起來主要掌握三點:

1、要求指令運算元的定址方式;2、指令對標誌位的影響和標誌位對指令的影響;3、指令的執行時間,對可完成同樣功能的指令,要選用執行時間短的指令。這樣學習起來方便的多,也更容易理解記住,這為以後的學習做了鋪墊。

彙編的基本指令學完後,就開始進行應用了,首先學習的是迴圈與分支程式設計,第乙個例子是簡單的加法計算,雖然簡單,卻讓我有點恐懼,乙個在c語言中只要三四句就解決的問題,用彙編卻寫了將近20句,且還沒有輸出,也就是不知道結果是否正確。後來學習了dos系統功能呼叫,知道02號功能可以輸出加法的結果,於是使用了,但輸出的卻是乙個ascii碼值,又需要進行二進位製到十六進製制的轉換,當時覺得很困惑,不知道為什麼要轉換,我們輸入的不就是十六進製制嗎,算出來應該還是十六進製制啊?隨著繼續深入的學習,才徹底明白為什麼要轉換,同時也了解了計算機中對於數字運算是如何工作的。

這時發現彙編有很多高階語言所沒有的優點,它能讓我們更加了解計算機內部的組織結構,對我們計算機專業的學生來說,學習彙編也是提公升綜合能力的關鍵環節。一旦對它的原理掌握後,編寫程式就容易多了。後來學的越多,越複雜,程式也是越來越長,一堆的跳轉指令,覺得很麻煩,且感覺整個程式無秩序,有時對於一段程式實現的功能還要研究半天。

直到學習了子程式設計,乙個過程定義對應乙個功能,就像c語言中的函式,很有條理性。子程式設計能讓乙個大程式分成幾個模組來做,提供了模組化程式設計的條件,可以節省儲存空間及程式設計所花的時間,並且在主程式中進行call呼叫,十分方便,便於以後的維護、除錯和修改。

最後學習了部分巨集彙編,只是簡單的幾個用法並沒有深入,但已經為我們做好了基礎工作,便於我們自學後面的部分。巨集(或巨集指令)是源程式中一段有獨立功能的程式**,只需定義一次,可以多次呼叫。這似乎和子程式結構很像,但子程式有自己的優缺點,優點很明顯,缺點是子程式為轉子及返回、儲存及恢復暫存器以及引數的傳送等都要增加程式的開銷,這些操作所消耗的時間以及它們所占用的儲存空間,都是為取得子程式結構使程式模組化這一優點而增加的額外開銷。

所以,有時,特別在子程式本身較短或者是需要傳送的引數較多的情況下,使用巨集彙編更加有利。當然,在程式較複雜,實現的功能較多的情況下,子程式也必不可少。我的理解是:

子程式是呼叫,而巨集是替換,比如乙個max巨集,所有出現max的地方,都用巨集**代替。兩者各有利弊,在掌握深入的基礎上結合使用更好。

還有一點十分重要,和所有的程式語言一樣,要學好組合語言,實驗是必不可少的環節。我深有體會:書上的程式都能看懂,基本原理也都明白,但是在自己親手編寫程式時,卻無從下手,甚至連第一句該怎麼寫都不知道。

後來隨著老師的講解和實驗的進行,知道了程式的編寫格式,包括資料段、堆疊段和**段,其中資料段和堆疊段可以不定義,但**段是必不可少的,也掌握了該怎麼除錯程式、執行程式等。特別是debug命令的使用,可以配合與list檔案的使用,讓我們可以除錯排錯、檢查結果是否正確等,掌握debug的使用對實驗有很大的幫助。程式的編寫在記事本中進行即可,再在mask中編譯,link中連線執行,當然也可以在專門的彙編工具中進行。

通過實驗,可以在很大程度上加深印象,在書上看程式,一切都是理所當然,十分順利,而自己動手,才會真正發現自己的不足之處。

組合語言作為一門計算機語言,有著不可替代的作用。我們要向學好它就必須要面對它,主動地學習,尤其是自己要經常地上機程式設計除錯才能提公升自己的能力。

組合語言總結

一 乙個完整的源程式的結構 乙個源程式一般由若干個段組成,每個分段可以是棧段 資料段和 段。乙個源程式可以有多個棧段 資料段和 段,從語法規則上來看,棧段是有明顯標誌的 段最好的型別為 code 的標記,並用cs作為段界暫存器,只有資料段不要求標誌。完整的源程式的結構一般形式如下 程式名稱 二 源程...

組合語言 第3章巨集組合語言

第三章巨集組合語言 一 巨集組合語言格式 3.1.1 指令語句格式 指令語句的一般格式如下 標號 指令助記符運算元 注釋 1 標號 標號是機器指令語句存放位址的符號表示,代表該指令目標 的第乙個位元組位址,後面必須緊跟冒號 2 指令助記符 指令助記符為語句的核心成分,表示了該語句的操作型別。3 運算...

組合語言程式設計

實驗報告 軟體學院 一 實驗目的與意義 理解並熟練掌握組合語言程式設計過程中的編輯 彙編 鏈結和除錯等各個步驟,提高對彙編課程內容的理解和組合語言的掌握,通過上機練習加深對課程內容的理解和掌握。通過組合語言編制的程式上機除錯 執行檢驗程式設計是否正確。熟悉和掌握編輯 彙編 連線和除錯四個實用程式的使...