組合語言 第4章 第乙個程式

2021-08-30 10:48:24 字數 3447 閱讀 7793

4.1 乙個源程式從寫出到執行的過程

- 第一步:編寫彙編源程式。

- 第二步:對源程式進行編譯連線

使用組合語言編譯程式對源程式檔案中的源程式進行編譯,產生目標檔案;再用連線程式對目標檔案進行連線,生成可在作業系統中直接執行的可執行檔案。

可執行檔案包含2部分內容:

第三步:執行可執行檔案中的程式。

4.2 源程式

程式說明:

1.偽指令

segment和ends 是一對成對使用的偽指令,這是在寫可被編譯器編譯的匯程式設計序時,必須要用到的一對偽指令。

功能: 定義乙個段

segment 說明乙個段的開始; ends 說明乙個段結束; 乙個段必須有乙個名稱來標識,使用格式為:

段名 segment

:段名 ends

乙個源程式中所有將被計算機所處理的資訊:指令、資料、棧,被劃分到不同的段中。乙個有意義的匯程式設計序中至少要有乙個段,這個段用來存放**。

(2)end 匯程式設計序的結束標記

編譯器在編譯匯程式設計序的過程中,如果碰到了偽指令end,就結束對源程式的編譯。

(3)assume 「假設」

它假設某一段暫存器和程式中的某乙個用segment…ends 定義的段相關聯。

2.源程式中的「程式」

源程式檔案中的所有內容稱為源程式,將源程式中最終由計算機執行、處理的指令或資料,稱為程式。

3.標號

在匯程式設計序中,除了彙編指令和偽指令外,還有一些標號,如 codesg , 乙個標號指代了乙個位址。

codesg 在 segment 前面,作為乙個段的名稱,這個段的名稱最終將被編譯、連線程式處理為乙個段的段位址。

4.程式的結構

例:程式設計運算2^3 .

5.程式返回

程式返回:乙個程式結束後,將cpu的控制權交還給使它得以執行的程式,這個過程稱為程式返回。

mov ax,4c00h

int 21h

在此只要知道,在程式的末尾使用這兩條指令就可以實現程式的返回。

6. 語法錯誤和邏輯錯誤

程式在編譯時被編譯器發現的錯誤是語法錯誤。

在源程式編譯後,在執行時發生的錯誤是邏輯錯誤。

例如:程式沒有返回,屬於邏輯錯誤。

4.3 編輯源程式

可以用任意的文字編輯器來編輯源程式,最終將程式儲存為檔案c:/1.asm 。

4.4 編譯

在編譯過程中,我提供了乙個輸入,即源程式檔案。最多可以得到3個輸出:目標檔案(.obj)、列表檔案(.list)、交叉引用檔案(.crf)

4.5 連線

連線的作用:

(1)當源程式很大時,可以將它分為多個源程式檔案來編譯,每個源程式編譯成為目標檔案後,再用連線程式將他們連線到一起,生成乙個可執行檔案。

(2)程式中呼叫了某個庫檔案中的子程式,需要將這個庫檔案和該程式生成的目標檔案連線到一起,生成乙個可執行檔案。

(3)乙個源程式編譯後,得到了存有機器碼的目標檔案,目標檔案中的有些內容還不能直接用來生成可執行檔案,連線程式將這些內容處理為最終的可執行資訊。所以,在只有乙個源程式檔案,而又不需要呼叫某個庫中的子程式的情況下,也必須用連線程式對目標檔案進行處理,生成可執行檔案。

注:對於連線的過程,我們要得到的最終結果是 可執行檔案。

4.8 誰將可執行檔案中的程式裝載進入記憶體並使它執行?

q4.1:有乙個正在執行的程式將1.exe中的程式加載入記憶體,這個正在執行的程式是什麼?它將程式加載入記憶體後,如何使得程式執行?

q4.2:程式執行結束後,返回到**?

- 作業系統的外殼

任何通用的作業系統,都要提供乙個稱為shell(外殼)的程式,使用者(操作人員)使用這個程式來操作計算機系統進行工作。

dos中有乙個程式 command.com, 這個程式在dos中稱為命令直譯器,即dos系統的shell。

如果使用者要執行乙個程式,則輸入該程式的可執行檔案的名稱,command 首先根據檔名找到可執行檔案,然後將這個可執行檔案中的程式加載入記憶體,設定cs:ip指向程式的入口。此後,command 暫停執行,cpu執行程式。程式執行結束後,返回到command中,command 再次顯示由當前碟符和當前路徑組成的提示符,等待使用者輸入。

4.9 程式執行過程的跟蹤

dos系統中.exe 檔案中的程式載入過程:

注意:在dos中執行程式時,是command 將程式加載入記憶體,所以程式執行結束後返回到command中,而在這裡是debug 將程式載入如記憶體,故程式執行結束後要返回到debug中。

使用q命令退出debug,將返回command中,因為debug是由command家在執行的。

在dos中用 debug 1.exe 執行 debug 對1.exe 進行跟蹤時,

to be continue…

組合語言第乙個程式

接下來,我們開始真正學寫匯程式設計序,前面都是鋪墊知識,我和大家一起學習,如果 講的不好或講錯了,謝謝大家幫我指出。assume cs codesg codesg segment mov ax,0123h mov bx,0456h add ax,bx add ax,ax mov ax,4c00h i...

32組合語言程式說明 第乙個組合語言程式

組合語言以隱晦難懂而著名,但是本教程從另乙個角度來看它 它是一種幾乎提供了全部資訊的語言。程式設計師可以看到正在發生的所有事情,甚至包括 cpu 中的暫存器和標誌!但是,在擁有這種能力的同時,程式設計師必須負責處理資料表示的細節和指令的格式。程式設計師工作在乙個具有大量詳細資訊的層次。現在以乙個簡單...

組合語言 筆記 第乙個程式

程式 4.1 assume cs code code segment mov ax,0123h mov bx,0456h add ax,bx add ax,ax mov ax,4c00h int 21h code ends end偽指令是由編譯器執行的指令 程式4.1 現的偽指令有 源程式檔案中所有...