彙編實驗報告

2021-03-04 06:16:26 字數 5235 閱讀 4012

組合語言與微機接**術實驗報告

一分支程式設計

二迴圈程式設計

學號:1120102118

姓名:馬婧婷

班級:08311001

完成日期:2013-04-18

【實驗1.1】

一實驗背景

1 實驗目的

掌握組織及除錯乙個簡單並完整的組合語言程式,熟悉組合語言上機過程。實驗的第乙個程式是分支設計程式。

2 實驗內容

已知兩個整數變數a 和b,試編寫完成下述操作的程式:

(1) 若兩個數中有乙個是奇數,則將奇數存入a 中,偶數存入b 中。

(2)若兩個數均為奇數,則兩數分別加1,並存回原變數。

(3)若兩個數均為偶數,則兩變數不變。

3 知識背景

3.1 匯程式設計序編譯過程

·編輯:用編輯軟體edit.exe形成源程式(.a**)如:a.a**

·彙編:用匯程式設計序ma**.exe對源程式進行彙編,形成目標檔案(.obj),格式如下:ma** a.a**

·連線:用連線程式link.exe對目標程式進行連線,形成可執行檔案.exe,格式如下:link a.obl

·執行:如果結果在螢幕上顯示,則直接執行可執行檔案。

·除錯:用除錯程式debug.exe,對可執行檔案進行除錯,格式如下:debug a.exe。

特別說明:在此試驗中,我用的是老師給的ma**6.1整合包,裡面包含了上述所有功能。

3.2 debug除錯

debug是為組合語言設計的一種高度工具,它通過單步、設定斷點等方式為組合語言程式設計師提供了非常有效的除錯手段。

【debug程式的呼叫】

1. 啟動debug:單擊debug.exe圖示

2.指定要除錯的程式,在連字元『-』後輸入n a.exe

3.裝入由2步指定的程式:在連字元『-』後輸入l

4.除錯

【debug的主要命令】

1. 用r命令顯示暫存器內容

2. 用u命令反彙編可執行**

3. 用g命令執行正在被除錯的程式到斷點

4. 用d命令檢視資料

5. 用t命令跟蹤執行程式

6. 用q命令退出debug返回到作業系統

二解決方案

1 程式流程圖設計

2 源**及注釋

datassegment

;此處輸入資料段**

a db?

b db?

str1 db'a=','$'

blank db 13,10,'$'

str2 db'b=','$'

datasends

stacks segment

;此處輸入堆疊段**

stacks ends

codes segment

assume cs:codes,ds:datas,ss:stacks

main proc far

push ds

xor ax,ax

push ax

mov ax,datas

mov ds,ax

input:

;輸入部分

mov ah,9

lea dx,str1

int 21h

mov ah,1

int 21h

mov a,al

mov ah,2

mov dl,32

int 21h

mov ah,9

lea dx,str2

int 21h

mov ah,1

int 21h

mov b,al

logic:

;邏輯判斷

mov al,a

mov bl,b

and al,01h

cmp al,00h

jz an

and bl,01h

cmp bl,00h

;ab:是否

jz ending

;ab:是是,a,b各加1

add a,1

add b,1

jmp ending

an: mov bl,b

and bl,01h

cmp bl,00h

;ab:否否

jz ending

;ab:否是,交換兩數

mov cl,a

mov al,b

mov a,al

mov b,cl

jmp ending

ending:

;輸出部分

mov ah,9

lea dx,blank

int 21h

mov ah,9

lea dx,str1

int 21h

mov ah,2

mov dl,a

int 21h

mov ah,2

mov dl,32

int 21h

mov ah,9

lea dx,str2

int 21h

mov ah,2

mov dl,b

int 21h

mov ah,9

lea dx,blank

int 21h

mov ah,9

lea dx,blank

int 21h

jmp input;構造乙個死迴圈,用來多次輸入

retmain endp

codes ends

end main

3 debug除錯演示

【進入debug除錯介面】

cmd– debug

【用r顯示暫存器內容】

【用u反彙編源**】

【用d檢視資料】

4 執行結果

三實驗總結

【遇到的問題】

用debug.exe除錯程式的時候,總是載入不上,試過很多方法還是不行。

後來發現進入exe檔案所在目錄以後,輸入debug命令,自動就開始了debug除錯程式,不用再輸入-n 1.1.exe return。

此次實驗內容不是很複雜,所以不用怎麼除錯就能執行處正確的結果,所以對匯程式設計序的本質了解的不是很透徹,但是這次實驗做到了熟練運用匯程式設計序的一系列工具,收穫頗多。

【實驗1.2】

一實驗背景

1 實驗目的

掌握組合語言中迴圈程式的設計與實現,並熟悉陣列的使用。熟悉組合語言中相應排序演算法的實現。

2 實驗內容

設有兩個陣列a 和b,其資料均為20 個。程式設計實現將兩個陣列中的資料各自按由小到大的順序存放。之後,再將既在a 陣列中出現又在b 陣列中出現的整數按照由大到小的順序存放於陣列c 中。

要求在螢幕上輸出陣列a 和b 排序前及排序後的內容,以及陣列c的內容。

3 知識背景

3.1 匯程式設計序編譯過程

·編輯:用編輯軟體edit.exe形成源程式(.a**)如:a.a**

·彙編:用匯程式設計序ma**.exe對源程式進行彙編,形成目標檔案(.obj),格式如下:ma** a.a**

·連線:用連線程式link.exe對目標程式進行連線,形成可執行檔案.exe,格式如下:link a.obl

·執行:如果結果在螢幕上顯示,則直接執行可執行檔案。

·除錯:用除錯程式debug.exe,對可執行檔案進行除錯,格式如下:debug a.exe。

特別說明:在此試驗中,我用的是老師給的ma**6.1整合包,裡面包含了上述所有功能。

3.2 debug除錯

debug是為組合語言設計的一種高度工具,它通過單步、設定斷點等方式為組合語言程式設計師提供了非常有效的除錯手段。

【debug程式的呼叫】

2. 啟動debug:單擊debug.exe圖示

2.指定要除錯的程式,在連字元『-』後輸入n a.exe

3.裝入由2步指定的程式:在連字元『-』後輸入l

4.除錯

【debug的主要命令】

6. 用r命令顯示暫存器內容

7. 用u命令反彙編可執行**

8. 用g命令執行正在被除錯的程式到斷點

9. 用d命令檢視資料

10. 用t命令跟蹤執行程式

7. 用q命令退出debug返回到作業系統

二解決方案

1 子程式設計

(1) ary_sort 使用氣泡排序,對陣列進行排序

(2) output_info 用來輸出輔助資訊

(3) ary_output 用來輸出乙個陣列的內容

2 程式流程圖設計

【總體程式流程設計】

【分模組流程設計】

(1)ary_sort 流程圖(eg公升序)

(2)生成ary3

(3)ary_output (因為是遞迴程式,所以就不畫流程圖了)

output(int a)

3 源**及注釋

datas segment

;此處輸入資料段**

out_1 db'array1: ','$'

out_2 db'array2: ','$'

out_3 db'array3: ','$'

before db'defore sort: ','$'

after db'after sort: ','$'

return db 13,10,'$'

;array1 array2 is set in advance

ary1 db 7,5,2,40,8,37,48,29,79,32,58,64,92,127,39,122,98,4,30,90

ary2 db 37,48,29,79,32,58,64,92,127,39,77,99,111,122,8,11,18,88,45,33

ary3 db 20 dup(?)

count dw 0 ;輸出陣列用到,表示從陣列首位址輸出整數的個數

ct equ 14h ;表示1,2陣列的長度

finish dw?;氣泡排序中優化作用,標誌一次遍歷中是否調換過兩個數的位置

flag dw?;陣列排序中用到,用於選擇排序方式,0 - rise 1 - dip

datas ends

stacks segment stack 's'

;此處輸入堆疊段**

dw 64 dup('st')

stacks ends

特別說明:上面是部分**(資料段和堆疊段),因為**段太長了。。。

4 debug除錯演示

5 執行結果

三實驗總結

此次實驗較上乙個實驗難很多,並不是演算法的難度,而是操作起來比較困難。通過這個實驗對語句的操作更加熟悉,收穫頗多。

彙編實驗報告

課程編號 b080103020 組合語言程式設計 實驗報告 東北大學軟體學院 實驗1 資料傳送指令 實驗目的 了解和掌握 mov push pop xchg四條指令的作用和在程式設計中的用法。實驗內容 採用立即數定址方式將19e0h,3f56h,0af37h,9a81h分別送給eax ebx ecx...

彙編實驗報告一

組合語言程式設計 軟體學院 一 實驗目的與意義 1 掌握組合語言程式設計的基本方法和技能 2 熟練掌握使用全螢幕編輯程式edit編輯組合語言源程式 3 熟練掌握巨集匯程式設計序ma 的使用 4 熟練掌握連線程式link的使用 5 學習資料傳送及算數和邏輯運算指令的用法 6 掌握分支程式的結構 7 掌...

彙編程式設計實驗報告

組合語言程式設計 實驗報告 一 課程設計目的 1 熟練掌握組合語言指令 2 掌握組合語言程式格式 迴圈與分支程式設計 子程式設計 巨集彙編 3 掌握模組化程式設計 4 培養動手能力 5 培養程式設計者解決問題的能力 二 課程設計任務 1 判斷閏年 根據輸入的具體年份 在1900 2100之間,要求對...