集美大學
計算機工程學院
實驗報告
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 掌...