組合語言程式設計

2022-11-14 16:51:04 字數 5411 閱讀 2486

實驗報告

軟體學院

一、 實驗目的與意義

理解並熟練掌握組合語言程式設計過程中的編輯、彙編、鏈結和除錯等各個步驟,提高對彙編課程內容的理解和組合語言的掌握,通過上機練習加深對課程內容的理解和掌握。通過組合語言編制的程式上機除錯、執行檢驗程式設計是否正確。熟悉和掌握編輯、彙編、連線和除錯四個實用程式的使用方法,掌握除錯程式中的幾個常用命令的使用方法。

熟悉其基本的指令操作,debug除錯操作命令以及分支結構、順序結構和迴圈結構的程式設計。

二、 實驗環境

作業系統:microsoft windows8

整合環境:masm for windows

上機地點:資訊樓b405教室

三、 實驗的預習內容

預習的主要內容:

1. 使用debug命令的方法;

2. 熟悉掌握從理論上定義資料的型別(即db,dw,dd,);

3. 分支結構和順序結構的步驟以及相關的指令;

4. 常用的標誌位狀態及相應的作用;

實驗思路:

在對題目進行分析後,分析出解題方法,並做出與實驗思路相對應的程式框圖。依照程式框圖的內容輸入相對應的**,最終在除錯**後,發現並解決一系列的組合語言錯誤。進一步優化演算法。

實驗之前必須了解十進位制、十六進製制和ascii碼之間的轉換。預習查表法相關命令,掌握順序程式的結構,從鍵盤輸入資料的命令及顯示到螢幕上的命令。

實驗一:

題目1:將程式編輯、彙編、連線並通過整合環境中的debug除錯,觀察執行結果;用e命令修改指定位址的資料,再用g命令執行程式檢視變化,用a命令將加法指令修改成減法指令,再將其編譯執行,檢視暫存器值變化的異同。

題目2:分別用db、dw和dd資料段9h,0fah,41h,27h,編譯鏈結之後生成exe檔案,再用debug的r命令找到資料段位址,用d命令指定資料段位址,觀察彙編後在機器內部對應的儲存情況。

實驗二:

先設定資料段位址和堆疊段位址;設定堆疊段指標;讀取乙個字元然後儲存在al中;用bx來儲存al中字元對應的數值;將bx中的值作為偏移位址;並在資料段中查詢對應字串;最終輸出結果結束程式。

實驗三:

先初始化資料段位址與堆疊段位址;設定堆疊段指標;然後將資料段中的data1放入al中;讀取資料段中的data2並判斷data2是否大於0;然後讀取資料段中的data3並判斷data3是否大於0;最終通過不同資料情況判斷應當輸出空字元、字元「-」或字元「+」。

四、 實驗的步驟與除錯方法

實驗一:

按照要求編寫**,然後編譯、連線、執行。使用e命令修改資料,g命令檢視,d命令檢視資料變化;使用a命令修改加法為減法,g命令檢視,再用d命令檢視資料變化。

實驗二:

編寫**執行後從鍵盤輸入0-9其中乙個數字,檢驗結果是否正確,多次執行並檢測。

實驗三:

編寫**執行後,檢驗結果正確性,debug使用e命令修改資料,檢驗結果正確性。

遇到的問題及除錯辦法:

分支結構出錯,判斷之後指向錯誤導致結果錯誤。debug使用p單步執行。

五、 實驗資料與實驗結果

實驗一:

程式一:執行的結果如下:

從中可以看出初始的值為13和26,之後繼續進行單步執行,知道程式的結束,此時程式執行完畢,執行結果如下:

之後,執行d 0b3e:0002觀察結果,得知此時的和為39,結果如下圖:

之後,使用e命令,在e後加入資料位址,之後輸入要修改的資料,將13改為3,將26改為5,並且使用了d命令觀察資料是否更改,經驗證資料已經進行了更改,結果如下圖:

之後,使用g命令來繼續執行程式,結果如下圖:

之後使用d命令來顯示結果得知結果為8,結果正確:

使用a命令來更改add為sub,首先使用u命令來進行反彙編,找到add所在的位址,使用a命令,在a後面加上add的位址進行修改,如下圖:

之後進行單步執行得到結果如下得到減法的結果為ed:

程式二:

經過debug的d命令顯示,得到如下結果

經過和之前實驗預先的猜測一致,這樣進一步加深了我對組合語言資料的儲存的理解。

實驗二:

輸入3,5得到的執行結果為

實驗三:

原始資料:78h 56h 23h 輸出 『+』

e命令修改資料為:-21h -13h -18h 輸出 『-』

e命令修改資料為:-10h 00h 23h 輸出 『 』

六、 實驗用程式清單(要有注釋)

實驗一:

dseg segment資料段開始

data1 db 13h,26h ;原始資料

data2 dw 0儲存結果單元

dseg ends資料段結束

sseg segment stack ;堆疊段開始

sktop db 20 dup(0)

sseg ends堆疊段結束

cseg segment**段開始

assume cs:cseg,ds:dseg

assume ss:sseg

start: mov ax,dseg ;初始化資料端位址

mov ds,ax

mov ax,sseg ;初始化堆疊段位址

mov ss,ax

mov sp,length sktop ;設定堆疊指標

mov al,data1取第乙個資料

add al,data1+1與第二個資料相加

mov byte ptr data2,al ;儲存結果

mov ah,4ch

int 21h返回dos

cseg ends**段結束

end start源程式結束

實驗二dseg segment

data1 db 30h,30h,30h,31h,30h,34h,30h,39h,31h,36h,32h,35h,33h,36h,34h,39h,36h,34h,38h,31h

dseg ends

sseg segment stack

sktop db 00h

sseg ends

cseg segment

assume cs:cseg,ds:dseg

assume ss:sseg

start: mov ax,dseg

mov ds,ax

mov ax,sseg

mov ss,ax

mov ah,01h從鍵盤錄入乙個數,將其ascall碼存於al

int 21h

sub al,30h將acsall碼減去30h獲得該數大小存於al

mov bl,02hbl賦值為02h

mul blal乘以02h結果存在ax,表示該數平方的

mov bp,axax的值賦給bp

mov dl,ds:[bp將十位數賦給dl

mov ah,02h輸出十位數

int 21h ;

mov dl,ds:[bp+1將個位數賦給dl

mov ah,02h輸出個位數

int 21h

mov ah,4ch

int 21h

cseg ends

end start

實驗三dseg segment

data1 db 01h,-02h,03h

dseg ends

sseg segment stack

sktop db 00h

sseg ends

cseg segment

assume cs:cseg,ds:dseg

assume ss:sseg

start: mov ax,dseg

mov ds,ax

mov ax,sseg

mov ss,ax

xor bp,bp

mov ah,ds:[bp]

mov al,ds:[bp+01h]

mov bh,ds:[bp+02h三個數分別置於ah al bh中

cmp ah,al比較ah al大小

jl move1若ah小於al,跳躍到move1

mov bl,ah

mov ah,al

mov al,blah與al交換

move1: cmp al,bh比較al與bh大小

jl move2若al<=bh,跳躍到move2

mov bl,al

mov al,bh

mov bh,blal與bh交換

move2: mov bl,00hbh賦值為0

cmp ah,bl比較ah與0的大小

jl move3若ah<=0,跳躍到move3

mov dl若ah>0,則輸出『+』

mov ah,02h

int 21h ;

jmp move5

move3: cmp bh,bl

jl move4

mov dl,' '

mov ah,02h

int 21h

jmp move5

move4: mov dl,'-'

mov ah,02h

int 21h

move5: mov ah,4ch

int 21h

cseg ends

end start

七、 思考題(必需回答)寫明如下問題

1. 按照操作順序寫出上機操作的步驟;

(1)在編輯器中輸入組合語言程式,點選編譯,檢視有無語法型別的錯誤

(2)用鏈結

(3)鏈結完畢,用cmd/c執行程式,檢視執行結果

(4)輸入不同的資料多次執行並記錄

(5)用debug命令在debug下執行

2. 上機操作的步驟與順序可以調整嗎?為什麼?

不可以調整;因為如果調整了的話將無法正常進行上機操作

3. 寫出用debug中的e命令修改記憶體單元內容的兩種方法;

(1)eaddress;

(2)eaddress [list];

4. 寫出用debug中的a命令修改指令的方法及應注意的問題;

命令的格式為:a address

當執行a命令時,debug等待使用者輸入指令序列。輸入每條指令後回車,再直接按回車鍵結束a命令。debug將輸入指令序機的機器碼存入指定位址開始的記憶體單元中。

三組合語言程式設計

軟體要求 win98或win2000 masm5.0或masm6.0 含masm link debug等程式 硬體要求 ibm pc及相容機 實驗一非壓縮bcd碼乘法 一 實驗目的 學習程式設計的基本方法和技能,熟練掌握用組合語言設計 編寫 除錯和執行程式的方法。為後續課程打下堅實的基礎。同時熟練掌...

組合語言程式設計A卷

2011級組合語言程式設計課程試題 a卷 合分人複查人 1 用組合語言書寫的程式叫做masm要求該檔案的副檔名是編寫32位windows應用程式應選擇儲存模型。2 組合語言語句有兩種,分別是和3 除外設資料外的資料定址方式有3類,分別稱為 和定址。4 進行windows應用程式開發時,需要庫檔案,執...

組合語言程式設計指導手冊

微機原理與接 術 實驗指導手冊 內部資料 2009年9月 巫宗賓 薛培根 說明一 通訊專業 必做實驗1 3 4 9 10 二 電子專業 必做實驗1 3 4 5 6 8 9 10 三 計算機專業 必做實驗3 4 5 6 7 8 9 10 四 計算機 文秘 必做實驗3 4 5 6 7 8 9 10 五 ...