彙編實驗報告一

2021-03-04 09:39:16 字數 4237 閱讀 6028

組合語言程式設計

軟體學院

一、 實驗目的與意義

1、掌握組合語言程式設計的基本方法和技能;

2、熟練掌握使用全螢幕編輯程式edit編輯組合語言源程式;

3、熟練掌握巨集匯程式設計序ma**的使用;

4、熟練掌握連線程式link的使用;

5、學習資料傳送及算數和邏輯運算指令的用法;

6、掌握分支程式的結構;

7、掌握分支程式的設計、除錯方法;

8、熟悉在pc機上建立、彙編、連線、除錯和執行8086組合語言程式;

二、 實驗環境

作業系統:windows xp

除錯軟體:edit plus 3,ma** 5.0

上機地點:綜合樓311

三、 實驗的預習內容

(1)熟悉上機練習過程和偽指令實驗

實驗預習內容:在實驗前,充分熟悉edit plus 3的環境以及配置方法,熟悉各種debug的常用指令:u、d、t、p、g、a、e及r命令的使用和含義,了解資料傳送指令和算數以及邏輯運算指令的用法,在理論上了解資料的儲存情況以及dd,db,dw偽指令的用法和含義。

實驗思路:按照書上的程式打入**,進行彙編、連線和執行程式檢視此時程式的運**況,之後進入debug介面,分別使用u、d、t、p、g、a、e及r命令等常用指令,可檢視此時的程式的執行狀況以及此時暫存器的儲存情況以及對於記憶體的使用情況。

程式一流程圖:

程式二流程圖:

(2)順序結構程式設計實驗

實驗預習內容:在實驗前了解十進位制,十六進製制和ascii碼之間的轉換,了解如何從鍵盤中輸入字元和回車換行,以及在螢幕中顯示的彙編指令。

實驗思路:從鍵盤中輸入要計算的數字,將其進行平方運算,利用計算得到數字,了解十進位制數字、十六進製制數字與其對應ascii碼的轉換方法,將數字顯示到螢幕上。

程式流程圖:

(3)分支程式設計實驗

實驗預習內容:在實驗前了解分支結構的特點,明白跳轉指令和程式轉移指令的使用的使用,以及兩個數進行比較後各個標誌位的變化。

實驗思路:首先定義三個數,先比較前兩個數的符號,如果相同則比較第二個數字和第三個數的符號,如果相同,利用左移一位判斷正負,之後進行顯示。

程式流程圖:yn

nynyn

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

(1)熟悉上機練習過程和偽指令實驗

實驗步驟:上機實驗首先要配置editplus的環境,之後輸入**,執行debug,在debug中輸入相應的指令,觀察結果。在程式中首先定義資料段和**段,在定義資料時使用偽指令定義,之後執行debug,了解了資料在記憶體中的儲存。

之前對debug的理解不深,有很多語句都不能很好的使用和理解,在經過這次實驗後,對於資料的儲存和debug有了更深的理解。

程式二自行分析的資料儲存情況:

data1data2data3:

(2)順序結構程式設計實驗

本實驗剛開始規定用查表法來實現。首先定義資料段定義數字,輸入數字,將其轉化成對應的位址偏移量,求的資料的位址送入bx,求得平方後除以10得到商和餘數,利用十進位制與ascii碼的轉化將其輸出到螢幕上。十六進製制與十進位制類似,int 21的2號功能每次只能輸出乙個字元,因此,需要將將結果轉化成乙個高位和乙個低位存在不同暫存器中分別輸出。

在實驗過程中對於不能正確執行的時候,使用debug中的t和p命令來執行得知程式執**況。

(3)分支程式設計實驗

首先,實驗先定義資料段的資料,通過將si的值賦為0,得到第乙個資料的有效位址,將資料送入暫存器得到cf值,之後按照同樣的方法取得第二個數字,並把其送入暫存器。使用rcl指令將最高位送入cf中,得到cf是0還是1,如果不相同則取第三個資料進行比較,否則輸出空格。在取第三個資料之後仍然左移一位,得到cf位,判斷cf是否相同,如果不同,則輸出空格,如果相同則繼續判斷cf位的數值,如果數值為1,則輸出負號,如果數值為0,則輸出正號。

實驗開始不能很好的使用跳轉命令等指令,走過很多彎路,在經過學習後,更好的了解了各種跳轉指令。在實驗的過程中,開始不能輸出負號,經驗證得知沒有很好的輸入int 21h 的功能,因而無法正常從顯示屏裡輸出。經過更改,程式正常執行。

五、實驗資料與實驗結果

實驗一程式一:首先使用指令t進行單步執行操作,執行的結果如下:

從中可以看出初始的值為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,結果如圖:

實驗三:

實驗中初始定義的值為-1,-2,-3經過單步執行結果如下:

此時dl的值為2d,負號的acsii碼值為2d,所以輸出結果正確。

之後把資料更改為1,2,3,輸出結果如下,此時dl的值為2b,結果正確,示意圖如下:

使用e命令來修改資料:

執行結果

之後將資料更改為1,-2,-3,得到結果dl的值為20,結果仍然正確

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

(1)熟悉上機練習過程和偽指令實驗

題目一:

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 3,-3,'a'

data2 dw 3,-3,'a'

data3 dd 3,-3,'a'

dseg ends資料段結束

sseg segment stack堆疊段開始

sktop db 20 dup(0)

sseg ends

cseg segment

assume cs:cseg,ds:dseg,ss:sseg ;**段開始

start: mov ax,dseg初始化資料段基址

mov ds,ax

mov ax,sseg初始化堆疊段基址

mov ss,ax

mov ah,4ch

int 21h返回dos

cseg ends**段結束

end start源程式結束

(2)順序結構程式設計實驗

dseg segment建立資料段

num db 0d,1d,4d,9d,16d,25d,36d,49d,64d,81d

sseg segment stack建立堆疊段

sktop db 20 dup(0)

sseg ends堆疊段結束

彙編實驗報告

組合語言與微機接 術實驗報告 一分支程式設計 二迴圈程式設計 學號 1120102118 姓名 馬婧婷 班級 08311001 完成日期 2013 04 18 實驗1.1 一實驗背景 1 實驗目的 掌握組織及除錯乙個簡單並完整的組合語言程式,熟悉組合語言上機過程。實驗的第乙個程式是分支設計程式。2 ...

彙編實驗報告

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

彙編程式設計實驗報告

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