實驗報告
軟體學院
一、 實驗目的與意義
理解並熟練掌握組合語言程式設計過程中的編輯、彙編、鏈結和除錯等各個步驟,提高對彙編課程內容的理解和組合語言的掌握,通過上機練習加深對課程內容的理解和掌握。通過組合語言編制的程式上機除錯、執行檢驗程式設計是否正確。熟悉和掌握編輯、彙編、連線和除錯四個實用程式的使用方法,掌握除錯程式中的幾個常用命令的使用方法。
熟悉其基本的指令操作,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 五 ...