彙編語言程序的上機過程?

本處文檔結合大學階段《微機原理與接口技術》,彙編語言也是大學階段重要的計算機語言,希望借實驗說明讓大家更好理解彙編語言這一塊。

彙編語言程序的上機過程

方法/步驟

一、 建立彙編語言的工作環境

為運行彙編語言程序至少要在磁盤上建立以下文件:

1、 編輯程序,如EDIT.EXE

2、 彙編程序,如MASM.EXE

3、 連接程序,如LINK.EXE

4、 調試程序,如DEBUG.COM

必要時,還可建立如CREF.EXE,EXE2BIN.EXE等文件。

彙編語言程序的上機過程

二、在計算機上運行彙編語言的步驟

1、 用編輯程序建立ASM源文件,以ASM作為擴展名

2、 用匯編程序把ASM文件轉換成OBJ文件

3、 用連接程序把OBJ文件轉換成可執行文件

4、 在DOS提示符下直接鍵入可執行文件名即可執行該程序

彙編語言程序的上機過程

三、 建立ASM文件

建立ASM文件的編輯程序可以是DOS自身帶的編輯程序EDIT.EXE,在DOS提示符下鍵入EDIT命令即可出現EDIT界面,其操作如下:

D:\>edit

源程序輸入完後,以ASM作為擴展名進行保存,假設所保存的文件名為:ex.asm。

ASM源文件的格式1:

;定義數據段,如果需要的話,其中segment和ends是一對偽操作,表示段的開始和結束

data segment ;數據段開始

;定義數據段的主體,如定義變量

data ends ;數據段結束

;定義附加段,如果需要的話

extra segment ;附加段開始

;定義附加段的主體,如定義變量

extra ends ;附加段結束

;定義代碼段,必須的

code segment ;代碼段開始

main proc far ;程序的主體部分,proc和endp這一對偽操作表示一個程序模塊的開始和結束

assume ds:data, es:extra, cs:code ;assume 偽操作指定某個段分配給哪個段寄存器

start: ;程序的入口地址

push ds ;保存原數據段

sub ax,ax ;ax寄存器清零,作為數據段0偏移地址

push ax ;數據段0偏移地址壓入堆棧中

mov ax,data

mov ds,ax ;把數據段地址裝入數據段寄存器ds

mov ax,extra

mov es,ax ;把附加段地址裝入附加段寄存器es

;自己所要實現的功能源代碼在此添加

ret ;程序結束後返回DOS

main endp ;程序的主體部分結束

code ends ;代碼段結束

end start ;彙編程序的結束,程序在start處開始執行

ASM源文件的格式2:

;定義數據段,如果需要的話,其中segment和ends是一對偽操作,表示段的開始和結束

data segment ;數據段開始

;定義數據段的主體,如定義變量

data ends ;數據段結束

;定義附加段,如果需要的話

extra segment ;附加段開始

;定義附加段的主體,如定義變量

extra ends ;附加段結束

;定義代碼段,必須的

code segment ;代碼段開始

main proc far ;程序的主體部分,proc和endp這一對偽操作表示一個程序模塊的開始和結束

assume ds:data, es:extra, cs:code ;assume 偽操作指定某個段分配給哪個段寄存器

start: ;程序的入口地址

mov ax,data

mov ds,ax ;把數據段地址裝入數據段寄存器ds

mov ax,extra

mov es,ax ;把附加段地址裝入附加段寄存器es

;自己所要實現的功能源代碼在此添加

mov ax,4c00h ;程序結束後返回DOS

int 21h

main endp ;程序的主體部分結束

code ends ;代碼段結束

end start ;彙編程序的結束,程序在start處開始執行

該步以及以下幾步在電腦上一邊講解,一邊演示給同學們看。

彙編語言程序的上機過程

彙編語言程序的上機過程

彙編語言程序的上機過程

彙編語言程序的上機過程

彙編語言程序的上機過程

四、 用MASM程序產生OBJ文件

源文件建立後,就要用匯編程序對源文件彙編,彙編後產生二進制目標文件(以OBJ作為擴展名),其操作如下:

D:\>masm ex.asm

彙編程序輸入的是ASM文件,其輸出文件可以是3個,第一個是OBJ文件,這是我們彙編的主要目的。

第二個是LIST文件,稱為列表文件,這個文件列出源程序和機器語言程序清單,並給出符號表,因而可使程序調試更加方便,這個文件可有可無,如果不需要,則可對[NUL.LST]直接按回車鍵。LST清單的最後部分為段名錶和符號表,表中分別給出段名、段的大小及有關屬性,以及用戶定義的符號名、類型和屬性。

第三個是CRF文件,這個文件用來產生交叉引用表REF,對於一般程序不需要建立此文件。為了建立交叉引用表,必須調用CREF程序。

至此,彙編過程已經完成了。但是,彙編程序還有另一個重要功能,可以給出源程序的出錯信息。警告信息(warning errors)指出彙編程序所認為的一般性錯誤,嚴重警告錯誤(severe errors)則指出彙編程序認為已使彙編程序無法進行正確彙編的錯誤。除給出錯誤的個數外,彙編程序還給出出錯信息,包括出錯的行和錯誤類型。當然彙編程序只能給出程序中的語法錯誤,至於程序的算法或編制程序中的其他錯誤則程序的調試時去解決。

彙編語言程序的上機過程

五、 用LINK程序產生EXE文件

在DOS提示符下鍵入LINK命令即可,具體的操作如下:

D:\>link ex.obj

LINK程序有兩個輸入文件OBJ和LIB。OBJ是我們需要連接的目標文件,LIB則是程序中需要用到的庫文件,如果程序中沒有用到庫文件,則直接按回車健。LINK程序有兩個輸出文件EXE和MAP文件,EXE文件就是可執行文件,MAP文件是連接程序的列表文件,又稱為連接映像,它給出每個段在存儲器中的分配情況。

彙編語言程序的上機過程

彙編語言程序的上機過程

六、 程序的執行

在DOS提示符下直接鍵入可執行的文件名即可,具體的操作如下:

D:\>ex

彙編語言程序的上機過程

七、 舉例

下面這個源代碼的功能是在屏幕上顯示一個字符串“This is my first ASM program.”。

data segment

string db 'This is my first ASM program.',13,10,'$' ;字符串以’$’符號結尾,以單引號括起來

data ends

code segment

main proc far

assume cs:code,ds:data ;assume 偽操作指定某個段分配給哪個段寄存器,但它不能把段地址裝入段寄存器中

start: ;程序的入口地址

push ds ;save old data segment

sub ax,ax ;ax寄存器清零,作為數據段0偏移地址

push ax ;零偏移地址入棧

mov ax,data

mov ds,ax ;把數據段地址裝入數據段寄存器ds

lea dx,string ;把字符串首地址裝入dx寄存器,或寫成mov dx, offset string

mov ah,9 ;DOS功能調用,在屏幕上顯示字符串

int 21h ;DOS中斷

ret ;return to DOS

main endp

code ends

end start ;彙編的結束,程序在此執行

彙編語言程序的上機過程

相關問題答案