微機原理實驗1 字串匹配程式實驗

2021-10-08 19:01:43 字數 2108 閱讀 9345

1.掌握分支程式的設計方法。

2.熟悉在pc機上建立、彙編、鏈結、除錯和執行8086匯程式設計序的過程。

1.比較兩個字串string1和string2所含的字元是否相同,若相同則顯示『match』,否則顯示『no match』。

2.修改程式,顯示所比較字元的個數。

datarea segment    ; 資料段

string1 db 'move the cursor backward.'

string2 db 'move the cursor backward.'

mess1 db 'match.',13,10,'$'

mess2 db 'no match.',13,10,'$'

datarea ends

prognam segment ; **段

main proc far

assume cs:prognam,ds:datarea,es:datarea

start: push ds

sub ax,ax

push ax

mov ax,datarea

mov ds,ax ; ds指向資料段

mov es,ax ; es指向資料段

lea si,string1 ; 源資料暫存器

lea di,string2 ; 目的資料暫存器

cld ; df=0,向高位址增加

mov cx,string2-string1 ; 字串string1的長度

repz cmpsb ; 當cx!=0並且zf=1時 重複執行後邊的指令,每執行一次cx的值減1

;cmpsb 指令比較 si 指向的記憶體運算元與 di 指向的記憶體運算元,按位元組比較

jz match ; 比較完zf=1則 匹配,否則 不匹配

lea dx,mess2

jmp disp

match: lea dx,mess1

disp: mov ah,09h

int 21h

retmain endp

prognam ends

end start

1.用編輯器建立原始檔d101-1.asm

2.用匯程式設計序masm.exe對原始檔進行彙編,產生目標檔案,再用連線程式link產生可執行檔案

3.使用除錯工具debug進行程式除錯

先用u命令反彙編,以便了解指令位址。顯示結果如下∶

將斷點設定在程式的主要部分執行前。

用g命令將程式執行到暫存器初始化後暫停,檢視當前資料段中的值,如下:

用r命令檢視當前各個暫存器中的值如下:

用e命令將資料區的字串backward,修改為forward.,如下:

其次,該實驗的核心所在是指令repz cmpsb,只要把該條指令的執行過程搞明白了,那麼整個實驗原理基本就沒什麼問題了,該條指令中repz其含義為:當cx!=0並且zf=1時,則重複執行後面緊接著的指令即cmpsb,每執行一次cx的值減1;而cmpsb指令的含義為:按位元組比較比較si指向的記憶體運算元與di指向的記憶體運算元,也就是對兩個運算元進行相減的操作,顯然該操作影響標誌位,因此其後面一般跟隨跳轉指令,在該程式中為jz match。

201409 3 字串匹配

試題編號 201409 3 試題名稱 字串匹配 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給出乙個字串和多行文字,在這些文字中找到字串出現的那些行。你的程式還需支援大小寫敏感選項 當選項開啟時,表示同乙個字母的大寫和小寫看作不同的字元 當選項關閉時,表示同乙個字母的大寫和小...

20140903 字串匹配

問題描述 試題編號 201409 3 試題名稱 字串匹配 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給出乙個字串和多行文字,在這些文字中找到字串出現的那些行。你的程式還需支援大小寫敏感選項 當選項開啟時,表示同乙個字母的大寫和小寫看作不同的字元 當選項關閉時,表示同乙個字母...

201409 3 字串匹配

問題描述 給出乙個字串和多行文字,在這些文字中找到字串出現的那些行。你的程式還需支援大小寫敏感選項 當選項開啟時,表示同乙個字母的大寫和小寫看作不同的字元 當選項關閉時,表示同乙個字母的大寫和小寫看作相同的字元。輸入格式 輸入的第一行包含乙個字串s,由大小寫英文本母組成。第二行包含乙個數字,表示大小...