彙編實驗報告三

2021-07-22 06:34:57 字數 3638 閱讀 8763

集美大學

計算機工程學院

實驗報告

1.實驗目的及內容

1.實驗目的

掌握迴圈程式的設計方法。

2.實驗內容

程式接收使用者鍵入的乙個關鍵字以及乙個句子,如果句子中不包含關鍵字則顯示」no match!」;如果句子包含關鍵字則顯示」match!」,且把該字在句子中的位置用十六進製制數顯示出來。

2.實驗環境

pc機、masm for windows 整合實驗環境2012

3.實驗方法

迴圈跳轉,巨集呼叫

4.實驗步驟

1 輸入關鍵字和句子

2 關鍵字的第乙個字元與句子中的第乙個字元比較

3 相等則均取第二個字元再比較,

4 不等則關鍵字的第乙個字元與句子接下去的字元比較

5 不等同③

6 相等同②

7 當比較結果不等的字元是非關鍵字第乙個字元,則返回關鍵字的第乙個字元,與當前比較的句子的字元相比。

8 依次類推

5.實驗結論

實驗結果正確

測試結果如下:

6. 實驗分析

實驗中大量使用回車換行和顯示字元,可以採用巨集呼叫和9號功能來減少總程式行數

附件1. 程式流程圖

否 是

否 是

是 否

否 是

否否否是否

是是否是否是2. 組合語言源程式

datas segment

data1 db 6,?,6 dup(?)

data2 db 30,?,30 dup(?)

data3 db 'keyword:','$'

data4 db 'sentence:','$'

data5 db 'no match!','$'

data6 db 'match!','$'

data7 db 'position:','$'

data8 db 13,10,'$'

f dw 2

e dw 10

z dw ?

datas ends

kong macro

lea dx,data8

mov ah,9

int 21h

endm

codes segment

assume cs:codes,ds:datas

start:

mov ax,datas

mov ds,ax

lea dx,data3

mov ah,9

int 21h;顯示keyword

kong

mov dx,seg data1

mov ds,dx

mov dx,offset data1

mov ah,0ah

int 21h;輸入keyword

kong

lea dx,data4

mov ah,9

int 21h;顯示sentence

kong

mov dx,seg data2

mov ds,dx

mov dx,offset data2

mov ah,0ah

int 21h;輸入sentence

;判斷句子中是否含有關鍵字

lea si,data1

mov cl,[si+1]

mov ch,[si+9]

p1: add si,f

mov bl,[si];當f=2時,取的是關鍵字的第乙個字元

lea si,data1

p6: add si,e

cmp bl,[si];比較字元是否相等

jne p3;不相等就跳到p3

p2: dec cl

cmp cl,0;cl記錄的是,在相等的情況下關鍵字中還有多少個字元沒比較

jne p7;cl=0說明都比較完了,也就是在句子中找到關鍵字

dec f

sub si,f;句子裡關鍵字的前一位

inc f;還原f

mov dl,[si]

cmp dl,20h;比較該位是否為空格;(注:當且僅當句子中出現的關鍵字的前後均為空格才算數,因為找的是字,不是字元。。。)

je p8

mov z,si

lea si,data2

cmp dl,[si+1];當關鍵字位於句首時,就不存在「空格」問題了

jne p7

mov si,z

dec cl

p8: add si,f;句子裡關鍵字的後一位

mov dl,[si]

cmp dl,20h;後一位也必須是空格,同理若關鍵字出現在句尾,則不需要檢查「空格」

je t1

cmp dl,0dh;句子結束後接下去一格均是「0dh」,我也不知道為什麼

je t1

p7: lea si,data1;繼續比較

inc e

inc f

dec ch

cmp ch,0

je t3

jmp p1

p3: lea si,data1 ;不相等的情況下跳轉到此處

cmp ch,1;ch記錄的是句子還沒被比較的字元個數因為我是先比較再減一; 所以當ch為1時說明已經比完了

jbe t3

cmp cl,[si+1]

jne p5;不相等則要返回關鍵字的第乙個字元,與句子接下去的字元比較

p4: dec ch

inc e

jmp p6

p5: mov cl,[si+1]

mov f,2

add si,2

mov bl,[si]

lea si,data1

jmp p6

;輸出結果

t1: kong

lea dx,data6

mov ah,9

int 21h;顯示match

kong

lea dx,data7

mov ah,9

int 21h;顯示pisotion

lea si,data1

sub e,10;這個的結果是指句子中關鍵字最後乙個字元的位置。;例如關鍵字am 句子i am tangzhimin e所指的位置就是句子中am的m,即e=4

mov cl,byte ptr e

sub cl,[si+1]

inc cl;而實際上我們要顯示的應該是3 [si+1]是指關鍵字長度;接下去就是顯示的問題了,需要判斷位置的值是否大於16和9 題目要求顯示十六進製制嘛

cmp cl,16

jb u1

sub cl,16

mov dl,31h

mov ah,02h

int 21h

u1: cmp cl,9

jbe u2

add cl,7

u2: inc cl

mov dl,cl

add dl,30h

mov ah,02h

int 21h

jmp t5

t3: kong

lea dx,data5

mov ah,9

int 21h;顯示no match

t5: mov ah,4ch

int 21h

codes ends

end start

彙編實驗報告

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

彙編實驗報告

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

彙編實驗報告一

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